1.static使用规则
1.1 静态属性和静态方法在类加载时被存放到方法区,不创建对象也可以使用
1.2 非静态属性和方法必须在创建对象后,通过对象调用
1.3 静态只能使用静态,非静态没有限制(因为使用非静态时,对象已经创建成功)
1.4 测试–记录一个类创建对象的次数
public class AbstractClass {
private static int count=0;
public void getCount(){
System.out.println(“已经创建了”+count+“个对象”);
}
//在构造方法中使count++,每创建一个对象,构造方法使用一次,count+1;
public AbstractClass() {
count++;
}
}
//测试类
public class Test {
public static void main(String[] args) {
AbstractClass abstractClass=new AbstractClass();
abstractClass.getCount();
}
}
2.final关键字
1.最终的,final修饰的变量无法再次修改
2.被final修饰的变量一定要初始化,初始化之后无法再次修改
3.对于某些确定不变的变量,使用final关键字,比如圆周率PI
3.被final修饰的东西,有什么属性:
4.被final修饰的方法,无法被子类重写
5.被final修饰的类,无法被子类继承,
6.使用final修饰的对象,地址无法修改,即对象恒指向一个固定的对象/内存空间
7.使用final修饰的对象,其中的属性可以修改
final Father father=new Father("张三",45);
//使用final修饰的对象,地址无法修改,即对象恒指向一个固定的对象/内存空间
// father=new Father("李四",45);
//使用final修饰的对象,其中的属性可以修改
father.name="李四";
8.final也可以修饰形参,但是形参在方法内部无法修改
4.被final修饰的变量,何时初始化
4.1 可以执行初始化操作的顺序 :
static优先 - 成员变量 - 构造代码块 - 构造方法
4.1.1 static优先:
可以在静态成员变量声明时初始化 也可以在静态代码块中初始化 – 按顺序执行
static修饰的final的变量 -- 初始化时间点
1. 在static的final修饰的变量声明的时候
static final int n5 = 50;
2. 在类中被static修饰的大括号内
类中被static修饰的大括号 -- 静态代码块
static final int n6;
static {
n6 = 60;
}
4.1.2 普通成员变量的初始化时机
1. 在声明的地方可以进行初始化操作
final int num = 10;
2. 在直接写在类当中的大括号内,可以进行初始化操作
直接写在类当中的一对大括号 - 就叫构造代码块
final int n2;
{
n2 = 20;
}
3. 在构造方法 (有参构造可以,无参构造也可以)中,也可以进行初始化操作
final int n3;
public FinalDemo2(){
n3 = 30;
n4 = 40;
}
final int n4;
public FinalDemo2(int x, int y) {
n3 = x;
n4 = y;
}
4.2 总结
关于final修饰的变量的初始化的时间节点:
1. 对于静态的来说:
静态变量声明处 --> 静态代码块当中
2. 对于一般的成员变量来说:
成员变量声明处 ---> 构造代码块当中 --> 构造方法中
5.接口
5.1 定义
接口就是全部是抽象方法的抽象类(JDK1.8之后允许有普通方法)
5.2接口方法
接口中的方法默认被public abstract修饰 ,即默认公开的,抽象的
5.3 接口变量
1.接口中的成员变量,默认被public final static 修饰,公共的,最终的,最终的,称作公开的静态常量
2.接口中的成员变量属于接口,初始化后无法修改
5.4 接口的实例化
1.接口无法直接实例化,只能借助普通子类实例化
接口可以使用内部类实例化
InterfaceDemo interfaceDemo=new InterfaceImplement();
2.普通的类实现接口,用implements表示,子类实现接口中所有的抽象方法
3.ctrl+i ,快捷键显示重写的接口抽象方法、实现的抽象方法
ctrl+o,快捷键重写抽象类抽象方法
5.5 接口的继承和实现
1.继承
接口可以被接口继承
接口可以多继承,即一个接口可以继承多个父类接口
2.实现
1.接口可以被普通类实现
普通子类可以实现多个接口
2.接口可以被抽象类实现
*方框:类
椭圆:接口