这个错误的原因是什么啊

whyhao1986 2009-08-27 03:16:25
class A {
private int x;
public static void main(String args[]){
new B();
}

class B{
B(){
System.out.println(x);
}
}
}
这个错在哪里?
放到eclipse里,显示的英文错误,我看不懂
...全文
178 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jayqean 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lyzhao_2009 的回复:]
暂时发现错误有2:
1.x未初始化
2.调用错误
[/Quote]
对于int 可以不初始化的 默认为0
lxxzhy 2009-08-28
  • 打赏
  • 举报
回复
内部类(inner class)之所以可以使用宿主类(enclosing class)的成员变量,是因为:内部类对象隐含地获得了宿主类的对象的引用,而这个宿主类对象的引用是如何传给内部类对象的呢?正是在内部类对象初始化的时候!因此在new一个内部类对象的时候必须指定一个宿主类的对象,如上面一些同学所说的:new A().new B().
xiaocaogf 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 whyhao1986 的回复:]
class A {
private int x;
public static void main(String args[]){
  new B();
}

class B{
    B(){
      System.out.println(x);
    }
}
}
这个错在哪里?
放到eclipse里,显示的英文错误,我看不懂
[/Quote]

new B();修改为new A().new B();
Cheng_Tian 2009-08-28
  • 打赏
  • 举报
回复
受教了
liuqianqian 2009-08-28
  • 打赏
  • 举报
回复
学习了!
lyzhao_2009 2009-08-27
  • 打赏
  • 举报
回复
暂时发现错误有2:
1.x未初始化
2.调用错误
a476249912 2009-08-27
  • 打赏
  • 举报
回复
你这样是把B作为A的内部类,所以可以把B类跟A类的main(String[] args)方法都看做是A的成员,那么在静态成员里面就不能够调用非静态成员。


我是这样认为的! 呵呵
haojia0716 2009-08-27
  • 打赏
  • 举报
回复
在A里不管内部类B是不是static都可以直接new B();

但在A的外部就不一样

非static是new A().new B();
static是new A.B();

不过既然定义成内部类 也就没有被外部访问的意义
haojia0716 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yanliang_xt 的回复:]
如果在同一个类里面还用加A吗?
[/Quote]

在同一个类里不用加A
gesanri 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 haojia0716 的回复:]
引用 3 楼 gesanri 的回复:
Java codeclass A {privateint x;publicstaticvoid main(String args[]){new A().new B();
}class B{
    B(){
      System.out.println(x);
    }
}
}
你调用内部类得先生成外部类的对象
或者用静态内部类
Java codeclass A {privatestaticint x;publicstaticvoid main(String args[]){new B();
}staticclass B{
    B(){
      System.out.println(x);
    }
}
}


如果是静态内部类

应该是 new A.B();
[/Quote]
直接new B()就可以
yanliang_xt 2009-08-27
  • 打赏
  • 举报
回复
如果在同一个类里面还用加A吗?
haojia0716 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gesanri 的回复:]
Java codeclass A {privateint x;publicstaticvoid main(String args[]){new A().new B();
}class B{
B(){
System.out.println(x);
}
}
}
你调用内部类得先生成外部类的对象
或者用静态内部类
Java codeclass A {privatestaticint x;publicstaticvoid main(String args[]){new B();
}staticclass B{
B(){
System.out.println(x);
}
}
}
[/Quote]

如果是静态内部类

应该是 new A.B();
bigbug9002 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yanliang_xt 的回复:]
bigbug9002也有被忽悠的时候
哈哈
[/Quote]

我看错的情况太多了.呵呵.
yanliang_xt 2009-08-27
  • 打赏
  • 举报
回复
bigbug9002也有被忽悠的时候
哈哈
bigbug9002 2009-08-27
  • 打赏
  • 举报
回复
哦,看错了,内部类啊.
yanliang_xt 2009-08-27
  • 打赏
  • 举报
回复
或者这样:

class A {
private static int x;
public static void main(String args[]){
new B();
}

static class B{
B(){
System.out.println(x);
}
}
}

bigbug9002 2009-08-27
  • 打赏
  • 举报
回复
System.out.println(x); //这里的x那里来的?不能无中生有啊.
gesanri 2009-08-27
  • 打赏
  • 举报
回复

class A {
private int x;
public static void main(String args[]){
new A().new B();
}

class B{
B(){
System.out.println(x);
}
}
}

你调用内部类得先生成外部类的对象
或者用静态内部类

class A {
private static int x;
public static void main(String args[]){
new B();
}

static class B{
B(){
System.out.println(x);
}
}
}
yanliang_xt 2009-08-27
  • 打赏
  • 举报
回复
new A().new B();
yanliang_xt 2009-08-27
  • 打赏
  • 举报
回复
内部内实例化的时候要一个外部类的实例。
所以new B();
显然在一个静态方法里不成功。

62,614

社区成员

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

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