美文网首页
java的final关键字

java的final关键字

作者: 你想啥呢 | 来源:发表于2018-05-22 08:45 被阅读0次

——修饰类、接口和抽象类

    final可以修饰方法,属性,类!但是不能修饰接口,抽象类;因为 接口和抽象类本身就是用来继承或者实现的,与final的作用相斥!

    A、修饰类(class)。

         1、该类不能被继承。

         2、类中的方法不会被覆盖,因此默认都是final的。 

         3、用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类

    B、修饰方法(method)

         1、该方法可以被继承,但是不能被覆盖。

         2、用途:一个类不允许子类覆盖该方法,则用final来修饰 

         3、好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用final方法转入内嵌机制,提高了执行效率。 

         4、注意:父类中的private成员方法不能被子类覆盖,因此,private方法默认是final型的(可以查看编译后的class文件)

    C、修饰变量(variable) 

          1、用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。 

          2、特点:可以先声明,不给初值,这种叫做final空白。但是使用前必须被初始化。一旦被赋值,将不能再被改变。

    D、修饰参数(arguments) 

           1、用final修饰参数时,可以读取该参数,但是不能对其作出修改。

☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟修饰变量☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟

——修饰变量

    一、final修饰变量

        final修饰变量不可变,这里是指引用不可变(Java中共提供两种数据类型,原始数据类型8种和引用类型),即它只指向初始时指向的那个对    象,而不关心指向对象内容的变化。

        final修饰的变量必须初始化。初始化根据变量类型而不同:

            1、static变量。只能在定义,或者静态块中初始化。

            2、普通实例变量。可以在定义,非静态块,构造函数中初始化。

            3、局部变量。只能在定义时初始化。

注:static变量无法再非静态块和构造函数中初始化,因为静态变量在二者之前加载。同理,实例变量也无法在静态块中初始化,因为静态块加载时实例变量还没有定义。

public static void main(String[] args) {

    final int aInt =10;//必须初始化aInt =1;//编译期间错误System.out.println("aInt = "+aInt);

final StringBuffer s =new StringBuffer("Hello");

    s.append(" World!");

    System.out.println(s);//结果为Hello World!

    final StringBuffer s1 = new StringBuffer(" Hello");

    s1 = new StringBuffer("Hello World!"); //编译期间错误,不可以指向别的对象.

    /*

    * 不可变有两层含义:1 引用不可变 2 对象不可变

    * 综上,final指的是引用不可变,只能指向初始时指向的那个对象,而不关心对象内容的变化.

    * */

}

final数据另一种分类方法:

1.一个永不改变的编译时常量,还有static时命名全部大写:public static final int VALUE_ONE = 99;

2.一个在运行时初始化的值,而你不希望它被改变。private int i = (Random)random.nextInt(20);数值在运行时内被初始化时才会显现,编译时不知道。

相关文章

网友评论

      本文标题:java的final关键字

      本文链接:https://www.haomeiwen.com/subject/smncjftx.html