我记得前面讲的静态方法中对静态变量的使用有两种方法:
第一种直接用(变量名);
第二种用(实例化一个对象;对象.变量名);
应该是类似的吧,我这里不就相当于第二种方法么?
只要类不是静态的 就有对象,有对象就有this
。。我现在知道this使用的前提是要有当前对象,然后也看了static的相关知识,静态在对象之前就存在,加载了一次,放在内存中;然后又产生了新的问题:
要调用内部类的普通方法,必须先创建内部类的对象没错吧?!--所以内部类中的成员是可以用this表示的?!
现在要用this调用外部类的成员,就要看外部类的对象是不是存在;针对这个问题,可以用创建内部类对象需不需要外部类对象来判断:
1.要是需要,说明有内类对象就肯定存在外类对象,就可以用this引用;
2.要是不需要,说明即使有内类对象也没有外部对象,也就不能用this引用;--到目前的逻辑应该没错吧?
接着就具体的判断:
1.成员内部类:明确的说了需要用外部类的对象来创建内部类的对象,所以能用this;
2.静态内部类:也是明确的说了不需要外部类的对象来创建内部类的对象,所以不能用this;
3.方法内部类:可以分为普通方法内部类跟静态方法内部类,普通方法内部类没什么问题,它属于外类的对象,所以肯定是需要对象来调用的,所以可以用this;
问题来了,静态方法内部类需不需要用外部类的对象来创建内部类的对象呢?根据它能用this来引用,说明是需要外类对象来创建的,可是这个方法不是属于外类的吗,应该不需要外类的对象就能直接用啊?
大神帮帮忙,非常感谢!
或者你没懂什么是静态!你想自己想清楚为什么静态不能使用this在来考虑别的问题
只想说一句 ,你根本没懂什么是this!就这!
这是静态方法中的内部类中的使用:在内部类的普通方法下面可以使用this;在静态方法下面直接使用this就会报错--对应问题的第二点!(可以的话顺便帮我解决一下注释中带问号的问题,谢谢!)
//静态方法中的内部类 注:内部类中的方法只能是普通方法
public int a=1; //只能(new Shiyan().a)来调用
public static int A=3; //(Shiyan.A)和(new Shiyan().A)和(Shiyan.this.A) 要是没有相同的还能用(A)
public static void print(){
int b=2; //唯一的变量形式,要么设为final常量
//要是有相同的b,如何取这个b的值??????????????????
class Inner{
public int c=8; //只能是普通方法
//(this.c)和(new Inner().c)来调用;要是没有相同的,还能(c);
public void print(){ //只能是普通方法,静态方法就会报错!
int d=4; //唯一的变量形式,理由跟上面的b相同
int c=4;
System.out.println(Shiyan.this.A); //为什么可以用?
System.out.println(b);
System.out.println(this.c);
System.out.println(d);
}
}
System.out.println(this.A); //报错了?!
Inner in=new Inner();
in.print();
}
这是静态内部类中普通方法show()下面的调用出错的情况
// 创建静态内部类
public static class SInner {
// 内部类中的变量score
int score = 91;
public void show() {
System.out.println("访问外部类中的score:" + HelloWorld.this.score );
//这里为什么不能用HelloWorld.this.score
System.out.println("访问内部类中的score:" + score);
}
}
................调用静态变量两种
一种是 类名.变量名
一种是 对象名.变量名
你自己创造了第三种!不谢!