01_反射_02_反射类的构造方法
生活随笔
收集整理的這篇文章主要介紹了
01_反射_02_反射类的构造方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【工程截圖】
?
?
【Person.java】 //將要被反射的類
package com.Higgin.reflect; import java.util.List;public class Person {private String name="NULL";private int age=0;public Person(){System.out.println("構造方法:Person()");}public Person(String name){System.out.println("構造方法:Person(String name)");this.name=name;}public Person(String name,int age){this.name=name;this.age=age;System.out.println("構造方法:Person(String name,int age)");}/*** 注意:是private 私有的!!!!!!!!*/private Person(List list){System.out.println("構造方法:Person(List list)");System.out.println("list.get(0):"+list.get(0));}public void sayHello(){System.out.println(name+" say: hello world!");System.out.println("I'm "+age+" years old");} }【情況一】
【Demo01.java】測試反射無參構造方法Person()
/** 反射Person類的 Person()構造方法,創建類的對象* @throws Exception*/@Testpublic void test1() throws Exception{Class clazz=Class.forName("com.Higgin.reflect.Person");//反射構造方法:public Person()Constructor c=clazz.getConstructor(null); Person p=(Person)c.newInstance(null);p.sayHello();}【運行結果】
?
【情況二】
【Demo01.java】測試反射有參構造方法Person(Strng name)
/** 反射構造方法:public Person(String name)*/@Testpublic void test2() throws Exception{Class clazz=new Person().getClass(); //注意,這里其實已經先創建了一個對象(因為new Person())//反射構造方法:public Person(String name)Constructor c=clazz.getConstructor(String.class);Person p=(Person) c.newInstance("Jack");p.sayHello();}【運行結果】
?
【情況三】
【Demo01.java】測試Person(String name,int age)的情況
/** 反射構造方法:public Person(String name,int age)*/@Testpublic void test3() throws Exception{Class clazz=Person.class;//反射構造方法:public Person(String name,int age)Constructor c=clazz.getConstructor(String.class,int.class);Person p=(Person) c.newInstance("Jack",18);p.sayHello();}【運行結果】
?
?【情況三】
【Dem01.java】測試private Person(List list)的i情況,注意是私有的
/** 注意是私有的* 反射構造方法:private Person(List list)*/@Testpublic void test4() throws Exception{Class clazz=Person.class;//反射構造方法:private Person(List list)Constructor c=clazz.getDeclaredConstructor(List.class); c.setAccessible(true); //暴力反射,沒有這句會出錯的!!!!!!!!List list=new ArrayList();list.add("6666666");Person p=(Person) c.newInstance(list);p.sayHello();}【運行結果】
?
?
【創建對象的另外一種寫法】等同于test1()的測試方法
/*** 創建對象的另外一種方式* @throws Exception*/@Testpublic void test5() throws Exception{Class clazz=Class.forName("com.Higgin.reflect.Person");Person p=(Person)clazz.newInstance(); //本質就是反射類的無參構造方法反射對象 p.sayHello();}【運行結果】
?
轉載于:https://www.cnblogs.com/HigginCui/p/5767098.html
總結
以上是生活随笔為你收集整理的01_反射_02_反射类的构造方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android:生命周期案例
- 下一篇: iPhone将NSString转换编码集