A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马振兴 中级黑马   /  2012-9-15 17:56  /  2123 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 马振兴 于 2012-9-16 11:15 编辑

静态类只能以内部类的形式存在吗?
不明白为什么内部类中有静态成员,则该类必须定义为静态?
把内部类及其成员定义为静态有什么好处吗?
只是为了调用方便吗?

评分

参与人数 1技术分 +1 收起 理由
创出一片辉煌 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
静态类只能以内部类的形式存在吗?
解答:我们提到的静态类指的是内部类,静态类只存在其内部!内部类可分为外成员内部类和局部内部类(方法里定义的内部类),成员内部类分为两种:静态内部类和非静态内部类;局部内部类和匿名内部类则不是类成员
不明白为什么内部类中有静态成员,则该类必须定义为静态?
解答:错误。内部类中有静态成员,不能说明该类是静态类。使用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);
   }
  }
  }
把内部类及其成员定义为静态有什么好处吗?只是为了调用方便吗?
成员定义成静态,那么该成员就变成类的成员变量,不需要进行实例化,就可以使用。把内部类及其成员定义为内部类,根据要求进行定义!


评分

参与人数 1技术分 +1 收起 理由
黑马_许芸 + 1 赞一个!

查看全部评分

回复 使用道具 举报
尽量给你讲浅显点  根据静态的特点去想问题就好了
静态特点就是 优先于对象而存在,随着类的加载而加载

非静态的内部类 需要外部类创建对象 才会加载
如果他内部存在静态内容,就会出现 内部类中的成员  比 整个内部类 还出现的早
这明显是不可能的,就像还没生出鸡蛋就先孵出小鸡一样。
回复 使用道具 举报
本帖最后由 马睿 于 2012-9-15 18:23 编辑

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


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

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

评分

参与人数 1技术分 +1 收起 理由
创出一片辉煌 + 1 领教了

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马