关于java内部类(静态内部类和普通内部类)

java 静态内部类
只有在是静态内部类的情况下才能把static修复符放在类前,其他任何时候static都是不能修饰类的。
  1.      //定义张三这个人  
  2.      Person p = new Person("张三");  
  3.      //设置张三的家庭信息  
  4.      p.setHome(new Person.Home("上海","021"));

它可以脱离外部类存在,也就是说我们仍然可以通过new Home()声明一个Home对象,只是需要导入“Person.Home”而已

那静态内部类与普通内部类有的区别

(1)静态内部类不持有外部类的引用

在普通内部类中,我们可以直接访问外部类的属性、方法,即使是private类型也可以访问,这是因为内部类持有一个外部类的引用,可以自由访问。而静态内部类,则只可以访问外部类的静态方法和静态属性(如果是private权限也能访问,这是由其代码位置所决定的),其他则不能访问。

(2)静态内部类不依赖外部类

普通内部类与外部类之间是相互依赖的关系,内部类实例不能脱离外部类实例,也就是说它们会同生同死,一起声明,一起被垃圾回收器回收。而静态内部类是可以独立存在的,即使外部类消亡了,静态内部类还是可以存在的。

(3)普通内部类不能声明static的方法和变量

普通内部类不能声明static的方法和变量,注意这里说的是变量,常量(也就是final static修饰的属性)还是可以的,而静态内部类形似外部类,没有任何限制。

(4)实例化一个非静态的内部类的方法:

a. 先生成一个外部类对象实例

OutClassTest oc1 = new OutClassTest();

b. 通过外部类的对象实例生成内部类对象

OutClassTest.InnerClass no_static_inner = oc1.new InnerClass();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值