java final关键字

来源:互联网 发布:经济数据查询 编辑:程序博客网 时间:2024/06/10 17:18

final关键字
1、可以修饰类,该类不能被继承。
2、可以修饰方法,但是该方法不能被重写。
3、可以修饰成员变量,变量就变成了常量。被final修饰的变量只能赋值一次。
4、可以修饰局部变量,变量分两种情况:
(1)局部类型:基本类型的值不能发生变化
(2)引用类型:引用类型的地址值不能发生变化,但是该对象的堆内存的值是可以改变的。

class Student{    int age = 10;}public class Test {    public static void main(String[] args) {                final Student s = new Student();    //final修饰引用类型的变量,不能改变的是变量的地址值        System.out.println(s.age);          //输出10        s.age = 100;        System.out.println(s.age);          //输出100        //s = new Student();        //会报错,因为s的地址值不可修改,不可以为s分配新的内存空间    }}


final的一些应用实例

下面程序会报错:原因是因为 1 和 3都是int类型的值,且b1和b2可以自动转换成int类型的变量(小范围到大范围可以自动转换,byte < int),所以结果会导致把一个int赋值给byte,因此会出错。

//会报错byte b1 = 1;byte b2 = 3;byte b3 = b1 + b2;

但是下面代码就可以正常运行。

final byte b1 = 1;final byte b2 = 3;byte b3 = b1 + b2;  //输出4


扩展:java中的自动类型转提升
1、所有byte型、short型、char型将被提升到int型
2、整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。

short s1 = 1;  s1 = s1 + 1;     //错误

1、short s1 = 1;在栈中开辟了一个short类型的空间;
2、而s1 = s1 + 1;s1是short类型的,1是int类型的。int类型 > short类型,所以相加后的结果应该为较大的类型,即为int类型
4、把较大的类型(int)赋值给较小的类型(short)必然会出错
5、因此必然需要强制转换。s1 = (short) (s1 + 1)即为正确

short s1 = 1;  s1 += 1;     //正确

是因为+=运算符在赋值的时候自动完成了强制类型转换。

原创粉丝点击