java反射机制

一.测试用的实体类(ClassInvoke.java):

package com.szy.project.entity;

public class ClassInvoke {

	private static String name;
	
	public void test(){
		System.out.println("Test ----  Class.invoke()!");
	}
	
	private String sayHello(String str){
		return "hello:"+str;
	}
	
	public String getName(){
		return name;
	}
	
}

    二.反射机制:获得需要实例化的Class,然后再通过Instance(),方法获得示例;

    1.通过引用获得Class:

    这种方式已经通过new的方式获得了示例,再通过反射的方式去获得示例显得有点多余,不建议使用;

ClassInvoke test = new ClassInvoke(); 
Class<ClassInvoke> test1 = (Class<ClassInvoke>)test.getClass();

    2.通过forName获得示例对象:

    注意:forName()方法中的参数是全类名;

Class<ClassInvoke>test1 = (Class<ClassInvoke>)Class.forName("com.szy.project.entity.ClassInvoke");

    3.通过.class获得Class:

Class test1 = ClassInvoke.class;

三.获得示例,执行方法:

ClassInvoke test = new ClassInvoke(); 
Class<ClassInvoke> test1 = (Class<ClassInvoke>)test.getClass();
ClassInvoke test2;
test2 = test1.newInstance();
test2.test();
Class<ClassInvoke>test1 = (Class<ClassInvoke>)Class.forName("com.szy.project.entity.ClassInvoke");
ClassInvoke test2 = test1.newInstance();
test2.test();
Class test1 = ClassInvoke.class;
ClassInvoke test2 = (ClassInvoke)test1.newInstance();
test2.test();

四.访问私有属性:

两种方式:访问静态属性和非静态变量;

访问测试类ClassInvoke.java中非静态属性sayHello():

try {
	Class test = Class.forName("com.szy.project.entity.ClassInvoke");
	Method method = test.getDeclaredMethod("sayHello", new Class[]{String.class});
	Object invoke = (String)method.invoke(test.newInstance(), new Object[]{"szy!"});//访问非静态属性需要获得示例
	System.out.println(invoke);
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

访问测试测试类中的静态变量name:

try {
    Class test = Class.forName("com.szy.project.entity.ClassInvoke");
    Field field = test.getDeclaredField("name");
    field.setAccessible(true);
    field.set(test, "szy");
    System.out.println(field.get("name"));
} catch (ClassNotFoundException | NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e ) {
	// TODO Auto-generated catch block
        e.printStackTrace();
}




阅读更多
个人分类: java基础
想对作者说点什么? 我来说一句

Java反射机制 Java反射机制

2008年12月28日 20KB 下载

Java反射机制

2011年10月10日 188KB 下载

java反射机制与动态代理

2010年03月28日 250KB 下载

Java反射机制课件ppt

2010年06月28日 268KB 下载

JAVA 反射机制应用

2008年10月17日 124KB 下载

java反射机制教程

2009年07月24日 202KB 下载

java反射原理

2011年07月04日 450KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭