黑马程序员技术交流社区

标题: 关于静态内部类的一些疑问 [打印本页]

作者: 马振兴    时间: 2012-9-15 17:56
标题: 关于静态内部类的一些疑问
本帖最后由 马振兴 于 2012-9-16 11:15 编辑

静态类只能以内部类的形式存在吗?
不明白为什么内部类中有静态成员,则该类必须定义为静态?
把内部类及其成员定义为静态有什么好处吗?
只是为了调用方便吗?
作者: 马睿    时间: 2012-9-15 18:22
本帖最后由 马睿 于 2012-9-15 18:23 编辑

静态类只能以内部类的形式存在吗?


不明白为什么内部类中有静态成员,则该类必须定义为静态?
这个是个坑,首先静态成员变量都是放在静态方法区里的,他们不需要内部类构造函数支持,会先被直接加载
而“非静态内部类”的建立又要在外部类的构造函数支持下才能产生,而自己又是非静态内部类,那么必须也要依赖自己的内部构造函数。这样就会和  “他们不需要内部类构造函数支持,会先被直接加载”   这个原则矛盾= =然后就坑了,于是就必须要写static不然无法直接加入静态方法区
此外非静态内部类中static final是允许的,因为是“常量”……………会在运行前直接加载到内存里

把内部类及其成员定义为静态有什么好处吗?
方便调用,节约内存空间


作者: 尤洋    时间: 2012-9-15 18:32
尽量给你讲浅显点  根据静态的特点去想问题就好了
静态特点就是 优先于对象而存在,随着类的加载而加载

非静态的内部类 需要外部类创建对象 才会加载
如果他内部存在静态内容,就会出现 内部类中的成员  比 整个内部类 还出现的早
这明显是不可能的,就像还没生出鸡蛋就先孵出小鸡一样。
作者: 武庆东    时间: 2012-9-15 19:01
静态类只能以内部类的形式存在吗?
解答:我们提到的静态类指的是内部类,静态类只存在其内部!内部类可分为外成员内部类和局部内部类(方法里定义的内部类),成员内部类分为两种:静态内部类和非静态内部类;局部内部类和匿名内部类则不是类成员
不明白为什么内部类中有静态成员,则该类必须定义为静态?
解答:错误。内部类中有静态成员,不能说明该类是静态类。使用static 修饰的成员内部类是静态内部类,没有使用static修饰的成员内部类是非静态内部类。静态内部类可以包含静态成员,也可以包含分静态成员。根据静态成员不能访问非静态成员的规则,所以静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。即使静态内部类的实例方法不能外部类的实例成员,只能访问外部类的静态成员
举例:
//静态内部类
public class A{
private String name="abc";
private Static  String color="yellow"
   staic class b{

//静态内部类可以包含静态成员
  private static int age;
     public void c{
   //下面代码出错,静态内部类无法访问外部类的实例成员
  System.out.println(name);
  //下面正确
  System.out.printn(color);
   }
  }
  }
把内部类及其成员定义为静态有什么好处吗?只是为了调用方便吗?
成员定义成静态,那么该成员就变成类的成员变量,不需要进行实例化,就可以使用。把内部类及其成员定义为内部类,根据要求进行定义!







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2