Java final 变量,类,方法

来源:互联网 发布:考勤系统数据读不出 编辑:程序博客网 时间:2024/05/16 12:42

文章来源:https://en.wikibooks.org/wiki/Java_Programming/Keywords/final

有三类:final  类 、 final 方法、final 变量。

一、final 变量:  如果一个变量一旦赋值,就不允许改,只能读了。

                         A final 不能设置 volatile(可见性或者是编译器和jvm不能改变指令的顺序).

       下面1,2:就是final 的必不可少的知识点,只要记住这两点即可。

   1、如果变量是一个primitive type,它的值不能改变。即变量a不能重新赋值。

    

  2、如果变量是一个对象,仅仅它的连接不再可变,牢记在心它的值仍然能改变

      list 变量(实例变量)是一个对象,可以修改它里面的值

    

              ArryList list1=new ArrayList();

             list=list1;//编译时就会出错,list实例变量是常量,不能重新赋值,但是里面的数据可以改变。

 3、The final 变量用在方法参数里。


   1>当参数变量是原始类型时,方法里只是拿来用。

  2>当参数变量是对象时,方法调用者,就是希望别人去改变参数对象值,哪么调用者接受改变的值,这个很有用。

     当我们叫一个朋友(常量对象)去帮忙去帮修电脑,哪么朋友修好后,接收朋友的修改,

     这时朋友不再接受别人的修电脑要求,一直帮我修好为止。

 二、 final类也是利用final变量的特征:主要的目的,表示对象的内容不可改变,这样每建立一个String对象

        如果要改变其中对象的值,必须重新建立一个新对象放改变的值,所以每次一个小小的应用测试,String对象最少也有1000多个对象。

       1、禁止建立子类 

        2、不能成为抽象类,即类里面没有未实现的方法 

        例子:final String  类里面变量:privatefinalchar value[],这是一个原始类型char,所以当构造函数第一次赋值后,值不允许改变(对象活着时)

package str;
import static net.mindview.util.Print.*;

public class Immutable {
public static String upcase(String s) {
return s.toUpperCase();
}
public static void main(String[] args) {
String q = "howdy";
print(q); // howdy
String qq = upcase(q);
print(qq); // HOWDY
print(q); // howdy
}
}(1)String q = "howdy"; q不是一个final 实例变量,所以q可以赋新对象
String qq = upcase(q); 因为是常量类,所以对象里面的值不可改变,当q代表一个对象时,哪么不管它传给谁,

里面的值不能改变。

public static String upcase(String s) {return s.toUpperCase();}

当p传给方法upcase时,因为方法的参数变量只放在本地变量(堆栈中),所以当调用一个后,

jvm开始为方法参数分配空间,

String s:s是一个实例变量,分配4个字节存放传过来的q对象地址,指向数据存在的地方,

哪么s里面的值也不可以改变。

但是s=new String("abd"):可以重新指向一个新对象,因为它不是final 实例变量。

三、final方法:

      1、禁止子类重写方法

      2、如果一个类是final,暗示private 方法是final 方法

           不能实现多态,多态必须是动态绑定.             

     3、不能成为抽象方法,即没有未实现的方法 

     4、static 方法也不能实现多态,因为是类级别的。


      

          


  

原创粉丝点击