本质:就是代表一个”可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
Java变量是程序中最基本的存储单元。其要素包括变量名、变量类型和作用域。变量分类:局部变量在使用前必须先声明、初始化(赋初值)再使用。类变量:使用static定义。从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。 int String = 1; // 这是对的 引用类型可以当变量名常量:
在Java语言中,主要是利用关键字final来定义一个常量。常量一旦被初始化后不能再更改其值。
只能被初始化一次
书写:常量一般大写字母和下划线:MAX_VALUE
final关键字的作用: 1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。 2. 修饰方法:该方法不可被子类重写。但是可以被重载! 3. 修饰类: 修饰的类不能被继承。比如:Math、String等。成员变量不一定要赋初始值。可以再外面声明,在构造方法中赋值,也不会错。 面试题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变(作用在变量上),引用变量所指向的对象中的内容还是可以改变的。
例如,对于如下语句:
finalStringBuffer a=newStringBuffer("immutable");
执行如下语句将报告编译期错误:
a=new StringBuffer("");
但是,执行如下语句则可以通过编译:
a.append("broken!");final, finally, finalize的区别?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类(这里的内部类指的是方法内部类或匿名内部类,不包含静态内部类和成员内部类 在Java8 中,被局部内部类引用的局部变量,默认添加final,所以不需要添加final关键词)要访问局部变量,局部变量必须定义成final类型。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。但是JVM不保证此方法总被调用。