A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗衎 黑马帝   /  2011-7-25 11:28  /  2223 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package Test;
class Outer{
private int a=100;
class Inner
{
private int a=50;
void print()
{
  int a=30;
  System.out.println(a);
  System.out.println(this.a);
  System.out.println(Outer.this.a);
}
}
void print()
{
  Inner p=new Inner();
  p.print();
}
Inner getInner()
{
  return new Inner();
}

}
public class Test
{
public static void main(String [] args)
{
  Outer o=new Outer();
  Outer.Inner fi= o.getInner();
  fi.print();
}
}


我在Outer 中定义了一个内部类 Inner
然后main函数在Test类中
第一:我想实现  在main中直接调用Inner的print方法,可不可以i不去构造getInner()的方法,
如果可以 请多写其他的方法  可以在main中调用Inner方法
第二: 如果我把 main函数放进Test 里面的话   上述同样的问题
第三: 为什么静态类中不能调用非静态类的成员变量和方法?


非常感谢~~~~~请大家踊跃发言:loveliness:

评分

参与人数 1技术分 +3 收起 理由
admin + 3 看看同学的回答!

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-7-25 11:32:35
沙发
静态模块是属于类的
而非静态是属于对象的
一个静态调用非静态,也许这个对象还不存在,也就不能使用这个对象上面的东西:)

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

关于静态类

我在Outer中定义了一个内部类 Inner,然后main函数在Test类中
第一:我想实现在main中直接调用Inner的print方法,可不可以不去构造getInner()的方法,
如果可以请多写其他的方法,可以在main中调用Inner方法
可以,参见如下代码:
  1. class Outer{
  2.         private int a = 100;
  3.         class Inner
  4.         {
  5.                 private int a = 50;
  6.                 void print()
  7.                 {
  8.                         int a = 30;
  9.                         System.out.println(a);
  10.                         System.out.println(this.a);
  11.                         System.out.println(Outer.this.a);
  12.                 }
  13.         }
  14.         void print()
  15.         {
  16.                 Inner p = new Inner();
  17.                 p.print();
  18.         }
  19.         Inner getInner()
  20.         {
  21.                 return new Inner();
  22.         }

  23. }
  24. public class Test
  25. {
  26.         public static void main(String [] args)
  27.         {
  28.                 Outer o = new Outer();
  29.                 Outer.Inner fi = o.getInner();
  30.                 fi.print();
  31.                 //以下效果和fi.print();相同
  32.                 Outer.Inner inner = o.new Inner();
  33.                 inner.print();
  34.         }
  35. }
复制代码
第二:如果我把main函数放进Test里面的话,上述同样的问题
main函数不就在Test里面吗?

第三:为什么静态类中不能调用非静态类的成员变量和方法?
一个类声明为 static 的,表示它仅包含静态成员,不能使用 new 关键字创建静态类的实例。
而对于非静态类的方法和变量,在使用前需要创建类的实例对象后才可以使用,所以静态类中不能调用非静态类的成员变量和方法。
[ 本帖最后由 孙斌 于 2011-07-25  13:35 编辑 ]

评分

参与人数 1技术分 +3 收起 理由
admin + 3 我看赞同!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马