码迷,mamicode.com
首页 > 编程语言 > 详细

Java内部类

时间:2015-05-31 16:55:23      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:


尽管内部类的使用违背了Java要比C++更加简单的设计理念,但是所谓存在即合理,内部类可以对同一个包中的其他类隐藏起来,内部类方法可以访问该类定义所在作用域中的数据,包括私有的数据,某些情况下使用匿名内部类的解决方案更简短易于理解。

内部类是定义在另一个类中的类。既可以定义在类中,也可以定义在类的方法中。

内部类的对象有一个隐式引用,它引用了实例化该内部对象的外部类对象,因此,通过这个指针,可以访问外部类的全部状态,内部类既能访问自身的数据域,又能访问创建它的外部类对象的数据域。注意:static内部类没有这种附加指针。

下面分别介绍局部内部类 静态内部类 和 匿名内部类。在介绍之前,简单说下Java中的static 和final 关键字作用。

final 关键字

修饰属性 表示属性值初始化后不可改变;

修饰方法,表示方法不可覆写,编译器遇到调用final方法时会转入内嵌机制,大大提高执行效率;

修饰类,表示类不可被继承,没有子类。

final关键字有无法被改变 终态的意思,可修饰局部变量,实例变量,静态变量,在创建之后,只能够赋值一次,但是定义时不必初始化。(接口中final属性必须初始化)还可修饰形参,表示读取参数,但无法改变参数的值。

static关键字

修饰属性,表示公共属性,所有实例对象共享,又叫类属性,静态属性;JVM只为静态变量分配一次内存,在内存中不管多少实例也只有一个拷贝。

修饰方法,表示类方法,和类属性一样,都可直接通过类名直接访问。

修饰内部类,不能修饰普通类。

static代码块,JVM加载类时会执行这些静态代码块,如果有多个,按出现顺序依次执行,每个代码块只会被执行一次。

局部内部类

在外部类的方法中实现的类,对外部世界完全隐藏,除了改方法,没有其他方法知道该类的存在。局部类不能用public和private访问说明符进行申明。它的作用域限定在这个局部类的块中。与其他内部类相比,局部内部类不仅能够访问其外部类的状态,还可以访问定义其的方法中的局部变量,但必须是final类型的局部变量。

匿名内部类

内部类也可以继承一个类或实现一个接口,假如只创建这个类的一个对象,就不必命名了。构造函数的名字与类名相同,匿名类没有类名,所以没有构造函数,取而代之的是,将构造器参数传递给父类构造函数;如果内部类实现接口,不能有任何构造函数。

静态内部类

有时候,使用内部类只是为了把一个类隐藏在另外一个类的内部,并不需要内部类引用外部类对象。为此,可以将内部类申明为static,以便取消产生的引用。这时,内部类就不能访问外部类的状态了。


Java内部类

标签:

原文地址:http://blog.csdn.net/u010498696/article/details/46287243

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!