简单问题

sir_marlow 2012-02-29 08:56:59
在main方法外声明并创建一个字符串(比如String s = "Hello World"),再声明并创建一个参数类型是字符串的方法比如 int aaa(String s),然后在main方法中创建对象并调用该方法(比如 e.aaa(s), e为创建的对象),这时编译器警告说"cannot make a static reference to the non-static field s",这是什么问题?我不需要解决方法,只问原理
...全文
64 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sir_marlow 的回复:]
编译器报错了
[/Quote]

当然报错。。。问题是一样的啊,main不能直接访问成员属性。


我的意思是:如果你认为应该能执行的话,那么你觉得应该咋执行?
sir_marlow 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ldh911 的回复:]

问题的焦点不是是否静态,而是是否这个属性存在以及如何被访问。

而成员属性必须在对象创建(new)的时候才能完成初始化,而且你必须经由该对象去访问这个成员属性,类似于:ojb.attribute,因此main函数根本无法直接访问这个成员属性,对不?

而main函数所定义的变量(也就是局部变量),第一它存在了,第二它确实可被直接访问。


你再换个角度思考这个问题:
Java c……
[/Quote]

编译器报错了
MiceRice 2012-02-29
  • 打赏
  • 举报
回复
问题的焦点不是是否静态,而是是否这个属性存在以及如何被访问。

而成员属性必须在对象创建(new)的时候才能完成初始化,而且你必须经由该对象去访问这个成员属性,类似于:ojb.attribute,因此main函数根本无法直接访问这个成员属性,对不?

而main函数所定义的变量(也就是局部变量),第一它存在了,第二它确实可被直接访问。


你再换个角度思考这个问题:

public class Test {
public String s;

public Test(String news) {
this.s = news;
}

public static void main(String[] args) {
Test a = new Test("AAA");
Test b = new Test("BBB");
System.out.println(s); //请问系统应该显示啥?
}
}
dxqrr 2012-02-29
  • 打赏
  • 举报
回复
静态方法不能调用非静态变量啊
sir_marlow 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ldh911 的回复:]

原理?原理就是 main函数是静态函数,只能直接访问static属性,而不能直接访问成员属性(因为没有实例化的对象,该成员属性就根本不存在)。
[/Quote]

那么在main方法内部声明并创建对象为什么就可以了?难道在静态函数内创建的对象就是静态属性?
MiceRice 2012-02-29
  • 打赏
  • 举报
回复
原理?原理就是 main函数是静态函数,只能直接访问static属性,而不能直接访问成员属性(因为没有实例化的对象,该成员属性就根本不存在)。
DriftKing 2012-02-29
  • 打赏
  • 举报
回复
无法在静态方法中引用非静态变量
将S改成 static就可以。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧