----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------
//使用反射技術得到構造函數,並實例化對象
package cn.itcast.reflection;
import java.util.List;
public class Cat {
public String name=”麥當勞”;
private int age;
private String []foods;
public Cat() {
}
public Cat(String []foods){
this.foods=foods;
}
public void show(){
System.out.println("貓貓叫w");
}
//添加一個帶有參數的函數
public void show(String name){
System.out.println("貓貓叫"+name);
}
//有兩個參數的普通函數
public void show(String name,int age){
System.out.println(name+" 年齡是"+age);
}
//貓貓數數
private void count(List list){
for(Object obj: list)
{
System.out.println(obj);
}
}
public Cat(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getFoods() {
return foods;
}
public void setFoods(String[] foods) {
this.foods = foods;
}
}
//使用默認的構造函數來實例化對象
private static void test1() throws InstantiationException,
IllegalAccessException {
// TODO Auto-generated method stub
Class clazz=Cat.class;
//實例化Cat
Cat cat=(Cat) clazz.newInstance();
//測試
cat.show();
}
// 用 public Cat(String name,int age)來實例化對象
private static void test2() throws NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Class clazz =Cat.class;
//得到該構造方法,希望得到
Constructor c=clazz.getConstructor(String.class,int.class);
//創建實例
Cat cat=(Cat) c.newInstance("小白",2); //相當於 Cat cat=new Cat("小白",2);
System.out.println(cat.getName());
cat.show();
}
6.2.3 得到 public Cat(String []foods) 構造函數
private static void test3() throws NoSuchMethodException,
SecurityException, InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
//1.得到Class 對象
Class clazz = Cat.class;
//2.通過clazz得打構造
Constructor c=clazz.getConstructor(String [].class);
//3.通過c 來創建Cat 實例
//Cat cat=(Cat) c.newInstance((Object) new String[]{"魚","老鼠"});//因爲newInstance接受可變參數,"魚","老鼠" // newInstance("魚","老鼠")
Cat cat=(Cat) c.newInstance(new Object[]{ new String[]{"魚","老鼠"}});//因爲newInstance接受可變參數,"魚","老鼠" // newInstance("魚","老鼠")
cat.show();
}
// 使用反射技術,得到成員函數,並調用.
//案例1
//反射 public void show(),並調用.
private static void test1() throws Exception {
//1.得到Class對象
Class clazz = Class.forName("cn.itcast.reflection.Cat");
//2.得到show方法
Method m=clazz.getMethod("show",null);
//3.調用
m.invoke(clazz.newInstance(),null); //同學會不好理解 clazz.newInstance().invoke(m,"");
}
//案例2
////反射public void show(String name)
private static void test2() throws Exception {
//反射public void show(String name)
Class clazz = Class.forName("cn.itcast.reflection.Cat");
//得到show(String name)
Method m=clazz.getMethod("show",String.class);
//調用
m.invoke(clazz.newInstance(), "宋江"); // show("宋江");
}
//案例3
//反射 public void show(String name,int age)
private static void test3() throws Exception {
Class clazz = Class.forName("cn.itcast.reflection.Cat");
Method m=clazz.getMethod("show", String.class,int.class);
m.invoke(clazz.newInstance(), "賈寶玉",12);
}
//案例4
//反射private void count(List list)
private static void test4() throws Exception {
Class clazz = Class.forName("cn.itcast.reflection.Cat");
//Method m=clazz.getMethod("count", List.class);//當一個函數是私有的,則不能使用 getMethod
Method m=clazz.getDeclaredMethod("count", List.class);
m.setAccessible(true);//暴力訪問.
List al=new ArrayList();
al.add(1);al.add(3);
m.invoke(clazz.newInstance(), al);
}
//使用反射得到字段
案例1:
//反射public String name="麥當勞";
private static void test1() throws Exception {
//Cat cat=new Cat();
Class clazz=Cat.class;
Field f=clazz.getField("name");
//取得f的值.
String name=(String) f.get(clazz.newInstance()); //cat.get(f); //返回Object就是name的值
System.out.println(name);
}
//案例2:
//得到private int age;
private static void test2() throws Exception {
Class clazz = Cat.class;
Field f=clazz.getDeclaredField("age");
f.setAccessible(true);
//這是創建貓的實例
Cat cat=(Cat) clazz.newInstance();
//給f字段賦值.cat表示給哪個實例賦值.
f.set(cat, 13);
//取出f.get(cat) 取出cat這個實例的f字符的值
System.out.println(f.get(cat));
}
----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------