码迷,mamicode.com
首页 > 编程语言 > 详细

java中final关键字

时间:2018-03-10 01:25:51      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:public   常量池   als   改变   rgs   strong   end   []   编译   

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

1.修饰类

   当用final修饰一个类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,final类中的所有成员方法都会被隐式地指定为final方法。

2.修饰方法

 final修饰的方法,方法不能被重写(可以重载多个final修饰的方法)。当父类中final修饰的方法同时访问控制权限为private,子类中不能直接继承到此方法,此时子类中定义相同的方法名和参数,为子类中重新定义了新的方法。

3.修饰变量

  1) final修饰变量表示常量,只能被赋值一次,赋值后值不再改变。如果final修饰一个引用类型时,值指的是地址的值,内容是可变的。

public class Test06 {
    public static void main(String[] args){
        Test06 test = new Test06();
        final StringBuilder str = new StringBuilder("hello");
        str.append("World");
        System.out.println(str);
        
    }
}

  输出结果为helloWorld。

  2)当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。

  编译期间能知道它的确切值:

public class Test06 {
    public static void main(String[] args)  { 
        String a = "helloworld";   
        final String b = "hello"; 
        String d = "hello"; 
        String c = b + "world";   
        String e = d + "world"; 
        System.out.println((a == c)); 
        System.out.println((a == e)); 
    } 
}

  输出结果为true,false;编译器将其当成常量,a,c都指常量池中的"helloworld"。

 

  编译期间不知道它的确切值:

public class Test06 {
    public static void main(String[] args)  { 
        String a = "helloworld";   
        final String b = getWord(); 
        String d = "hello"; 
        String c = b + "world";   
        String e = d + "world"; 
        System.out.println((a == c)); 
        System.out.println((a == e)); 
    } 
    public static String getWord() { 
        return "hello"; 
    } 
}

  输出结果为false,false。

java中final关键字

标签:public   常量池   als   改变   rgs   strong   end   []   编译   

原文地址:https://www.cnblogs.com/1001n/p/8537100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!