`

final用法总结

阅读更多

第一 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 int age;
   Father(){
      age = 1;
   }
}

 

如果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.Timer;
import java.util.TimerTask;

public class FinalTest {
	   public  static void test(){
	      final Timer timer = new Timer();
	      final int count = 1;
	      timer.schedule(new TimerTask(){
		        @Override
		        public void run(){
		        	System.out.println("2,test方法,输出count=="+count);
		           //....
		           //....
		           //这一句使用了timer变量
		           timer.cancel();
		        }
		      },1000,2000);
	   }
	   public static void main(String[] args) {
		   FinalTest.test();
		   System.out.println("1,这句话应该在test方法之后运行");
	   }
}

 运行结果是:

1,这句话应该在test方法之后运行

 

2,test方法,输出count==1

第五 final修饰方法参数

 

Final参数跟final属性差不多,都是不能更改其值。但是如果参数是引用变量的话可以设置其属性和调用其方法。

1
2
分享到:
评论
2 楼 forestqqqq 2013-07-03  
406657836 写道
而占栈内存是由GC(垃圾回收器)管理的?
栈内存随着 方法的压栈 申请 出栈 释放。gc是管理的堆内存和方法区内存!
父类的private方法可以被子类继承?
private方法是对子类屏蔽的,就相当于没有一样,所以是可以取一样的方法名,也谈不上重写。

是,不是栈内存,写错了,应该是对内存。
1 楼 406657836 2013-07-03  
而占栈内存是由GC(垃圾回收器)管理的?
栈内存随着 方法的压栈 申请 出栈 释放。gc是管理的堆内存和方法区内存!
父类的private方法可以被子类继承?
private方法是对子类屏蔽的,就相当于没有一样,所以是可以取一样的方法名,也谈不上重写。

相关推荐

    final类的适应实例

    Java中final类的简单使用,并对Java关键字的使用做出了总结

    Java中final关键字的用法总结

    在Java中,final可以别用来修饰类、修饰方法、修饰变量和修饰参数等,这里就来简单作一个Java中final关键字的用法总结:

    static、final、abstract和interface使用总结

    自己总结了一下java中static、final、abstract和interface的用法

    java中final和static的总结

    NULL 博文链接:https://zkf60553.iteye.com/blog/1307592

    Java关键字final、static使用总结

    final方法不能被子类的方法覆盖,但可以被...用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块,下面通过本文给大家分享Java关键字final、static使用总结,感兴趣的朋友一起看看吧

    android Bitmap用法总结

    7、bitmap的用法小结 BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 2; //将图片设为原来宽高的1/2,防止内存溢出 Bitmap bm = BitmapFactory.decodeFile("",option);//文件...

    资深互联网大佬的5000字吐血总结——Java面向对象三大修饰符之abstract、static、final

    static 可以修饰初始化代码块扩充内容三、final(最终的,最后的)1.final可以修饰变量2.final可以修饰方法3.final可以修饰类总结abstract、static、final可以修饰的内容abstract、static、final是否可以修饰构造...

    Java中final关键字的使用与注意总结

    主要给大家介绍了关于Java中final关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    类的使用,学习,小结 java定义一个学生类

    java定义一个学生类 class A{ private double a; A(){} ... [public /protected /private /static /final /abstract] 返回值类型 方法名字(参数){ //如果返回值类型不是void,必须有return语句 } }

    android开发框架afinal使用方法小结

    本文实例为大家分享了android afinal使用方法,供大家参考,具体内容如下 1.注解功能 1)继承:FinalActivity ( 需要复制 afinal_0.5.1_bin.jar到lib下) 2)@ViewInject() public class AfinalActivity extends ...

    Java static关键字详细介绍与用法总结

    主要介绍了Java中static关键字的作用和用法详细介绍,主要讲了静态方法、静态变量、静态类、static和final一块用等内容。需要的朋友可以参考下

    JAVA基础知识精华总结 收藏

    JAVA基础知识精华总结 收藏 1、 对象的初始化 (1) 非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化。 基本类型:int型,初始化为0。 如果为对象:这些对象会按顺序初始化。 ※在...

    1this,tostring类的继承.rar

    因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同...

    JavaLearnSummary:java学习总结

    JavaLearnSummary java学习总结 JAVA基础知识 1. final关键字 Ø 修饰类,代表该类不能被继承;final类比普通类有更高的效率 ...因此使用final修饰局部变量时,既可以在定义时指定默认值(后面的代码不能再对变

    JavaSE基础学习笔记

    JavaSE 星辰学习笔记 简介 如何高效的学习Java 案例:创建一个博客网站typecho 基础 Java程序运行机制 数据类型 变量 变量作用域 常量final 变量的命名规范 ...Java的方法 1、何谓方法 2、方法的定义 ...小结

    javaSE整体学习总结,超级全面

    JDK的主要包,import(导入类),package(包机制),继承(extends)使用要点,implements,方法的重写(override),final(关键字)使用,instanceof(关键字),组合的核心,super本质是什么,封装(encapsulation),封装的简单规则,访问...

    微电影实验报告.doc

    六、参考文献 Final Cut Pro 6苹果专业非线形编辑软件标准教材(中文版) 摄像机的基本使用方法 ----------------------- 微电影实验报告全文共2页,当前为第1页。 微电影实验报告全文共2页,当前为第2页。

    Java基础【final、权限、内部类、引用类型】

    前提格式使用方式第四章 引用类型用法总结4.1 class作为成员变量4.2 interface作为成员变量4.3 interface作为方法参数和返回值类型 第一章 final关键字 1.1 概述 学习了继承后,我们知道,子类可以在父类的基础上...

    Java 基础核心总结 +经典算法大全.rar

    null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java ...

    Java Bug模式详解

    1.4 小结 第2章 Bug、规范和实现方案 2.1 bug的概念 2.2 一体性规范 2.2.1 C++ 2.2.2 Python 2.2.3 ML 2.2.4 Pascal 2.3 规范的好处 2.4 实现方案与规范的差异 2.5 利用素材建立经济有效的规范 2.5.1 ...

Global site tag (gtag.js) - Google Analytics