黑马程序员技术交流社区

标题: 静态的类中为什么不能调用非静态的方法 [打印本页]

作者: 罗衎    时间: 2011-7-25 11:28
标题: 静态的类中为什么不能调用非静态的方法
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:
作者: 匿名    时间: 2011-7-25 11:32
静态模块是属于类的
而非静态是属于对象的
一个静态调用非静态,也许这个对象还不存在,也就不能使用这个对象上面的东西:)
作者: 孙斌    时间: 2011-7-25 13:22
标题: 关于静态类
我在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 编辑 ]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2