final修饰构造方法的方法叫什么方法

final修饰符_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
final修饰符
上传于|0|0|文档简介
&&final修饰的类 对象 属性 及final的用法
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢final用法总结 - 每天进步一点点 - ITeye技术网站
博客分类:
第一 final修饰类
Final修饰的类没有子类,因为它不能被继承,例如java.lang.String类。Final类的所有方法都是final方法。
注意:final不能跟abstract关键字连用,因为重现的类或者方法必须被继承和覆盖才有意义。
第二 final修饰方法
Final方法可以被子类继承,但是不能被子类重写。有人说,父类的private方法是final方法,不过我不这么认为。因为,父类的private方法可以被子类继承,也能被子类覆盖。
第三 final修饰属性
Final属性属于常量,只能被初始化一次,之后不能改变。初始化的方式有两种:
1在声明时初始化
class Test{
final int age = 1;
2在构造方法中初始化
class Test{
如果final修饰的是个引用变量,如StringBuffer,可以通过调用对象的方法、设置属性等改变其值。但是引用变量本身不能变。示例如下:
class Test{
public final StringBuffer sb = new StringBuffer("这是第一个字符串");
public String appendString(String str){
return this.sb.append(str).toString();
class Demo{
public void mytest(){
Test t = new Test();
//错误,因为它对属性sb又一次赋值了
t.sb = "赋值为新字符串";
//正确,以为它并没有改变sb的引用地址
t.sb.append("添加点东西");
//正确,理由同上
t.appendString("又添了一点东西");
第四 final修饰局部变量
Final局部变量,例如,在一个函数中声明的一个局部变量,JVM会在程序的栈内存中为该变量开辟空间。而堆内存是由GC(垃圾回收器)管理的,所以当函数结束时,该变量依然存在,可以被其他线程或程序段使用,不至于出现空指针异常。这个用法在多线程、定时器和内部类中较为常见。例如:
import java.util.T
import java.util.TimerT
public class FinalTest {
static void test(){
final Timer timer = new Timer();
final int count = 1;
timer.schedule(new TimerTask(){
public void run(){
System.out.println("2,test方法,输出count=="+count);
//这一句使用了timer变量
timer.cancel();
public static void main(String[] args) {
FinalTest.test();
System.out.println("1,这句话应该在test方法之后运行");
运行结果是:
1,这句话应该在test方法之后运行
2,test方法,输出count==1
第五 final修饰方法参数
Final参数跟final属性差不多,都是不能更改其值。但是如果参数是引用变量的话可以设置其属性和调用其方法。
而占栈内存是由GC(垃圾回收器)管理的?栈内存随着 方法的压栈 申请 出栈 释放。gc是管理的堆内存和方法区内存!父类的private方法可以被子类继承?private方法是对子类屏蔽的,就相当于没有一样,所以是可以取一样的方法名,也谈不上重写。是,不是栈内存,写错了,应该是对内存。
forestqqqq
浏览: 52574 次
来自: 北京
第8,“内部类名.this.属性名”,应该改为“外部类名.th ...
挺不错,讲解很详细
kongxuan 写道在项目中用过xstream,后来随着接口 ...
在项目中用过xstream,后来随着接口访问量变大,xstre ...
这玩意效率不高,对于高并发应用不合适。TA的最新馆藏[转]&Java final 修饰符知识点总结(必看篇)
投稿:jingxian
字体:[ ] 类型:转载 时间:
下面小编就为大家带来一篇Java final 修饰符知识点总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
final从字面上理解含义为“最后的,最终的”。在Java中也同样表示出此种含义。
final可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
1. final修饰类:
final修饰类即表示此类已经是“最后的、最终的”含义。因此,用final修饰的类不能被继承,即不能拥有自己的子类。
如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误。
2. final修饰方法:
final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。
此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,
将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是
在子类中重新定义了新的方法。
public class B extends A {
public static void main(String[] args) {
public void getName() {
* 因为private修饰,子类中不能继承到此方法,因此,子类中的getName方法是重新定义的、
* 属于子类本身的方法,编译正常
private final void getName() {
/* 因为pblic修饰,子类可以继承到此方法,导致重写了父类的final方法,编译出错
public final void getName() {
3. final 修饰变量:
final修饰的变量表示此变量是“最后的、最终的”含义。一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。
这里需要注意以下几个问题:
1. final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化(即为其显示指定初始值)。
对于final修饰的形参,由于是实参传递过来的,很好理解。
对于final修饰的局部变量,与未用final修饰的变量一样,都是需要显示初始化。即局部变量都是需要显示初始化的。
对于一般的类属性和对象属性,由类和对象的初始化过程中可以看出,首先都进行了默认初始化。然后对有显示赋值的变量才再进行显示初始化。
但对final修饰的类属性和对象属性而言,如果不显示初始化,其默认将是进行默认初始化后的值,这与final本身出发点矛盾,因此,Java语法规定:
final修饰的类属性和变量属性必须要进行显示初始化赋值。
另外,无论对于基本数据类型还是引用数据类型,final修饰的变量都是首次显示初始化后值都不能修改。对于基本数据类型,很好理解。对于引用
数据类型,引用变量指向的是实际的对象,但其存储的是所指向对象的地址,因此,其值不能修改并不意味着其所指向的对象不能修改。
4. final修饰变量后导致的“宏替换”/"宏变量"问题
Java 中宏变量/宏替换指的是在java代码中在编译期某些变量能够直接被其本身的值所替换,编译到.class文件中。因此,编译后的.class文件中已经不存在此变了。
在String类型的变量中,有时候经常遇到如下情况:
public class Test {
public static void main(String[] args) {
String country = "China";
String name = "qqyumidi";
String userInfo = country + //编译后此处依然是country和name变量
String user = "China" + "qqyumidi"; //编译后此处直接变成Chinaqqyumidi
&在上述代码中的第9行,编译后的变量结果直接为Chinaqqyumidi。而第8行代码中,由于country和name都是普通的变量,编译器无法在编译时直接确定userInfo的值,因此
此处编译后结果不直接是Chinaqqyumidi。
但是,如果希望第8行中的代码在编译期直接就能表示为Chinaqqyumidi,就需要用到final修饰符对country和name变量进行修饰。
原因:final修饰符修饰的变量在由于其本身的特性,在编译期就能直接确定其值,且此值不可变。在编译过程中,可以直接将其变量直接转换成其值本身去表示。
public class Test {
public static void main(String[] args) {
final String country = "China";
final String name = "qqyumidi";
String userInfo = country + //编译后此处直接是Chianqqyumidi
以上就是小编为大家带来的Java final 修饰符知识点总结(必看篇)的全部内容了,希望对大家有所帮助,多多支持脚本之家~
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在面向对象中,为了让某些方法不能被继承,使用final关键字进行修饰,请问使用final关键字修饰之后,能优化性能?
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
方法为final,理论上的确可以优化性能。 1. 相应的不需要为了支持多态而多加一个table slot,或者是函数指针之类的; 2. 便于方法内联,但这和是编译器或者VM实现相关了,而且内联过度也会造成很多问题,诸如二进制或者字节码代码升级比较麻烦,造成编译负担加重。参考:/developerworks/java/library/j-jtp1029/index.html
优化性能效果不是很显著,但是,有些情况可能会有效果;比如说,
<dd style="float:cursor:" title="声誉值:
final修饰的类与普通类的使用几乎没有差别,只是它不能被继承了.单纯的说final修饰的类与非final类应该没什么区别
理论上它可以提高性能, 因为当一个类是final的,则该类所有方法都是final的。java编译器会寻找机会内联所有的final方法。此举能够使性能平均提高50%。
final原则上说是不能对性能做优化的。
当一个类由关键字final 修饰时,表明该类是个最终类,该类的所有方法也将都为final类型,这样,该类被虚拟机加载后,虚拟机将不会在考虑该类的继承以及该类方法的重写,运行速率大大提高。
在Java语法中,方法的final修饰符仅起了无法被子类重写的作用,并不对效率有所提升。
看到了 和 提供的两个地址,但几篇外文链接文章都写于02、03年,属于JDK早期的版本。翻了一下Java 7的JVM虚拟机规范,并没有对final关键字做性能方面的说明。
真的很难相信一个关键字能起到多大优化作用,倒是可以总结下有哪个语言能用一个关键词起到明显的优化作用。
性能优化 : 少new新类能不new就不要new , 少用集合 集合的创建和遍历都需要时间,如果可以的话尽量使用数组,循环与判断的使用也是很消耗时间的 基本上就是不做无用功,所以一开始设计软件功能的时候就要考虑全面。
final method 可以提高一点点性能,虚函数变成非虚函数了嘛final class 应该也是类似的原理吧
但是这点性能是微不足道的,这是最后最后才用的方法(为了提高性能)。提高性能还是应该从其他方面入手,而不是把final加给各个class、method
编译器在遇到final类型的方法时,会转入内嵌机制。会提高一些效率吧。。。
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (7237) 次}

我要回帖

更多关于 final 修饰方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信