static关键字
静态修饰符:可以修饰类,成员变量,成员方法和静态代码块,不可以修饰局部变量.。
可以不创建对象,类名.属性名调用。
特点
随着类的加载而加载,优先于对象存在,被类的所有对象共享。
可以通过对象调用,也可以通过类名调用,调用的都是同一个内存地址的变量。
注意
在静态方法中是没有this,super关键字。(静态是随着类的加载而加载,this是随着对象的创建而存在,静态比对象先存在。)
静态方法只能访问静态的成员变量和静态的成员方法,非静态成员方法不仅可以访问静态成员变量和成员方法,也可以访问非静态的成员变量和成员方法。
静态变量和成员变量区别
所属不同
- 静态变量属于类,所以也称为类变量。
- 成员变量属于对象,所以也称为实例变量(对象变量)。
内存中位置不同
- 静态变量存储于方法区的静态区。
- 成员变量存储于堆内存。
内存出现时间不同
- 静态变量随着类的加载而加载,随着类的消失而消失。
- 成员变量随着对象的创建而存在,随着对象的消失而消失。
调用不同
- 静态变量可以通过类名调用,也可以通过对象调用。
- 成员变量只能通过对象名调用。
静态导入
静态导入用于简化程序对类静态属性和方法的调用。
语法:
import static 包名.类名.静态属性|静态方法|*
例如:
import static java.lang.System.out;
out.print("静态导入");
abstract关键字
用abstract修饰的类叫抽象类,用abstract修饰的方法叫抽象方法,声明而未被实现。
abstract不能和final一起用,abstract不能和static一起用,abstract不能和private一起用。
特点
如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成抽象的函数。抽象方法是不可以有方法体的。
如果一个类出现了抽象的函数,那么该类也必须使用abstract修饰。
如果一个非抽象类继承了抽象类,那么必须要把抽象类的所有抽象方法全部实现,除非这个子类是抽象类。
抽象类即可以存在抽象方法,又可以存在非抽象的方法,还可以不存在抽象方法。(一个类没有抽象方法定义成抽象类,目的是不让创建对象。)
抽象类是不能创建对象,不可以被实例化,可以通过子类进行实例化。
final关键字
最终的:可以修饰类,变量,方法。
修饰类:类不能被继承。
修饰变量:变量就变成常量,只能被赋值一次。(可以是全局变量,也可以是局部变量。)
修饰方法:方法不能被重写。
final修饰变量的初始化时机
被final修饰的变量只能赋值一次,在构造方法完毕前(非静态的常量)。
class Car {
int number = 1234;
}
public class FinalVariable {
public static void main(String[] args) {
final Car mycar = new Car(); //终极变量,引用类型
mycar.number = 8888; //可以!修改的是mycar指向的内存中的值
mycar = new Car(); //错误!不能修改mycar本身的值
}
}