java核心技术10阅读(五)-内部类和代理

内部类

内部类作用:
•内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。
因为外部类的引用在构造器被编译器自动加入,即编译器为这个类生成了一个默认的构造器。并且编译器会自动将外部类隐式指针this加入到实例化内部类的方法中。好处在于不用再额外的去访问其他的类。
只有内部类可以是私有类,而常规类只可以具有包可见性,或公有可见性。包可见性指class前面不加修饰词,默认为defalut,而加了public就可以表示为公有可见性
•局部类
当内部类只在一个方法内使用时,可以使用局部类定义,局部类有一个优势,即对外部世界可以完全地隐藏起来。此外,局部类可以访问方法内的局部变量,局部变量必须事实上为 final。这说明,它们一旦赋值就绝不会改变。
•匿名内部类
只创建这个类的一个对象,就不必命名了。
new SuperType(construction parameters) {
inner class methodsand data
}
其中例如SuperType可以是 ActionListener 这样的接口,于是内部类就要实现这个接口。
相对于内部类、匿名内部类、局部类三种书写方法,最好lambada表达式写事件回调

•静态内部类
使用内部类只是为了把一个类隐藏在另外一个类的内部,并不需要内部类引用外围类对象。为此,可以将内部类声明为 static, 以便取消产生的引用。
在内部类不需要访问外围类对象的时候,应该使用静态内部类。

代理

利用代理可以在运行时创建一个实现了一组给定接口的新类: 这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用。
要想创建一个代理对象,需要使用 Proxy类的 newProxylnstance方法。这个方法有三个
参数:
•一个类加栽器(class loader)。作为 Java 安全模型的一部分,对于系统类和从因特网 上下载下来的类,可以使用不同的类加载器。
•一个 Class对象数组,每个元素都是需要实现的接口。
•一个调用处理器,TraceHandler相当于一个包装器,将运行时的接口、对象的绑定值进行包装处理

所有的代理类都扩展于 Proxy类。一个代理类只有一个实例域 —调用处理器,它定义在 Proxy 的超类中。为了履行代理对象的职责,所需要的任何附加数据都必须存储在调用处理器中。

发布了15 篇原创文章 · 获赞 1 · 访问量 132

猜你喜欢

转载自blog.csdn.net/qq_17236715/article/details/103980103
今日推荐