黑马程序员技术交流社区
标题:
静态的类中为什么不能调用非静态的方法
[打印本页]
作者:
罗衎
时间:
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方法
可以,参见如下代码:
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();
//以下效果和fi.print();相同
Outer.Inner inner = o.new Inner();
inner.print();
}
}
复制代码
第二:如果我把main函数放进Test里面的话,上述同样的问题
main函数不就在Test里面吗?
第三:为什么静态类中不能调用非静态类的成员变量和方法?
一个类声明为 static 的,表示它仅包含静态成员,不能使用 new 关键字创建静态类的实例。
而对于非静态类的方法和变量,在使用前需要创建类的实例对象后才可以使用,所以静态类中不能调用非静态类的成员变量和方法。
[
本帖最后由 孙斌 于 2011-07-25 13:35 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2