首页 > 其他 > 详细

final关键字

时间:2019-03-11 13:16:06      阅读:152      评论:0      收藏:0      [点我收藏+]

1         final关键字

1.1           final修改类、方法、变量

在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面就从这三个方面来了解一下final关键字的基本用法。

(1)修饰类

  当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

(2)修饰方法

子类无法覆盖该方法;

(3)修饰变量

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。重新赋值会出现错误。

1.2           final深入理解

(1)final修饰会在编译时替换常量

String a = "hello2"; 

final String b = "hello";//被final修饰的常量字符串

String d = "hello";

String c = b + 2; 

String e = d + 2;

System.out.println((a == c));//true

System.out.println((a == e));false

因为b被final修改,所以b不可以再指向其他常量字符串,b的值就固定了。所以在编译阶段,c就被优化为字符常量“hello2”,a/c同时指向常量池中字符串“hello2”。而e会在堆上上创建对象。创建的是

(2)使用方法返回时不会在编译时被优化替换

public class Test {

    public static void main(String[] args)  {

        String a = "hello2"; 

        final String b = getHello();

        String c = b + 2; 

        System.out.println((a == c));//false

 

    }

     

    public static String getHello() {

        return "hello";

    }

}

只有在编译期间能确切知道final变量值的情况下,编译器才会进行这样的优化。

(3)final修饰的引用变量指向的对象内部变量可以变

public class Test {

    public static void main(String[] args)  {

        final MyClass myClass = new MyClass();//指向的对象不能变

        System.out.println(++myClass.i);//对象内部的变量值可以变

    }

}class MyClass {

    public int i = 0;

}

1.3           final 和static的区别

final修饰的变量,表示只能在定义或者构造函数中初始化赋值,赋值后不能修改。不同的对象可以初始化为不同的值。Static则表示一个类创建的所有对象都共享这一个静态变量,任何一个对象对这个共享变量进行修改,其他对象使用该变量时值都会是改变后的值。

MyClass myClass1 = new MyClass();

MyClass myClass2 = new MyClass();

System.out.println(myClass1.i);//i不同,两个对象有两个final值

System.out.println(myClass2.i);

System.out.println(myClass1.j);//j相同,静态变量只第一次创建对象时初始化值;

System.out.println(myClass2.j);

class MyClass

{

    public final double i = Math.random();//final变量

    public static double j = Math.random();//静态变量

final关键字

原文:https://www.cnblogs.com/bclshuai/p/10509517.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!