`

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对象
//java.util.Timer 主要用于调度后台
public class TimerTest {
	public static void main(String[] args) {
		System.out.println("start....");
		ActionListener listener=new TimePrinter();
		Timer t=new Timer(1000, listener);
		t.start(); 
		JOptionPane.showMessageDialog(null, "Quit Program?");//对话框
		System.exit(0);
	}
}

class TimePrinter implements ActionListener{

	/* (non-Javadoc)
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	public void actionPerformed(ActionEvent e) {
		System.out.println(new Date());
		Toolkit.getDefaultToolkit().beep();//蜂鸣
	}
}


15.内部类
a)访问外部类方法,域,这种引用在内部类不可见
类似于
public TimePrinter(Talking clock){
  outer=clock;
}
编译器为内部类添加默认构造器(修改内部类构造器)
外部类的实例方法自动添加this
ActionListener l=new TimePrinter(this);
明确指定内部类
ActionListener l=this.new TimePrinter();
编译器翻译为new TalkingClock$TimePrinter(this,null);
引用外部类.beep
if(TalkClock.this.beep) ...

内部类访问了外部域 会创建static access$0(outer) 方法获得外部域
b)对包中其他类隐藏
c)回调函数经常用anonymous

1)内部域只能被外围方法访问
2)内部类有指向外部实例的引用8
3)内部类实例由外部类构造才有


16.只有内部类可为私有,一般为包可见,public

166. 可在方法中定义局部类(在局部用到)(不能定义public private,被默认定义为块中可见)

17.内部类是一个编译器现象$间隔,与虚拟机无关
一种实例方法new TimerTest().new TimePrinter();

18.内部类访问方法局部变量(声明final)--传入参数被保存到局部变量
有时不只是局部用数组方式可保存值 final int[] counter=new int[1];

19.final被赋值一次,可不初始化

20.匿名内部类 方法不可引用,直接赋值给变量
ActionListener listener=new ActionListener(){//使用接口名或超类名
  public void actionPerformed(..){
   .......
  }
}

21.匿名内部类没类名,没构造器,可提供给超类构造器

22.静态内部类,不能引用外部类(有的用nested class)
内部公有类访问 ArrayLog.Pair
public static class Pair..


23.代理 运行时创建实现一组接口的类(编译时无法确定接口使用)
一种不好的方式 生成结果类,与编译器放一起,加载
代理:
1)实现指定接口全部方法
2)object的toString equals..hashCode()全部方法


不在运行时定义这些方法新代码,提供调用处理器,实现invokeHandler接口,
invoke方法调用代理对象方法

Proxy类的newProxyInstance
null表身默认类加载器
Class[] 每个元素都是要实现的接口
调用处理器

使用情况
a)路由对远程服务方法调用
b)运行期,由用户接口事件和动作关联
c)调试

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









分享到:
评论

相关推荐

    corejava.zip

    第6章解释接口和内部类;第7章讨论异常处理,并给出大量实用的调试技巧;第8章概要介绍泛型程序 设计;第9章讨论Java平台的集合框架;第10章介绍GUI程序设计,讨论如何建立窗口、如何在窗口中绘图、如何利用几何图形...

    CoreJava(第四章)

    **标题:“CoreJava(第四章)”** 在Java编程领域,Core Java是学习Java语言的基础,它涵盖了Java的核心概念和技术。第四章通常会深入探讨一些关键主题,这些主题可能包括类、对象、继承、多态性等面向对象编程(OOP...

    Core Java.JAVA核心技术(中文版)

    - **Lambda表达式**:简化函数式接口的使用,实现匿名内部类的简洁表示。 - **Stream API**:处理集合数据的新方式,提供过滤、映射、归约等操作。 - **反射与注解**:动态获取类信息,以及元数据处理的机制。 8...

    corejava.rar

    这个"corejava.rar"压缩包文件包含了该书籍的源代码,供读者在学习过程中实践和理解书中所讲解的概念。以下是基于Java核心技术的一些关键知识点的详细解释: 1. **基础语法**:Java是一门面向对象的语言,其基础...

    CoreJava(第三章)

    《CoreJava(第三章)》主要探讨的是Java编程的核心概念,这一章可能涵盖了类、对象、继承、封装、多态等面向对象编程的关键主题。在Java世界中,这些概念是构建强大、可维护软件的基础。以下是对这些核心知识点的详细...

    CoreJava(第五章)

    《CoreJava(第五章)》涵盖了Java编程的核心概念和高级特性,这一章主要讲解了类、对象、继承、接口以及访问控制等关键知识点。以下是对这些内容的详细阐述: 1. **类与对象**: 类是Java中的基本构造块,它定义了...

    corejava的21天课程

    而内部类、接口和抽象类则进一步拓展了面向对象编程的灵活性和可扩展性。 Day 14的压缩文件名为"Corejava_day14_all.zip",可能包含了关于文件和I/O流的内容,这是Java处理数据输入输出的关键部分,包括文件的读写...

    core java 1第十版英文版 java核心技术第十版英文版

    2. **面向对象编程**:深入讲解类与对象的概念,封装、继承和多态三大特性,以及抽象类、接口、内部类和匿名类的使用。 3. **异常处理**:涵盖Java的异常体系,如何捕获和处理异常,以及如何自定义异常。 4. **...

    corejava_面试题

    Java基础知识讲解与面试题分析: 1. Java源文件中是否可以...Java中可以通过继承Thread类、实现Runnable接口以及使用Callable接口和FutureTask类来实现多线程。同步可以通过synchronized关键字或者显式锁Lock类实现。

    CoreJava(第七章)

    标题“CoreJava(第七章)”暗示我们即将探讨的是关于Java编程语言的一个特定章节,通常在技术书籍或教程中,每一章都会专注于一个特定的主题或概念。在这个情况下,由于没有具体的章节名称,我们可以假设这将涵盖Java...

    coreJava面试题

    ### CoreJava面试题知识点解析 #### 1. final, finally, finalize 的区别 - **final**: 是Java中的关键字,用于标记常量、方法或类,表明这些元素是不可变的。当修饰变量时,该变量被称为常量,一旦被初始化就不能...

    [java.核心技术.第八版].Core.Java..8th.Edition源代码 示例代码

    第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Core Java. Volume I. Fundamentals, 8th Edition JAVA核心技术1基础知识

    第6章 接口与内部类 第7章 图形程序设计 第8章 事件处理 第9章 Swing用户界面组件 第10章 部署应用程序和applet 第11章 异常、日志、断言和调试 第12章 泛型程序设计 第13章 集合 第14章 多线程

    Core Java (Volume I,Volume II 9th Edition)英文版

    7. **接口与内部类**:解释接口的作用和实现,以及内部类的使用场景和分类。 8. **多线程**:讨论线程的概念、创建方式、同步机制(synchronized关键字和wait/notify)。 9. **输入/输出**:涵盖文件操作和流的使用...

    Core Java, Volume II--Advanced Features(10th)

    这本书是Java核心技术的第二卷,专为已经掌握Java基础的开发者设计,旨在深入探讨和理解Java的高级特性和最佳实践。在第10版中,作者对Java的最新版本进行了更新,确保读者能够了解到最新的技术动态。 一、多线程与...

    core java 7 第2卷

    《Core Java 7 第2卷》是一本专为Java开发者准备的权威指南,主要涵盖了Java 7版本中的高级特性和核心概念。这本书是Java开发人员深入理解语言、提高编程技能的重要参考资料。描述中的"core java 7 II"进一步强调了...

    Core Java Vol.1 Fundamentals (Horstmann, Cornell 9th 2012)

    《Core Java™ Volume I—Fundamentals》(第九版,霍斯特曼、科内尔著,2012年)是Java平台的权威指南书籍。本书针对严肃认真的程序员编写,它不仅反映了Java SE 7的语言更新,而且通过经过严格测试的代码示例,以...

    corejava笔记资料

    6. **集合框架**:Java的集合框架包括List、Set、Queue、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。理解它们的特性和应用场景是必要的。 7. **静态(static)关键字**:标签中提到了...

Global site tag (gtag.js) - Google Analytics