黑马程序员技术交流社区
标题:
final问题啊 不懂 求解答
[打印本页]
作者:
2528870651
时间:
2014-3-29 13:08
标题:
final问题啊 不懂 求解答
本帖最后由 2528870651 于 2014-4-1 08:55 编辑
class Outer
{
int x= 3;
void method(final int a) //这里a是局部变量,存储在栈里
{
final int y= 4;
class Inner
{
void function()
{
System.out.println(a);
}
}
new Inner().function();
}
}
class InnerClassDemo
{
public static void main(String[] args)
{
new Outer().method(7); //这里上课的时候讲了
new Outer().method(8);
}
}
class FinalTest
{
private final int num ;
public void setNum(int num)
{
this.num = num; //这里呢???在上面,num虽然被final修饰,可是num还没赋值啊 ,怎么也会编译失败??
}
public int getNum()
{
return num;
}
public static void main(String[] args)
{
FinalTest a1 = new FinalTest();
a1.setNum(1);
System.out.println(a1.getNum());
FinalTest a2 = new FinalTest();
System.out.println(a2.getNum);
}
}
//谁能具体的说一下,这有什么区别吗??
复制代码
作者:
136616244
时间:
2014-3-29 13:33
被final修饰的变量只能被赋值一次,你提供了修改Num的方法,而方法可以被多次调用,Num就可以被多次赋值
作者:
橡皮-leo
时间:
2014-3-29 13:50
本帖最后由 橡皮-leo 于 2014-3-30 21:45 编辑
private final int num ; //<font color="#ff0000">final修饰的成员变量是是一个常量,必须要给一个初始值的,并且是不可改变的</font>
public void setNum(int num)
{
this.num = num; //<font color="#ff0000">这句this.num = num;违背了规则,所以编译失败</font>。
}
复制代码
作者:
ehuashao
时间:
2014-3-30 21:37
class FinalTest
{
private final int num ;
public void setNum(int num)
{
this.num = num; //这里呢???在上面,num虽然被final修饰,可是num还没赋值啊 ,怎么也会编译失败??
}
public int getNum()
{
return num;
}
public static void main(String[] args)
{
FinalTest a1 = new FinalTest();
a1.setNum(1);
System.out.println(a1.getNum());
FinalTest a2 = new FinalTest();
System.out.println(a2.getNum);
}
}
复制代码
你的这段代码,成员变量由final修饰:
第一必须被赋初始值。
第二不能被动态复制或改变
这段代码
class Outer
{
int x= 3;
void method(final int a) //这里a是局部变量,存储在栈里
{
final int y= 4;
class Inner
{
void function()
{
System.out.println(a);
}
}
new Inner().function();
}
}
复制代码
final修饰形式参数,只是修饰了形参的地址,也就是形参的地址是不会改变的,但值是可以改变的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2