首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

CoreJava 第6章 接口跟内部类

2012-12-26 
CoreJava 第6章 接口和内部类1.克隆对象(深拷贝),复制对象,改原状态不会相互影响.2.内部类:可访问外部类域

CoreJava 第6章 接口和内部类
1.克隆对象(深拷贝),复制对象,改原状态不会相互影响.

2.内部类:可访问外部类域,

3.代理(proxy) 实现任意接口的对象.

4.方法默认public,可定义常量(可认为没有实例域的抽象类)
实例类要声明public(默认包可见)

5.java是一种强类型的语言

6.实现Comparable接口可比较
要判断
if(getClass()!=o.getClass()){
  throw new ClassCastException();
}

7.接口变量引用实现接口类对象

8.if(object instanceof Comparable) 判断实现接口

9.接口扩展 public interface Powered extends Moveable

10.double SPEED=55;  ==( public static final) constrant(建议不书写多余关键字))

111.浅拷贝 除数字,基本类型外,其他引用
String类-不允许改变 --不同对象
Date可改变--有clone方法
数组.clone
11.Cloneable 只是作为标记(tagging interface),个人不建议这种写法
1)调用子对象的clone 可能修补深复制
2)Object有 protected Object clone()
子类调用重写 public Object clone();
j2se5 允许更改返回类型 public Employee clone();

3)深拷贝
public Employee clone() ..{
  Employee o=(Employee)super.clone();
  o.hireDated=(Date)hireDay.clone();
  return o;
}
4)实现clone不会抛出异常,编译器不知道 要throws
是final类的话 可try..catch

12.子类只能扩展一个抽象类

13.序列化 安全,容易,低效

14.接口与回调callback
定时器调用对象方法
函数指针对应产物--method对象

public class TraceHandler implements InvocationHandler {private Object target;/** *  */public TraceHandler(Object t) {target=t;}/* (non-Javadoc) * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) */public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.print(target);System.out.print("."+method.getName()+"(");if(args!=null){for(int i=0;i<args.length;i++){System.out.print(args[i]);if(i<args.length-1)System.out.print(",");}System.out.println(")");}return method.invoke(target, args);//只是调用,并不覆盖}public static void main(String[] args) {Object[] elements=new Object[1000];for(int i=0;i<elements.length;i++){Integer value=i+1;InvocationHandler handler=new TraceHandler(value);//代理类Class[] interfaces=new Class[]{Comparable.class};//接口elements[i]=Proxy.newProxyInstance(null, interfaces, handler);//代理对象  }Integer key=new Random().nextInt(elements.length)+1;int result=Arrays.binarySearch(elements, key);if(result>=0)System.out.println(elements[result]);}}



24.代理类运行时创建,创建后是常规类
a)调用处理器--继承类(代理类只能有一个实例域)
b)代理类未定义类名的生成$Proxy开头类 Proxy.newProxyInstance..
c)特定类加载器,预设接口,只能有一个代理类 ,如上的到的是2/多个实例
d)一定是public final ,所有接口都public,既不属于特定包,否则接口,代理类要在同一包
Proxy.getProxyClass Proxy.isProxyClass









热点排行