为什么此段代码报错?
(注:变量i前加final能运行并且通过,因为final是全局变量,程序开始运行时先运行final常量)
重点是为什么原程序就通不过,谁给解释一下为什么
内部类调用外部的变量为什么不可以呢(不加final)
(注:变量i前加final能运行并且通过,因为final是全局变量,程序开始运行时先运行final常量)
重点是为什么原程序就通不过,谁给解释一下为什么
内部类调用外部的变量为什么不可以呢(不加final)
解决方案 »
- java中从一个字符串中取出其中的一部分并对其进行排序!!
- oracle数据库查询出现: java.sql.SQLException: 列名无效 错误,如何解决???
- 紧急,大家帮帮忙,没有什么分了
- 用jsp从数据库查询,再把结果返回页面,出现这个错误
- 我发现一个神奇的错误,请求高手指导
- <logic:iterate> 显示问题,如果变量位空为什么不显示表格。
- 如何用EDITPLUS编译和运行JAVA
- 怎么实现当鼠标移动到JList里的一个选项上的时候,弹出tooltip呢?并且tooltip的text正好就当前的值??
- 哪位兄台给我介绍一下InterBase数据库?
- 开始做 se项目.请问这个是用什么画的?uml的软件工具么?
- JNI中数据类型的转换问题
- 如何将netbeans做好的界面导入到eclipse
{
int in=5;
void test()
{
int i=5;
class Inner
{
InnerDemo inner;
Inner()
{
}
public Inner(InnerDemo inner)
{
this.inner=inner;
}
void dispaly()
{
System.out.println("in等于"+inner.in);
System.out.println("in等于"+InnerDemo.this.in);
System.out.println("in"+in);
System.out.println(i);
}
}
Inner inner=new Inner(this);
inner.dispaly();
}
public static void main(String []args)
{
InnerDemo id=new InnerDemo();
id.test();
}
}/*public class InnerDemo
{
private int test;
public class Inner
{
public void test()
{
System.out.println(test++);
}
}
}
class test
{
public static void main(String []args)
{
InnerDemo innnerdemo=new InnerDemo();
innerDemo.Inner inner=innerdemo.new Inner();
inner.test();
}
}*/
/*
public class InnerDemo
{
private int size;
public class Inner
{
private int size;
public void test(int size)
{
size++;//引用的是test函数的形参;
this.size++;//引用的是Inner类中的成员变量;
InnerDemo.this.size++;//引用的InnerDemo类中的成员变量;
}
}
}
*/
/*
class InnerDemo
{
int in=5;
void test()
{
Inner inner=new Inner(this);
inner.dispaly();
}
public static void main(String []args)
{
InnerDemo id=new InnerDemo();
id.test();
}
}class Inner
{
InnerDemo inner;
Inner()
{
}
public Inner(InnerDemo inner)
{
this.inner=inner;
}
void dispaly()
{
System.out.println("in等于"+inner.in);
}
}
*//*
class InnerDemo
{
static int in=5;
void test()
{
Inner in=new Inner();
in.Inner();
}
public static void main(String []args)
{
InnerDemo id=new InnerDemo();
id.test();
}
}
class Inner
{
void Inner()
{
int in=InnerDemo.in;
System.out.println("in等于"+in);
}
}
*/
/*
class InnerDemo
{
int in=5;
void test()
{
Inner inner=new Inner();
inner.dispaly(in);
}
public static void main(String []args)
{
InnerDemo id=new InnerDemo();
id.test();
}
}class Inner
{
int in;
Inner()
{
}
void dispaly(int in)
{
this.in=in;
System.out.println("in等于"+in);
}
}
*/
/*
class InnerDemo
{
int in=5;
void test()
{
Inner in=new Inner();
in.Inner();
}
class Inner
{
void Inner()
{
System.out.println("in等于"+in);
}
}
public static void main(String []args)
{
InnerDemo id=new InnerDemo();
id.test();
}
}
*/
{
int in=5;
void test()
{
Inner in=new Inner();
in.Inner();
}
class Inner
{
void Inner()
{
System.out.println("in等于"+in);
}
}
}
public class Test {
public static void main(String[] args) {
InnerDemo id=new InnerDemo();
id.test(); }
}
{
int in=5;
void test()
{
Inner inner=new Inner();
inner.dispaly(in);
}
public static void main(String []args)
{
InnerDemo id=new InnerDemo();
id.test();
}
}class Inner
{
int in;
Inner()
{
}
void dispaly(int in)
{
this.in=in;
System.out.println("in等于"+in);
}
}
public class MainDemo
{ public static void main(String []args)
{
InnerDemo i=new InnerDemo();
}
}
{
final int i;
class B
{
}
}
如果i不是final的 那么在B读取i值后(还没使用),A改变i的值,那么i等于多少呢?so,i必须为final
int x = 0;
new Thread() {
public void run() {
for (;;) {
System.out.println(x);
}
}
}.start();
// X dies here
}如果只是int x,这是一个局部变量,在foo()方法执行完以后,就死掉了,而内部类里面,线程的执行是无穷尽的,需要永远能够访问外部类的x。在其他例子里面,可能是只用一次,但是不知道什么时候用(比如内部类是个事件监听器)。这就是一个冲突。因此,需要标注final,改变其生命周期