1.static
可以用来修饰属性、方法、代码块(初始化块)、内部类
(1)static修饰属性(类变量)
其余的叫实例变量
1.由类创建的对象,都共用这一个属性
2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的 一个调用。 vs 实例变量(非static修饰的属性,各自有各自的一套副本 )
3.类变量是随着类的加载而加载的。独一份
4.静态的变量可以直接通过“类.类变量”的形式来调用
5.类变量的加载早于对象,而实例变量是随着对象的创建而被加载的。
6.类变量存在于静态域中。
(2)static修饰方法(类方法):
1.随着类的加载而加载,独一份
2.可以直接通过“类.类方法”调用
3.在类方法内部可以调用静态的属性或静态的方法,但是不能调用非static的属性或方法。反之,非静态的方法可以调用静态的属性或方法
注:静态的方法内,是不可以有this或super关键字的!静态的结构(static的属性、方法、代码块、内部类)的生命周期早于非静态的结构,同时被回收也要晚于非静态的结构
2.final关键字:最终的,可以用来修饰类、属性、方法
1.final修饰类:这个类就不能被继承
2.final修饰方法:这个方法不能被重写
3.final修饰属性:此属性就是一个常量,习惯上,常量用大写字符表示
此常量在哪里赋值:1.此常量不能使用默认初始化。2.可以显式的赋值,或在代码块、构造器中赋值也可以,但是不可以在方法中赋值。
全局变量:变量用static final修饰
3.abstract:抽象的,可以用来修饰类、方法
1.abstract修饰类:抽象类
1)不可被实例化
2)但是有构造器(凡是类都有构造器)
3)抽象方法所在的类,一定是抽象类
4)抽象类中可以没有抽象方法
abstract class Person(){//抽象类 String name; public abstract void eat();//抽象方法 public abstract void walk();//同上 public Person(){}//空构造器 public Person(String name){//含参的构造器 this.name = name; } }
2.abstract修饰方法:抽象方法
1)格式:没有方法体,包括{} 如public abstract void eat();
2)抽象方法只保留方法的功能,具体的执行,交给继承抽象类的子类,由子类重写抽象方法
3)若子类继承了抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化
4)若子类继承了抽象类,只重写了部分抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的!
注:abstract不能用来修饰属性、构造器、private、final、static