标签:反射机制 tcl 技术分享 指定 多个 文档 password 简单 alt
学习目标
JUnit是一个Java语言的单元测试框架,简单理解为可以用于取代java的main方法。Junit属于第三方工具,一般情况下需要导入jar包,不过,多数Java开发环境已经集成了JUnit作为单元测试工具。
创建"MyJunit"java项目,并创建"com.itheima_00_Junit"包
结果
@Test,用于修饰需要执行的方法
@Before,测试方法前执行的方法
@After,测试方法后执行的方法
publicclass JunitDemo_1 {
@Test
publicvoidmyTest(){
System.out.println("测试 test");
}
@Before
publicvoidmyBefore(){
System.out.println("方法前");
}
@After
publicvoidmyAfter(){
System.out.println("方法后");
}
/*运行结果:
* 方法前
* 测试 test
* 方法后
*/
}
deprecation ,或略过时
rawtypes ,忽略类型安全
unused ,忽略不使用
unchecked ,忽略安全检查
null,忽略空指针
serial, 忽略序列号
all,忽略所有
//#1 方法过期
class Parent1_1{
@Deprecated
public void init(){
}
}
//#2.1 JDK5.0 复写父类方法
class Parent1_2{
public void init(){
}
}
class Son1_2 extends Parent1_2{
@Override
public void init() {
}
}
//#2.2 JDK6.0 实现父接口方法
interface Parent1_3{
public void init();
}
class Son1_3 implements Parent1_3{
@Override
public void init() {
}
}
class Parent1_4 implements java.io.Serializable{
@SuppressWarnings({ "rawtypes", "unused" })
public String username() default "jack";
publicstaticvoid main(String[] args) {
booleanb = MyAnnoTest_4.class.isAnnotationPresent(MyAnno_1.class);
System.out.println(b); //false
@Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME)
publicclass AnnotationDemo_0 {
System.out.println("demo1执行了...");
System.out.println("demo2执行了...");
System.out.println("demo3执行了...");
publicclass AnnotationTest_1 {
publicstaticvoid main(String[] args) {
Classclazz = AnnotationDemo_0.class;
Object obj = clazz.newInstance();
Method[] allMethod = clazz.getMethods();
for (Method method : allMethod) {
booleanflag = method.isAnnotationPresent(MyAnno.class);
所有的类加载器都是 java.lang.ClassLoader 的子类
全盘负责:A类如果要使用B类(不存在),A类加载器C必须负责加载B类。
委托机制:A类加载器如果要加载资源B,必须询问父类加载是否加载。
java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包)
动态代理:程序运行时,使用JDK提供工具类(Proxy),动态创建一个类,此类一般用于代理。
Object proxyObj = Proxy.newProxyInstance(参数1,参数2,参数3);
参数1:ClassLoader,负责将动态创建类,加载到内存。当前类.class.getClassLoader();
参数2:Class[] interfaces ,代理类需要实现的所有接口(确定方法),被代理类实例.getClass().getInterfaces();
参数3:InvocationHandler, 请求处理类,代理类不具有任何功能,代理类的每一个方法执行时,调用处理类invoke方法。
voke(Object proxy ,Method ,Object[] args)
List<String>list = new ArrayList<String>();
System.out.println(list.size());
System.out.println(list.size());
publicstatic List<String> myProxy(List<String>list) {
List<String>listProxy = (List) Proxy.newProxyInstance(
ReflectTest.class.getClassLoader(), list.getClass()
.getInterfaces(), new MyPro(list));
publicclass MyPro implements InvocationHandler{
public MyPro(List<String>list){
public Object invoke(Object porxy,Method method,Object[] arge) throws Exception{
if("add".equals(method.getName()))
thrownew UnsupportedOperationException("add NO");
if("set".equals(method.getName()))
thrownew UnsupportedOperationException("set NO");
if("remove".equals(method.getName()))
thrownew UnsupportedOperationException("remove NO");
returnmethod.invoke(list, arge);
List<String>list = new ArrayList<String>();
System.out.println(list.size());
System.out.println(list.size());
publicstatic List<String> myProxy(final List<String>list) {
List<String>list2= (List) Proxy.newProxyInstance(ReflectTest.class
.getClassLoader(), list.getClass().getInterfaces(),new InvocationHandler() {
public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {
if ("add".equals(method.getName()))
thrownew UnsupportedOperationException("add NO");
if ("set".equals(method.getName()))
thrownew UnsupportedOperationException("set NO");
if ("remove".equals(method.getName()))
thrownew UnsupportedOperationException("r NO");
returnmethod.invoke(list, args);
第17天(基础加强_注解_类加载器_动态代理)_学习目标版本
标签:反射机制 tcl 技术分享 指定 多个 文档 password 简单 alt
原文地址:http://www.cnblogs.com/sivek/p/7232909.html