黑马程序员技术交流社区
标题: 求解释,final的作用? [打印本页]
作者: 马东华 时间: 2012-4-23 16:58
标题: 求解释,final的作用?
内部类定义在类中的局部位置上,只能访问该局部被final修饰的局部变量,有谁能给我举个例子吗?
作者: 真真姐 时间: 2012-4-23 17:23
本帖最后由 真真姐 于 2012-10-21 14:26 编辑
局部意思就是方法内部的意思
比如说你在Book类的方法write()的内部,定义了一个Reader类,那么这个类就是局部内部类!
你想访问所在方法的变量的话,当然需要用final,而且必须是在类的加载之前同时在类的初始化之前
给你举个例子把
public class Book {
public write ()
{
final int a =5; //去掉final就会报错的啊 ,同时把a的初始化放到InnerClass类的后面执行也出错,a必须优先加载
class Reader
{
private int b;
public Reader (int m)
{
this.b = a;
}
public void show()
{
System.out.println(b);
}
}
new InnerClass(b) .show();
}
}
一目了然,关于内部类引用变量的问题!
作者: 王勃 时间: 2012-4-23 17:29
我勒个去,刚刚给徐晓磊解答,你就来问了。。。。
我自己写个例子你看下,验证局部内部类只能访问final类型的局部变量。
代码:- package com.heima;
- public class LocalInnerClassTest {
- //局部内部类要访问的x为final,去掉final你是编译通不过的。
- public void defineInnerClass(int x) {
- //局部内部类
- class MyLocalInnerClass {
- public void doSomething() {
- System.out.println("局部内部类MyLocalInnerClass打印的局部变量X为:"+x);
- }
- }
- new MyLocalInnerClass().doSomething();
- }
-
- public static void main(String[] args) {
- LocalInnerClassTest lct = new LocalInnerClassTest();
- lct.defineInnerClass(5);
- }
- }
复制代码 输出结果:
如果将final去掉编译是错误的。
图为:
int x 是局部变量,因为java底层的机制不能存取本地变量,这样导致内部类,没有办法取过来,所以java用了一个小聪明,直接把本地变量的refrenece拷贝到内部类。
因为这个小聪明,一般容易让人误解。所以他在编译器里面,加上了一个final,让你不要改变这个值,你只读不能存,这样感觉就好了。
哥又给你复制粘贴一遍。。。。累死了。。{:soso_e144:}
作者: 真真姐 时间: 2012-4-23 17:33
不能偷懒,不同兄弟的意思不一样,要针对的进行解答,我的就是重新修改,根据他的意思解答的
作者: 黑马-刘昌文 时间: 2012-4-23 17:33
final是最终的意思,被它修饰的类不能被继承,被修饰的变量的值不能再改变!被它修饰的方法不能被重写!别final修饰的都不能再改变了!
比如匿名内部内只能访问final修饰的局部变量!
作者: 王勃 时间: 2012-4-23 17:36
final是最终的意思,被它修饰的类不能被继承,被修饰的变量的值不能再改变!被它修饰的方法不能被重写!别final修饰的都不能再改变了!
比如匿名内部内只能访问final修饰的局部变量!
大神发怒了,哈哈哈{:soso_e120:}{:soso_e120:}
作者: 王勃 时间: 2012-4-23 17:37
不能偷懒,不同兄弟的意思不一样,要针对的进行解答,我的就是重新修改,根据他的意思解答的
我在吃饭,看问题差不多一样,就粘贴喽,。。。。。{:soso_e117:}
作者: 王勃 时间: 2012-4-23 18:00
本帖最后由 王明(1988) 于 2012-4-23 18:18 编辑
o{:soso_e100:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |