摘要: 1、创建一个实现接口InvocationHandler的类,它必须实现invoke的方法2.创建被代理的类以及接口3、通过Proxy的静态方法newProxyInstance(ClassLoader loder,Class[] interface ,InvocationHandler h)创建一个代理4、通过代理调用方法 阅读全文
posted @ 2012-08-19 16:24 feifeihu 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 想生成对象实体,在Reflection动态机制中有两种方法,一种是针对无参数的构造方法,另一个是针对带参数的构造方法。如果想调用的是带参数的构造方法就比较麻烦些,不能再调用Class的newInstance(),而是调用Constructor的newInstance()。首先准备一个Class【】作为Ctor的参数类型(本例中使用了一个double和一个int),获得以此为ctor实参值 ,调用上述专属ctor的newInstance()。example1: Class c=Class.forName("DynTest");//Dyntest是个类 有个不带参数的够着方法 阅读全文
posted @ 2012-08-19 10:27 feifeihu 阅读(143) 评论(0) 推荐(0) 编辑
摘要: Class object 诞生管道示例运用 getClass()注:每个class都有此函数 String str="abc";Class c1=str.getClass();运用 Class.getSuperclass() Button b=new Button();Class c1=b.getClass();Class c2=b.getSuperclass();运用static methodClass.forName()(最常用) Class c1=Class.forName("java.lang.String");Class c2=Class.fo 阅读全文
posted @ 2012-08-19 09:29 feifeihu 阅读(242) 评论(0) 推荐(0) 编辑
摘要: 从Object的层次来说,==与equals是相同的,都市比较内存地址,也就是说,都是比较两个引用是否指向同一个对象,是则返回true 否则就返回false但是很多类overwrite了equals方法,最典型的就是String类了可以参考jkd源码包里 Object和String的类中关于equal的具体实现所以:==比较内存没有错,但是equal比较内容就片面了 ! 阅读全文
posted @ 2012-08-19 09:00 feifeihu 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 1.右击“我的电脑”,点击“属性”:选择“高级”选项卡,点击“环境变量”: 2.在“系统变量”中,设置3项系统变量,JAVA_HOME,PATH,CLASSPATH (注:“系统变量”对所有用户有用,而“用户变量”则只对当前登陆用户有用。对于变量的大小写,是不进行区分的。) 3.因为是默认安装,所以JDK1.5是安装在C:/Program Files/Java/jdk1.5.0里了。现在为三个变量设值; 新建 JAVA_HOME设值 C:/Program Files/Java/jdk1.5.0 新建 CLASSPATH设值 .;%JAVA_HOME%/lib;%JAVA_HOME%/lib.. 阅读全文
posted @ 2012-08-18 19:14 feifeihu 阅读(198) 评论(0) 推荐(0) 编辑
摘要: ClassLoader一个经常出现又让很多人望而却步的词,本文将试图以最浅显易懂的方式来讲解 ClassLoader,希望能对不了解该机制的朋友起到一点点作用。 要深入了解ClassLoader,首先就要知道ClassLoader是用来干什么的,顾名思义,它就是用来加载Class文件到JVM,以供程序使用的。我们知道,java程序可以动态加载类定义,而这个动态加载的机制就是通过ClassLoader来实现的,所以可想而知ClassLoader的重要性如何。 看到这里,可能有的朋友会想到一个问题,那就是既然ClassLoader是用来加载类到JVM中的,那么ClassLoader又是如何被加载呢 阅读全文
posted @ 2012-08-18 10:44 feifeihu 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 2、JAVA反射机制简介Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。Java 反射机制主要提供了以下功能:* 在运行时判断任意一个对象所属的类。* 在运行时构造任意一个类的对象。* 在运行时判断任意一个类所具有的成员变量和方法。* 在运行时调用任意一个对象的方法。反射是Java被视为动态(或准动态)语言的一个关键性质。3、进入代码我一贯认为,概念大致了解就行,关键是会用!毕竟我们是开发工程师(说的好听点,不能自己埋汰自己)!来,看下面的代 阅读全文
posted @ 2012-08-18 09:32 feifeihu 阅读(299) 评论(0) 推荐(0) 编辑
摘要: jdk的动态代理是基于接口的,必须实现了某一个或多个任意接口才可以被代理,并且只有这些接口中的方法会被代理。看了一下jdk带的动态代理api,发现没有例子实在是很容易走弯路,所以这里写一个加法器的简单示例。?1234567// Adder.java package test; public interface Adder { int add(int a, int b); }?12345678910// AdderImpl.java package test; public class AdderImpl implements Adder { @Overridepublic int add(in 阅读全文
posted @ 2012-08-17 21:51 feifeihu 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 概述1.1. 背景在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。1.2. Log4j简介在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。Log4j是Apach 阅读全文
posted @ 2012-08-16 17:30 feifeihu 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这 一小部分功能是正确的。但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,那绝对是一件非常郁闷的事情。所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。 传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。正因 为如此麻烦,所以程序员们编写 阅读全文
posted @ 2012-08-16 14:47 feifeihu 阅读(195) 评论(0) 推荐(0) 编辑