黑马程序员技术交流社区
标题:
基础 求指教
[打印本页]
作者:
杨华东
时间:
2012-10-9 14:39
标题:
基础 求指教
定义在 成员变量位置上的
内部类(inner class)和
定义在成员方法上的内部类有啥不一样????
作者:
沈佳龙
时间:
2012-10-9 14:50
1.成员内部类
成员内部类内不允许有任何静态声明!下面代码不能通过编译。
class Inner{
static int a = 10;
}
能够访问成员内部类的唯一途径就是通过外部类的对象!
2.方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
方法内部类对象不能使用该内部类所在方法的非final局部变量。
因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
作者:
李志群
时间:
2012-10-9 15:56
内部类:
将一个类定义在另一个类里面。对里面那个类就称为内部类。(内置类,嵌套类)
访问特点:
内部类可以直接访问外部类中的成员。
外部类要访问内部类中的成员必须创建内部类的对象。
为什么要定义内部类呢?
类是用于描述事物的,而事物中如果还有具体的事物,而且这个内部的事物在访问着所属事物中的内容。
这个时候这个内部的事物,也需要用到类来描述,这个类就是内部类。
为什么内部类可以直接访问外部类中的成员呢?
因为内部类都持有一个外部类的引用。外部类名。this
内部类的修饰符:
当内部类定义在外部类的成员位置上时,可以使用成员的修饰符来进行内部类的修饰。
一。权限修饰符: 1,默认的:直接在其他类中,访问一个类的内部类。
格式 new 外部类名().new 内部类名().内部类的方法();
可以写成:外部类名.内部类名 变量名 = new 外部类对象.new 内部类对象;
内部类必须有所属。
2,公有的:和默认的一样。
3,私有的:是不可以直接在外部访问的。
二.static修饰符
内部类一旦加了静态,出现访问局限性,只能访问外部类中的静态成员。
内部类被静态后,会随着外部类的加载而加载。
类什么时候用,什么时候进内存。
访问出现了局限性。
访问静态内部类中的非静态成员。
直接new内部类的对象,
外部类名.内部类名 变量名 = new 外部类名.内部类名();
访问静态内部类中的静态成员:不需要对象。
外部类名.内部类名.内部类里面的静态方法();
如果内部类中定义了静态成员,该内部类必须被静态修饰,否则编译失败。
记住:只有内部类定义在外部类的成员位置上,才具备这些修饰符。
内部类也可以定义在外部类中的局部位置上。(不能被静态修饰,局部位置上不能定义静态)
1,可以访问外部类的成员变量,
2,局部的不可以访问,
内部类定义在局部位置上,不允许访问局部中的变量。只能访问被fianl修饰的局部常量。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2