(1)程序1:
package com.ibm;public class HuaWei3{ //引用传递
public static void main(String[] args){
Number n1 = new Number();
Number n2 = new Number();
n1.i=12;
n2.i=47;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1 = n2;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1.i=27;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
}
class Number{
int i;
}
}
/*
程序会报错:HuaWei3.java:9: 无法从静态上下文中引用非静态 变量 this
Number n1 = new Number();
^
HuaWei3.java:10: 无法从静态上下文中引用非静态 变量 this
Number n2 = new Number();
^
*/
(2)程序2:
package com.ibm;public class HuaWei4{ //引用传递
int i;
public static void main(String[] args){
HuaWei4 n1 = new HuaWei4();
HuaWei4 n2 = new HuaWei4();
n1.i=12;
n2.i=47;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1 = n2;
System.out.println("2: n1.i="+n1.i+", n2.i="+n2.i);
n1.i=27;
System.out.println("3: n1.i="+n1.i+", n2.i="+n2.i);
}
}/*
运行结果:1: n1.i=12, n2.i=47
2: n1.i=47, n2.i=47
3: n1.i=27, n2.i=27
*/
这两个程序有什么不一样的,程序2中不是也引用了非静态变量吗?可以解释一下是什么原因吗?在线等啊。
package com.ibm;public class HuaWei3{ //引用传递
public static void main(String[] args){
Number n1 = new Number();
Number n2 = new Number();
n1.i=12;
n2.i=47;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1 = n2;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1.i=27;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
}
class Number{
int i;
}
}
/*
程序会报错:HuaWei3.java:9: 无法从静态上下文中引用非静态 变量 this
Number n1 = new Number();
^
HuaWei3.java:10: 无法从静态上下文中引用非静态 变量 this
Number n2 = new Number();
^
*/
(2)程序2:
package com.ibm;public class HuaWei4{ //引用传递
int i;
public static void main(String[] args){
HuaWei4 n1 = new HuaWei4();
HuaWei4 n2 = new HuaWei4();
n1.i=12;
n2.i=47;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1 = n2;
System.out.println("2: n1.i="+n1.i+", n2.i="+n2.i);
n1.i=27;
System.out.println("3: n1.i="+n1.i+", n2.i="+n2.i);
}
}/*
运行结果:1: n1.i=12, n2.i=47
2: n1.i=47, n2.i=47
3: n1.i=27, n2.i=27
*/
这两个程序有什么不一样的,程序2中不是也引用了非静态变量吗?可以解释一下是什么原因吗?在线等啊。
解决方案 »
- ssh2整合,jsp页面加载查询语句,调用Action的时候报错:空指针异常!!!
- 学了一段时间的SSH了 有点迷茫了 感觉什么都不会 大家帮帮忙。。在线焦急中、、
- 经验分享:Freemarker网站静态化的实现(原创)
- Struts转向action中的方法
- 做了一个文件导入的功能,英文,数字能正确导入,导入中文确实乱码
- 谁那里有电信网关发送短信的源代码,不是开发包????????
- struts2的select标签如何选中选项就能提交?
- struts1.x和struts2稳定性怎么样啊
- java连接mysql数据库的中文问题!请大家帮帮忙!!!
- JDBC为什么说无法打开登录 'webserver' 中请求的数据库,而用jdbc-odbc桥却可以
- 三年工作经验,该读那些书,大家帮我推荐推荐
- JPA:@embeddable中指定序列为什么不好使
public class HuaWei3{ //引用传递
public static void main(String[] args){
Number n1 = new Number();
Number n2 = new Number();
n1.i=12;
n2.i=47;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1 = n2;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1.i=27;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
}
static class Number{
int i;
}
}
这样就能编译通过,至于出现:
HuaWei3.java:6: 无法从静态上下文中引用非静态 变量 this
Number n1 = new Number();
^
HuaWei3.java:7: 无法从静态上下文中引用非静态 变量 this
Number n2 = new Number();
^此源文件编译后会生成两个class文件,一个是HuaWei3.class 另一个是HuaWei3$Number.class这个内部类的class文件
当new Number()的时候,编译器可能认为HuaWei3$Number.class此时并没有被载入(Java中的类是动态加载的)
所以会出现无法从静态的上下文中引用非静态变量这样的编译错误。而第二个程序编译后只生成一个class文件:HuaWei4.class。其实我也不知道答案,只是这么感觉的....
你这里Number类定义成HuaWei3的内部类了,如果要new一个新的Number对象出来,必须你先new个HuaWei3对象出来
或者你这样写这行package com.ibm;public class HuaWei3{ //引用传递
public static void main(String[] args){
Number n1 = new Number();
Number n2 = new Number();
n1.i=12;
n2.i=47;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1 = n2;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
n1.i=27;
System.out.println("1: n1.i="+n1.i+", n2.i="+n2.i);
}
} class Number{
int i;
}