java反射基础
2011-10-05 20:46
423 查看
1,三种获得Class对象的方法
2,构造方法创建对象
3.字段反射
4,方法反射
5,主函数反射
@Test public void test1() throws Exception{ //类名.class Class c1 = String.class; //对象名.getClass() Class c2 = new String().getClass(); //Class.forName("类的完整路径") Class c3 = Class.forName("java.lang.String"); //相等 if(c2==c3){ System.out.println("相等"); } }
2,构造方法创建对象
public class Demo2 { //用反射方法通过空参构造方法创建一个对象 @Test public void test1(){ try { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //取得构造方法 Constructor c = clazz.getConstructor(null); //创建实例 Person person = (Person)c.newInstance(null); //调用业务方法 person.show(); } catch (Exception e) { e.printStackTrace(); } } //用反射方法通过有参构造方法创建一个对象 @Test public void test2(){ try { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //取得构造方法[参数类型的Class对象] Constructor c = clazz.getConstructor(String.class,int.class); //创建实例[真实参数] Person person = (Person)c.newInstance("jack",31); //调用业务方法 person.show(); } catch (Exception e) { e.printStackTrace(); } } //用反射方法通过私有构造方法创建一个对象 @Test public void test3(){ try { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //取得类中声明的所有构造方法(包含private或protected) Constructor c = clazz.getDeclaredConstructor(String.class,String[].class); //设置该private的构造方法是否可以被访问 c.setAccessible(true); Person person = (Person) c.newInstance("jack",new String[]{"唱歌","跳舞"}); person.show(); } catch (Exception e) { e.printStackTrace(); } } //用反射方法通过私有空参构造方法创建一个对象 @Test public void test4(){ try { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); Constructor c = clazz.getDeclaredConstructor(null); c.setAccessible(true); Person person = (Person) c.newInstance(null); person.show(); } catch (Exception e) { e.printStackTrace(); } } }
3.字段反射
@Test public void test1() throws Exception{ Person p = new Person(); Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //取得字段[字段的名字] Field f = clazz.getField("name"); //向字段存值[引用变量名,真实值] f.set(p,"jack");//new Person().setName("jack") //取得字段的值 System.out.println("用户名:" + p.name); } @Test public void test2() throws Exception{ Person p = new Person(); Class clazz = Class.forName("cn.itcast.java.reflect.Person"); Field f = clazz.getDeclaredField("age"); f.setAccessible(true); f.set(p,"31"); System.out.println("年龄:" + p.getAge()); }
4,方法反射
@Test public void test1() throws Exception{ Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //参数一:方法名 //参数二:方法参数对应的Class对象 Method m = clazz.getMethod("show",null); //参数一:引用变量 //参数二:真实值 m.invoke(new Person(),null); } @Test public void test2() throws Exception{ Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //参数一:方法名 //参数二:方法参数对应的Class对象 Method m = clazz.getMethod("show",String.class,int.class); //参数一:引用变量 //参数二:真实值 m.invoke(new Person(),"jack",31); } @Test public void test3() throws Exception{ Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //参数一:方法名 //参数二:方法参数对应的Class对象 Method m = clazz.getMethod("show",int[].class); //参数一:引用变量 //参数二:真实值 String value = (String) m.invoke(new Person(),new int[]{1,2,3,4}); System.out.println("value=" + value); } @Test public void test4() throws Exception{ Class clazz = Class.forName("cn.itcast.java.reflect.Person"); //参数一:方法名 //参数二:方法参数对应的Class对象 Method m = clazz.getDeclaredMethod("hello",String.class); //参数一:引用变量 //参数二:真实值 m.setAccessible(true); int value = (Integer) m.invoke(new Person(),"marry"); System.out.println("value=" + value); }
5,主函数反射
public static void main(String[] args) throws Exception { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); Method m = clazz.getMethod("main",String[].class); //如果是静态类型,参数一为null。 //m.invoke(null,new String[]{"A","C","D","E"}); //m.invoke(null,new Object[]{new String[]{"A","C","D","E"}}); m.invoke(null,(Object)new String[]{"A","C","D","E"}); }
相关文章推荐
- Java基础--反射
- Java基础总结从0开始(三):Java反射原理
- javaweb-day03-3&4(基础加强-反射)
- 黑马程序员——Java基础---反射
- JAVA基础必备(十三)——反射(二)
- 学习Spring必学的Java基础知识(1)----反射
- java 反射的基础学习
- 黑马程序员————java基础————反射
- JAVA基础加强:反射
- JAVA基础--JAVA中的反射机制详解
- Java基础加强反射总结
- JAVA基础之反射(下)
- Java:反射基础
- 黑马程序员---从头开始,回忆JAVA基础之反射
- Java 基础-反射与注解
- Java反射基础
- 学习Spring必学的Java基础知识----反射
- java基础--高薪技术--反射
- java 基础之 反射技术
- Java反射之基础篇