final使用方法
final的作用随着所修饰的类型而不同
1、final修饰类中的属性或者变量
不管属性是基本类型还是引用类型。final所起的作用都是变量里面存放的“值”不能变。
这个值,对于基本类型来说,变量里面放的就是实实在在的值,如1,“abc”等。
而引用类型变量里面放的是个地址。所以用final修饰引用类型变量指的是它里面的地址不能变。并非说这个地址所指向的对象或数组的内容不能够变,这个一定要注意。
比如:类中有一个属性是final Person p=new Person("name");
那么你不能对p进行又一次赋值,可是能够改变p里面属性的值,p.setName('newName');
p是引用变量 它里面存的一个地址,不能改变 可是我们能够改变这个地址指向的对象的属性值。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDYzNDA2Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
final修饰属性,声明变量时能够不赋值。并且一旦赋值就不能被改动了。
对final属性能够在三个地方赋值:声明时、初始化块中、构造方法中。总之中的一个定要赋值。
2、final修饰类中的方法
作用:能够被继承。但继承后不能被重写。
3、final修饰类
作用:类不能够被继承。
思考一个有趣的现象:
byte b1=1;
byte b2=3;
byte b3=b1+b2;//当程序运行到这一行的时候会出错,由于b1、b2能够自己主动转换成int类型的变量。运算时java虚拟机对它进行了转换,结果导致把一个int赋值给byte-----出错
假设对b1 b2加上final就不会出错
final byte b1=1;
final byte b2=3;
byte b3=b1+b2;//不会出错,相信你看了上面的解释就知道原因了。
以上内容是转载于http://blog.csdn.net/linchunhua/article/details/5305452;
下面为自己见解
我们知道一个定义为final的对象引用仅仅能指向唯一一个对象(由于地址不能更改)可是一个对象的本身的值是能够改变的;
比方:
Random rand=new Random(); public final int A_1=rand.nextInt(10);
这里A_1每次执行的结果都不同的。
为了将一个常量真正做到不可更改 能够将常量声明为static final。
public static final int A_2=rand.nextInt(10);
这里结果每次执行都是同样的。
static final形式。它在内存中为A_2开辟了一个恒定不变的区域,当再次实例化对象的时候,任然指向A_2这块内存区域。所以A_2保持不变。A_2是在
装载的时候被初始化,而不是每次创建新的对象时都被初始化
final方法
final定义方法不能被覆盖
注意:一个父类的某个方法定义了private修饰符 。子类将无法訪问 自然就无法覆盖
//final 类
public class finalParent {
private final void doit(){
System.out.println("父类.doit()");
}
final void doit2(){
System.out.println("父类.doit2()");
}
public void doit3(){
System.out.println("父类.doit3()");
}
}
public class finalFindMethod {
public static void main(String[] args){
Sub s=new Sub();
s.doit();//结果是子类.doit()
finalParent p=s;//向上转型
p.doit2();
p.doit3();
}
}
//在父类定义了doit(),子类也定义了doit()看似是子类覆盖了父类的方法。可是覆盖必须能够满足一个对象向上转型为他的基本类型
//而且调用同样方法的这一条件;父类中带了private是主类的私有方法,子类仅仅是新定义了一个方法而已,二不是覆盖
//final的方法不能被子类继承
public class Sub extends finalParent {
final void doit() {
System.out.println("子类.doit()");
} // final void doit2(){ //这里显示不能重写父类为final的方法
//
// }
public void doit3() {
System.out.println("子类.doit3()");
}
}
父类.doit2()
子类.doit3()
//而且调用同样方法的这一条件;父类中带了private是主类的私有方法,子类仅仅是新定义了一个方法而已,二不是覆盖
//final的方法不能被子类继承
final使用方法的更多相关文章
- 利用final定义方法:这样的方法为一个不可覆盖的方法。
常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值.Final int x=3: ②在构造的时候赋值. 局部变量可以随时赋值. 利用final定义方法:这样的 ...
- java中static,final,private方法的继承多态问题
父类中的final private方法不能被继承,父类中的static方法可以被继承,但是不能重写,这三者都属于前期绑定,java中除了这三种以及构造方法之外剩下的都是后期绑定(运行是绑定). 当父 ...
- static和final修饰方法
static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法.static方法是可以被继承,然后可以被重写和重载. final修饰的方法是不可变方法,final方法所在类被继承时,被final ...
- Java final 关键词修饰类、方法、变量
1. final修饰类 被修饰的类不能被继承,也没有子类.假如随意创建这些类的子类,子类可能会错误的修改父类的实现细节.出于安全原因,类的实现细节不允许有任何改动.在创建对象模型的时候,确信这个类不 ...
- final 关键字:用来修饰类,方法,成员变量,局部变量
final 关键字:用来修饰类,方法,成员变量,局部变量 表示最终的不可变的 1.final修饰一个类 表示当前的类不能有子类,也就是不能将一个类作为父类 格式: public final class ...
- Java中final关键字修饰变量、方法、类的含义是什么
Java中的关键字final修饰变量.方法.类分别表示什么含义? 先看一个简单的介绍 修饰对象 解释说明 备注 类 无子类,不可以被继承,更不可能被重写. final类中的方法默认是final的 方法 ...
- Final类和Final方法
终止继承 Final类 当关键字final用来修饰类时,其含义是该类不能在派生子类.换句话说,任何其他类都不能继承用final修饰的类,即使该类的访问限制为public类型,也不能被继承:否则,将编译 ...
- java中final关键字的使用方法
[java中为什么会有final变量]: final这个关键字的含义是"这是无法改变的"或者"终态的": 那么为什么要阻止改变呢? java语言的发明者可 ...
- java类中final方法的作用
不给子类复写这个方法.说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用 inline扩展 ...
随机推荐
- 编写SDR SDRAM页突发模式控制器的注意点
网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...
- 数据库表的连接(Left join , Right Join, Inner Join)用法详解
转自:http://blog.csdn.net/jetjetlinuxsystem/article/details/6663218 Left Join, Inner Join 的相关内容,非常实用,对 ...
- IIS 7.5 配置
安装 MVC 3 对应版本. 或者对应的版本. 登陆时候报错 检查下面几项是否配置正确 检查ASP.net 是否开启. 检查网站的应用池是否配置正确 在处理程序映射当中检查这几项是否配置正确 如果都配 ...
- 海量的超赞 Linux 软件 (转载)
海量的超赞 Linux 软件 作者: VoLuong 译者: LCTT Mo | 2016-08-24 16:01 评论: 27 收藏: 38 这个仓库收集了对任何用户/开发者都超赞的 Linux ...
- Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程
这几天,很多朋友在群里问Scrapy安装的问题,其实问题方面都差不多,今天小编给大家整理一下Scrapy的安装教程,希望日后其他的小伙伴在安装的时候不再六神无主,具体的教程如下. Scrapy是Pyt ...
- POJ 3567 Cactus Reloaded(仙人掌直径)
题意 裸的仙人掌直径. 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度. #include<iostream> ...
- linux命令find命令详解
find 查找文件 find 哪里 什么类型 什么名字 -maxdepth 最大的深度 查找目录的最大深度 find -maxdepth 1 -type d -type 找什么类型的 f fil ...
- 监控memcached服务
#!/bin/bash #监控memcached服务 printf "del key\r\n" | nc 127.0.0.1 11211 &>/dev/null #使 ...
- Java基础学习总结(10)——static关键字
一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...
- 基于Java的开源CMS系统选择
CMS概述 对于网站CMS系统而言,基于PHP的是主流,如Drupal/Joomla在各个主流虚拟机提供商上都是标准配置,也被广泛使用. 但如果你拥有Java团队,或者项目目标是想建立一个企业网使用的 ...