Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4123
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2017-01-08 16:19
文章分类

全部博文(9)

文章存档

2017年(9)

我的朋友
最近访客

分类: Java

2017-01-08 16:59:13

原文地址:静态内嵌类 作者:seuqyr

如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着: 

1. 嵌套类的对象,并不需要其外围类的对象。 

2. 不能从嵌套类的对象中访问非静态的外围类对象。


  如果一个类要被声明为static的,只有一种情况,就是静态内部类。如果在外部类声明为static,程序会编译都不会过。在一番调查后个人总结出了3点关于内部类和静态内部类(俗称:内嵌类)

1.静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法

 

2.静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。

 

3.静态内部类可以单独初始化: 

静态嵌套类内部不能访问外部类的非静态成员这是由Java语法中"静态方法不能直接访问非静态成员"所限定.注意,外部类访问内部类的的成员有些特别不能直接访问可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了.同时注意内部静态类Person只在类StaticTest 范围内可见若在其它类中引用或初始化均是错误的.
 . 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
 
 . 静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;

 . 非静态内部类的非静态成员可以访问外部类的非静态变量。

    生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)



 静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建的时候会考虑采用静态内部类的设计,在知道如何初始化静态内部类,在《Effective Java》第二章所描述的静态内部类builder阐述了如何使用静态内部类:
阅读(188) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~