1. static关键字详解
1.1 static -- 静态变量与静态方法
private static int age; //静态的变量 类在内存中只有一个;如果想让多个实例同时能操作该变量则定义static 多线程!
private double score; //非静态的变量
public void run(){
}
//静态方法,同一个类里可以直接调用
//但是静态方法无法直接调用非静态方法,因为加载时还不存在
public static void eat(){
}
public static void main(String[] args) {
Student s1 = new Student();
Student.eat();
eat();
}
1.2 静态代码块
//2
{
//代码块(匿名代码块) 程序在执行时无法主动调用,创建对象时自动创建,并且在构造器之前
System.out.println("匿名代码块");
}
//1
static {
//静态代码块 类创建的时候就执行,永久只执行一次
System.out.println("静态代码块");
}
//3
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person1 = new Person();
System.out.println("====================");
Person person2 = new Person(); //结果只有“匿名代码块”和“构造器”,因为
//静态代码块只执行一次
}
1.3 静态导入包
example:
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Test {
public static void main(String[] args) {
System.out.println(random());
System.out.println(PI);
}
}
2. 抽象类
abstract修饰符可以用来修饰方法也可以修饰类
- abstract 方法名 --> 抽象方法;
- abstract 类名 --> 抽象类
抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
抽象类:不能使用new关键字来创建对象,它是用来让子类继承的
抽象发方法:只有方法的声明,没有方法的实现,它是用来让子类实现的
子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则子类也要声明为抽象类
3. 接口
- 普通类:只有具体实现
- 抽象类:具体实现和规范(抽象方法)都要
- 接口:只有规范,无法写方法 -- 专业的约束!!约束和实现分离
- 接口的本质是契约
- 声明类的关键字是class,声明接口的关键字是interface
例:
public interface UserService {
//接口中的所有定义其实都是抽象的 public abstract
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public interface TimeService {
void timer();
}
抽象类:extends
类 可以实现接口 implements 接口名
实现了接口的类,就需要重写接口中的方法
多继承~利用接口实现多继承
public class UserServiceImpl implements UserService, TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
- 接口的作用总结
- 起约束作用
- 定义一些方法,让不同的人实现
- 所有的方法:public abstract
- 所有的属性:public static final
- 接口不能被实例化,接口中没有构造方法
- implements可以实现多个接口,实现多继承
- 实现接口的类必须要重写接口中的方法