static关键字
可以修饰方法和属性
成员变量可以分为实例变量和静态变量
private String name; //实例变量
private static String name; //静态变量,被本类所有对象共享
没有static修饰的方法称为实例方法,是对象级别的,调用实例方法需要创建对象。例如:
Demo demo = new Demo()
demo.main
用static修饰过的方法或者属性是类级别的,会在类加载的时候加载。调用时是不需要创建对象的,可以直接用类名调用,如Demo.name.
但创建对象也可以调用静态方法。
静态变量是存放在方法区的。
静态方法中没有对象this,所以不能访问非静态成员。
静态代码块
写在类中,不能写在方法中,在类加载的时候会与之加载。
定义:static{
}
执行时静态代码块会在方法之前执行。
所有的方法运行时开辟的空间都在栈内存中,包括静态方法,但静态属性和静态代码块在方法区。
静态代码块只执行一次,执行一次后就已经开辟空间了,不需要再次开辟。
final关键字
代表的是最终的。
可以修饰类、方法和属性。
final修饰类时,类不能被继承。如String类,本身已经是最终类
final修饰方法时,该方法不能被重写
被final修饰的变量必须要初始化,赋值后不能再重新赋值
final修饰属性时,如果final修饰的是一个基本数据类型的变量,那么这个变量就是常量,它的值就定了,不能变了,而如果修饰的是一个引用变量,那么该变量存的是一个内存地址,该地址就不能变了,但是该内存地址所指向的那个对象还是可以变的。
不建议修饰引用数据类型,因为仍可以通过修改对象的内部数据进行改变,意义不大。
用static和final共同修饰的变量是公共的常量(类级),命名是所有字母都需要是大写,之间用“_”连接,如GUO_JI,常量的访问权限修饰符可以public,也可private,因为值已经不可变了。
final不能与abstract共存,因为被final修饰的类不能被继承,而abstract类需要子类的实现。