final关键字
来源:互联网 发布:js 返回n天后的日期 编辑:程序博客网 时间:2024/06/02 14:58
final关键字可以用在3个地方:
1,定义变量时
public final double radius;
表示声明了一个常量。常量一旦被初始化则不能再改变。对于基本类型来说其值不可变,对于对象来说,其引用不可变。
但是这里需要注意的是,虽然引用的对象不可变,但是引用的对象的内容是可变的。我们在下面会看到例子。
这里顺便8一句题外话:
String s = "abc";
s="123";
这是没有问题的,因为内存中的“abc”不可被修改,但是s可以指向另外一个字符串“123”。也就是说,所谓的String不可变,是指String指向的内容本身不能改变。
final String s = "abc";
s="123";
这样编译是不能通过的,因为final关键字限制了s的指向不能改变。2,定义方法中的参数时 这是我们常见的一种使用方法
public void testMethod(final int i, final String[] j){}
这样做对于基本类型的变量没有什么实际意义。因为基本类型的变量在调用方法时是传值的,也就是说,你可以在方法中更改这个参数变量而不会影响到调用语句。
但对于对象变量,在传递时是传递其引用。看下面这个例子:
public class App { public static void main(String[] args) { int i = 5; String[] j = {"Testing!"}; System.out.println(j); App.testMethod(i, j); System.out.println(j[0]); } public static void testMethod(int i, String[] j){ j[0]="111"; System.out.println(j); } }
输出:
[Ljava.lang.String;@de6ced
[Ljava.lang.String;@de6ced
111
可以发现,main方法中的j和testMethod中的j指向的是同一个对象。因此在testMethod中对j的修改会影响main中打印的结果。
此时如果改为下面的代码:
public static void testMethod(int i, final String[] j){ j[0]="111"; System.out.println(j); }
会发现结果没有变化。因此final不能阻止在testMethod方法中修改对象的内容。
但如果代码变为一下则无法通过编译。
public static void testMethod(int i, final String[] j){ j = new String[100]; System.out.println(j); }
相当于testMethod中新定义了一个对象j,且声明为final的,同时将传递进来的引用作为j的初值。因此之后就不能再修改j的引用了。
但不管怎么说,testMethod的参数int i和String[] j都是重新定义的变量,和main里的变量没有关系。
3,将方法声明为final
意味着这个方法可以被继承,但是不能被子类覆盖。
4,将类声明为final
一个final类是无法被任何人继承的,这就意味着该类的设计被认为已经很完美,不需要任何的修改或扩展。对于final类中的成员,可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final类。
- Final关键字
- final关键字
- final关键字
- final关键字
- final关键字
- final 关键字
- final关键字
- Final 关键字
- Final关键字
- 关键字 final
- final关键字
- final关键字
- final关键字
- 关键字final
- Final 关键字
- final关键字
- final关键字
- final 关键字
- KMP算法
- MFC原创:三层架构01(人事管理系统)DAL
- C/C++编程基础篇之浅析堆&栈
- Java面试宝典2013版(超长版)
- JAVA 动态加载properties配置文件
- final关键字
- Linux下FTP操作命令详解
- struts2 jsp页面向action提交list对象
- (Your)((Term)((Project)))(字符串处理)
- ECLIPSE下部署tomcat时遇见的一些问题
- CTex + Texmaker
- 搭建Web服务器之Step6:CentOS6.3安装JDK和环境配置
- 怎么查询局域网内全部电脑IP和mac地址等信息?
- Leetcode: Decode ways