java中final关键字

Posted 1001n

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中final关键字相关的知识,希望对你有一定的参考价值。

在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关键字的主要内容,如果未能解决你的问题,请参考以下文章

java关键字final和抽象类

java关键字final和抽象类

java关键字final和抽象类

java关键字final和抽象类

Java之String相关内容详解(字符串和字符串常量池)面试题

java多线程04----------final和static