关于内部类的实例化 public class Outer { public class Inner{ } void f(){ new Inner();//此处为什么不用创建外部类实例就能创建内部类实例 } static void g(){ //在静态方法中为什么要先创建外部类实例才能创建内部类的实例 Outer.Inner in = new Outer().new Inner(); }} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Outer outerObject = new Outer();Inner innerObject = new outerOjbect.Inner();Inner.class 对象属于 outerOjbect对象,不属于 Outer.class 对象 -----------------------如果是 static InnerInner.class 对象不属于 outerOjbect对象,属于 Outer.class 对象Inner innerObject = new Outer.Inner(); void f(){ new Inner();//此处为什么不用创建外部类实例就能创建内部类实例 }因为这相当于是外部类的成员函数,隐含了thisstatic void g(){ //在静态方法中为什么要先创建外部类实例才能创建内部类的实例 Outer.Inner in = new Outer().new Inner(); }因为static函数不输入某个具体的对象,而是属于整个类。所以必须得创建外部类的一个对象 恩,完全可以将new Inner()当成是一个内部的方法来看待,因为在定义的时候采用的是非static 的所以在static方法中必须要新建一个实例在创建对应实例的内部类。而在non-static中相当于采用了this. static的方法不能访问非static的内部类,这跟static方法不能访问非static成员变量是同个道理。但这里如果定义一个新的对象,然后用对象来访问内部类是被允许的。 public class Outer { public class Inner{ } void f(){ 这里可以直接引用外部类的属性 } static void g(){ //静态方法,是不可以调用非静态的属性;静态代码块是在类加载的时候,就开始加载了 Outer.Inner in = new Outer().new Inner(); }} void f(){ new Inner(); }这个是非静态方法,也就是没有static修饰,所以要引用这个方法,应该是实例化外部类,才可以引用 static void g(){ Outer.Inner in = new Outer().new Inner(); }这个是静态方法,要使用它可以直接这样:Outer.g();这样才对的 总结起来就是:第一个方法是普通方法,暗含了一个this引用,普通方法是不能通过类名.方法名引用的,所以只有创建实例的时候才可以用,也就是有this的引用,所以在创建内部类的实例时,外部类的实例必须已经存在 关于页面缩小的问题 scjp考试的问题,通过考试的高手请进 初级错误 如果import了很多无用的包会不会对性能造成影响? java2核心技术和java2编程思想那本比较好??? swing中控件布局的问题 出售WoW一区普瑞斯托(PVE)人类女法师帐号 集合遍历问题 jbuilder8 改变了 jdk的环境,该如何使用原来的jdk javac 命令可以用,但是java命令报错 JAVA静态方法的解析问题 新手感到前途黑暗求解!!!!!!!!!!!!!!!
如果是 static InnerInner.class 对象不属于 outerOjbect对象,属于 Outer.class 对象
Inner innerObject = new Outer.Inner();
new Inner();//此处为什么不用创建外部类实例就能创建内部类实例
}
因为这相当于是外部类的成员函数,隐含了thisstatic void g(){
//在静态方法中为什么要先创建外部类实例才能创建内部类的实例
Outer.Inner in = new Outer().new Inner();
}
因为static函数不输入某个具体的对象,而是属于整个类。所以必须得创建外部类的一个对象
public class Inner{
}
void f(){
这里可以直接引用外部类的属性
}
static void g(){
//静态方法,是不可以调用非静态的属性;静态代码块是在类加载的时候,就开始加载了
Outer.Inner in = new Outer().new Inner();
}
}
new Inner();
}
这个是非静态方法,也就是没有static修饰,所以要引用这个方法,应该是实例化外部类,才可以引用
static void g(){
Outer.Inner in = new Outer().new Inner();
}
这个是静态方法,要使用它可以直接这样:Outer.g();这样才对的