static 关键字:
使用范围:static 关键字可以用来修饰变量和方法
用法:被static修饰的变量和方法就变成了静态变量和静态的方法。静态变量/方法在类加载的时候加载到方法区的static区,先 于对象的存在,被所有的对象所共享,可以使用类名调用,也可以使用对象调用,推荐使用类名调用。
注:静态的方法中只能调用外部用static修饰的变量和方法。如果非要调用非静态的,需要创建对象. 原因是静态的变量或方法,最先加载到内存中,如果此时没有对象,那么成员变量还不存在,所以不能调用。
成员变量: 对象名调用 对象名.成员变量 p.name
静态变量: 类名调用 类名.静态变量 StaticDemo.b
成员变量: 也叫实例变量 实例------对象
静态变量: 也叫类变量
final 关键字:
使用范围:final 关键字是最终的意思,可以用来修饰类、方法和变量
用法:
final 修饰的类不能被继承
final 修饰的方法不能被重写
final 修饰的变量值不能改变,只能被赋值一次。 final 修饰的变量要有初始值
注:final修饰的变量如果是引用数据类型,代表地址值不能变,可以修改里面的属性值;
final关键字与static关键字的关系:
答:二者并没有什么关系,只是在修饰常量的时候可以一起使用:public static final int A = 10;final关键字表示常量值不能改变,static关键字表示只有一份,为所有对象共享。
注意:final属性的赋值需要在构造方法完成之前进行。即可以在静态代码块、代码块以及构造方法中进行赋值。
final修饰局部变量的问题以及修饰变量的初始化时机
变量被final修饰后就成了常量,即自定义常量。自定义常量只能被赋值一次。
1)成员常量:必须在对象创建成功之前赋值,有三种方式:显示初始化,在构造代码块中初始化,在构造方法中初始化。
2)局部常量:必须在使用之前赋值
自定义常量的值是不能改变的,但是定义的引用数据类型的常量引用指向的堆内存的成员变量的值是可以改变的。
final、finally、finalize关键字的区别 :
finally:用于异常处理,finally后的内容一定会执行,除非使用System.exit(0/1);命令使程序退出。
finalize()方法:用于垃圾回收