Thinking in java 4e Chapter2 Exercise4

wwwww5aaaaa 2010-02-15 06:41:17
大家好,我刚学java,做Thinking in java题时,javac 第一段代码时出现“无法从静态上下文中引用非静态变量”,而第二,三段代码都成功编译和运行
由于刚学,谁能帮我讲一下这几段的区别在哪,编译时,内存中是怎么进行的?问题出哪?
public class DataOnlyTest {
class DataOnly {
int i;
double d;
boolean b;
}
public static void main(String[] args) {
DataOnly data=new DataOnly();
data.i=47;
data.d=1.1;
data.b=false;
System.out.println(data.i);
}
}
************************************************************
public class DataOnlyTest {
public static void main(String[] args) {
DataOnly data=new DataOnly();
data.i=47;
data.d=1.1;
data.b=false;
System.out.println(data.i);
}
}

class DataOnly {
int i;
double d;
boolean b;
}
*********************************************************
public class DataOnlyTest {
public static void main(String[] args) {
class DataOnly {
int i;
double d;
boolean b;
}
DataOnly data=new DataOnly();
data.i=47;
data.d=1.1;
data.b=false;
System.out.println(data.i);
}
}
...全文
106 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwww5aaaaa 2010-02-15
  • 打赏
  • 举报
回复
谢谢以上各位,包括帮顶的,哈哈,怎么给分啊,我每个都给点啊
bbb332 2010-02-15
  • 打赏
  • 举报
回复
main方法是静态的,所以只能使用静态的方法或字段
huhk 2010-02-15
  • 打赏
  • 举报
回复
static 表示你用到了该类就会产生了,而其他类的成员要使用类的实例时才产生。就是你要new一个
所以static的成员或代码的生命周期超过其他类成员的。所以它不能访问还没有产生的实例成员。因为它们可能还不存在呢。
wfeng007 2010-02-15
  • 打赏
  • 举报
回复
第一段: 他在成全区定一个了一个内部类。也就是说这个类定义为成员,因为没有用static所以该类不是静态的。用静态方法main来调用DataOnly data=new DataOnly();就会报错。(注意是使用该类来声明变量的时候)

第二段:DataOnlyTest与DataOnly 互相独立。而且main中在调用其实,进行了实例化。这种是最正常不过的情况。

第三段:内部类在main中定义的,所以属于main局域范畴(内存分配在栈中),main中自然可见。


xingda1989 2010-02-15
  • 打赏
  • 举报
回复
因为你这个class DataOnly是内部类,还有,它是非静态的
所以DataOnly do = new DataOnly();可以表现为
DataOnly do = this.new DataOnly();//这里this是被隐藏的,当你实例化非静态内部类的时候,必须有它外部类的引用,所以这里有隐藏的this!所以报这个错误!

可以改为这样

DataOnlyTest dot = new DataOnlyTest();
DataOnly do = dot.new DataOnly();
霏霏老爹 2010-02-15
  • 打赏
  • 举报
回复
因为DataOnly是在DataOnlyTest中的inner class,所以要想调用DataOnly的构造方法,就必须通过DataOnlyTest的一个实例
wwwww5aaaaa 2010-02-15
  • 打赏
  • 举报
回复
这个基础题吧,谁帮助一下啊
galuodo 2010-02-15
  • 打赏
  • 举报
回复
太深奥了 帮顶 没这么用过

62,621

社区成员

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

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