Java-Final

今天有人问我,Java的对象或者类型修改用Final. 
Java中的final关键字通常的指的是“这是无法改变的”。它可能被做为三种的修饰词.------数据,方法,类。 
一 final数据 
1.在修饰基本类型时,表示它是一个常量,在定义时必须给予赋值. 
   特别的一个既是static又是final 的字段只占据一段不能改变的存储空间。 
2.在修饰对象或者数组时,它表示对对象或数组的引用恒定不变,然而对象本身却是可以修改的. 
  空白final:声明为final但末给定初值的字段,但必须确保空白final在使用前被初始化,一般在构造方法完成。 
  final参数:在方法的参数列表以声明的方式将参数指明为final,这意味着在方法里无法修改参数的引用所指向的对象。 
二 final方法 
1. 把方法锁定,使得在子类(导出类)中不能修改它的含义。 
2.效率,一个final方法被调用时会转为内嵌调用,不会使用常规的压栈方式,使得运行效率较高,尤其是在方法体较简单的情况下, 
   但也并不绝对。(与C++中的inline关键字类似) 
特别的:类中的所有private方法都隐式地指定为是final,所以在继承关系中不存在覆盖问题。 
三 final类 
声明为final的类不能派生出了子类,也就是不能被继承,一个final类中的所有方法都隐式地指定为final. 

可能有人会问了,你说不能改变,你说只占据一段存储空间,你懂JVM的编译规则吗? 
首先举下Final数据的例子. 
Java代码   收藏代码
  1. public class MyClass {  
  2.         private static final int aa=1;  
  3.         int b=3;  
  4.           
  5.         public int add(int a,int b){  
  6.                 return a+b;  
  7.         }  
  8. }   

Javac MyClass 
Java代码   收藏代码
  1. public class com.tag2.jvm.MyClass {  
  2.     
  3.   // Field descriptor #6 I  
  4.   private static final int aa = 1;  
  5.     
  6.   // Field descriptor #6 I  
  7.   int b;  
  8.     
  9.   // Method descriptor #11 ()V  
  10.   // Stack: 2, Locals: 1  
  11.   public MyClass();  
  12.      0  aload_0 [this]                                                                    //0:变量到操作数栈  
  13.      1  invokespecial java.lang.Object() [13]                               //1:调用需要特殊处理的实例方法:invokespecial  
  14.      4  aload_0 [this]                                                                    //4:变量到操作数栈  
  15.      5  iconst_3                                                                             //5:常数到操作数栈  
  16.      6  putfield com.tag2.jvm.MyClass.b : int [15]                       //6:访问类的域和类实例域,com.tag2.jvm.MyClass.a : int [15]    
  17.      9  return  
  18.       Line numbers:  
  19.         [pc: 0, line: 3]  
  20.         [pc: 4, line: 5]  
  21.         [pc: 9, line: 3]  
  22.       Local variable table:  
  23.         [pc: 0, pc: 10] local: this index: 0 type: com.tag2.jvm.MyClass  
  24.     ...  
  25. }  

大家看以上的编程Class文件,通过JVM指令解析,一般操作步骤是,先声名变量 int aa,int b.然后再把常数也压到栈中,最后赋值的过程。 
大家看到final修改的变量不需要赋值[一个既是static又是final 的字段只占据一段不能改变的存储空间] 
(声名为静态的是类变量,其访问速度会快(少了一个赋值过程),也就是固定的内存地址,用final修改就是不可改变的存储空间) 
用final修改意为不可改为,这意味着在方法里无法修改参数的引用所指向的对象。[引用恒定不变 ,对象本身可以修改] 
我上节介绍了设计模式之单例模式,其中Spring用到了两个synchronized (this.startupShutdownMonitor) synchronized (this.singletonObjects) 
其中两个对象都是final类型的[Spring的锁对象一般都是Final的,不可改变的,也就保证了其原子性]。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值