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()");
}
}
结果:
子类.doit()

父类.doit2()

子类.doit3()
//在父类定义了doit(),子类也定义了doit()看似是子类覆盖了父类的方法,可是覆盖必须能够满足一个对象向上转型为他的基本类型

//而且调用同样方法的这一条件;父类中带了private是主类的私有方法,子类仅仅是新定义了一个方法而已,二不是覆盖

//final的方法不能被子类继承





final使用方法的更多相关文章

  1. 利用final定义方法:这样的方法为一个不可覆盖的方法。

      常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值.Final int x=3: ②在构造的时候赋值. 局部变量可以随时赋值.   利用final定义方法:这样的 ...

  2. java中static,final,private方法的继承多态问题

    父类中的final  private方法不能被继承,父类中的static方法可以被继承,但是不能重写,这三者都属于前期绑定,java中除了这三种以及构造方法之外剩下的都是后期绑定(运行是绑定). 当父 ...

  3. static和final修饰方法

    static修饰的方法是静态方法,所有的对象共用一份,也就是共享方法.static方法是可以被继承,然后可以被重写和重载. final修饰的方法是不可变方法,final方法所在类被继承时,被final ...

  4. Java final 关键词修饰类、方法、变量

    1. final修饰类  被修饰的类不能被继承,也没有子类.假如随意创建这些类的子类,子类可能会错误的修改父类的实现细节.出于安全原因,类的实现细节不允许有任何改动.在创建对象模型的时候,确信这个类不 ...

  5. final 关键字:用来修饰类,方法,成员变量,局部变量

    final 关键字:用来修饰类,方法,成员变量,局部变量 表示最终的不可变的 1.final修饰一个类 表示当前的类不能有子类,也就是不能将一个类作为父类 格式: public final class ...

  6. Java中final关键字修饰变量、方法、类的含义是什么

    Java中的关键字final修饰变量.方法.类分别表示什么含义? 先看一个简单的介绍 修饰对象 解释说明 备注 类 无子类,不可以被继承,更不可能被重写. final类中的方法默认是final的 方法 ...

  7. Final类和Final方法

    终止继承 Final类 当关键字final用来修饰类时,其含义是该类不能在派生子类.换句话说,任何其他类都不能继承用final修饰的类,即使该类的访问限制为public类型,也不能被继承:否则,将编译 ...

  8. java中final关键字的使用方法

     [java中为什么会有final变量]: final这个关键字的含义是"这是无法改变的"或者"终态的": 那么为什么要阻止改变呢? java语言的发明者可 ...

  9. java类中final方法的作用

    不给子类复写这个方法.说明你已经知道这个方法提供的功能已经满足你要求,不需要进行扩展,并且也不允许任何从此类继承的类来覆写这个方法,但是继承仍然可以继承这个方法,也就是说可以直接使用 inline扩展 ...

随机推荐

  1. 编写SDR SDRAM页突发模式控制器的注意点

    网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...

  2. 数据库表的连接(Left join , Right Join, Inner Join)用法详解

    转自:http://blog.csdn.net/jetjetlinuxsystem/article/details/6663218 Left Join, Inner Join 的相关内容,非常实用,对 ...

  3. IIS 7.5 配置

    安装 MVC 3 对应版本. 或者对应的版本. 登陆时候报错 检查下面几项是否配置正确 检查ASP.net 是否开启. 检查网站的应用池是否配置正确 在处理程序映射当中检查这几项是否配置正确 如果都配 ...

  4. 海量的超赞 Linux 软件 (转载)

    海量的超赞 Linux 软件 作者: VoLuong 译者: LCTT Mo | 2016-08-24 16:01   评论: 27 收藏: 38 这个仓库收集了对任何用户/开发者都超赞的 Linux ...

  5. Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程

    这几天,很多朋友在群里问Scrapy安装的问题,其实问题方面都差不多,今天小编给大家整理一下Scrapy的安装教程,希望日后其他的小伙伴在安装的时候不再六神无主,具体的教程如下. Scrapy是Pyt ...

  6. POJ 3567 Cactus Reloaded(仙人掌直径)

    题意 裸的仙人掌直径. 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度. #include<iostream> ...

  7. linux命令find命令详解

    find 查找文件 find 哪里 什么类型 什么名字 -maxdepth 最大的深度 查找目录的最大深度    find -maxdepth 1 -type d -type 找什么类型的 f fil ...

  8. 监控memcached服务

    #!/bin/bash #监控memcached服务 printf "del key\r\n" | nc 127.0.0.1 11211 &>/dev/null #使 ...

  9. Java基础学习总结(10)——static关键字

    一.static关键字 原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量.对于static成员变量来说,这个成员变量只有一份,而且这一份是 ...

  10. 基于Java的开源CMS系统选择

    CMS概述 对于网站CMS系统而言,基于PHP的是主流,如Drupal/Joomla在各个主流虚拟机提供商上都是标准配置,也被广泛使用. 但如果你拥有Java团队,或者项目目标是想建立一个企业网使用的 ...