黑马程序员技术交流社区
标题:
静态内部类问题.
[打印本页]
作者:
qowoeo7538
时间:
2014-11-10 03:51
标题:
静态内部类问题.
class A{
public static class B{
public void show(){
int i = 30;
System.out.println(this.i);
}
}
}
public class Demo {
public static void main(String[] args){
new A.B().show();
}
}
new A.B().show(); 语句是实例化外部类还是内部类
作者:
yuanlingqi
时间:
2014-11-10 03:51
本帖最后由 yuanlingqi 于 2014-11-10 12:18 编辑
class A {
public A(){
System.out.println("A被初始化了");
}
public static class B {
public B(){
System.out.println("B被初始化了");
}
public void show() {
int i = 30;
// 这个i是局部变量,this是无法访问的
System.out.println(i);
}
}
}
public class TestC {
/**
* @param args
*/
public static void main(String[] args) {
new A.B().show();
new A.B().show();
new A.B().show();
}
}
B被初始化了
30
B被初始化了
30
B被初始化了
30
复制代码
从上面这段程序的输出可以看出class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。这里的A仅仅起到了路标的作用,表明初始化的是A内部B类
作者:
一叶障目
时间:
2014-11-10 10:09
本帖最后由 一叶障目 于 2014-11-10 11:09 编辑
内部类被静态化,A.B可以当做一个整体看,可以直接new 出内部类的对象
通过A访问B,不需要生成外部类对象
/*new A.B().show();错了吧;
内部类非静态:访问内部类方式:
A.B in=new A().new B();
in.show();
或者:
A a=new A();
A.B in=a.new B();
in.show();
1、开头的A是为了表明生成的内部类对象是属于哪个外部中;
2、必须要有外部类对象才能生成内部类对象,因为内部类的作用就是访问外部类中的成员变量;
*/
作者:
一叶障目
时间:
2014-11-10 11:07
本帖最后由 一叶障目 于 2014-11-10 11:09 编辑
抱歉,刚才说错了
内部类被静态化,A.B可以当做一个整体看,可以直接new 出内部类的对象
通过A访问B,不需要生成外部类对象;
作者:
一叶障目
时间:
2014-11-10 15:31
yuanlingqi 发表于 2014-11-10 12:06
从上面这段程序的输出可以看出class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。这 ...
简单明了,强
作者:
逗比程序员
时间:
2014-11-20 09:49
class A并没有被实例化,而静态static修饰的内部B类也并不是只初始化一次。A是指引的,表明初始化的是A内部B类
作者:
Lscreat
时间:
2014-12-2 08:13
学习到了,谢谢= =
作者:
a371166028
时间:
2014-12-10 12:25
当你想进黑马的时候,游戏就已经开始了
作者:
qowoeo7538
时间:
2014-12-10 18:40
哎,我的黑马币一去不回啊……
作者:
boycechan
时间:
2014-12-11 17:45
过来学习下。内部类我也学得有很懵:L
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2