1、
package reflectionZ; import java.lang.reflect.Constructor; import java.util.List; public class Treflection01 { public static void main(String[] args) throws Exception { // 第13课 Class<?> clazz1 = Class.forName("reflectionZ.Cat"); // 使用反射 生成对象 // ZC: 创建出来的对象,使用的时候 需要处理 : // ZC: (1)、强转成 某类的对象 // ZC: (2)、继续用反射来操作这个 对象 // 使用的是 默认的 构造函数 clazz1.newInstance(); // 强转 // 通过Class对象来得到构造函数 Constructor c1 = clazz1.getConstructor(Class.forName("java.lang.String"), int.class); Cat cat1 = (Cat)c1.newInstance("小猫", 6); // 强转 cat1.Show(); Constructor<?> c2 = clazz1.getConstructor(String[].class); String[] foods = {"鱼", "老鼠"}; // Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments //Cat cat2 = (Cat)c2.newInstance(foods); // 强转 // 可变参数 ==> 拆散 --> String[] foods==>拆成foods[0],foods[1],... // ZC: 可是,普通的函数调用,没有这种情况的啊,为啥Constructor.newInstance(...)会这样? Cat cat2 = (Cat)c2.newInstance((Object)foods); // 强转 cat2.Show(); } } class Cat { public Cat() {} public Cat(String _strName, int _iAge) { FstrName = _strName; FiAge = _iAge; } public Cat(String[] _foods) { Ffoods = _foods; } public String FstrName; public void setFstrName(String fstrName) { System.out.println("setFstrName("+fstrName+")"); FstrName = fstrName; } public int FiAge; public String[] Ffoods = null; private String Fstr1 = "WW"; public void Show() { System.out.println("名字 : "+FstrName); if (Ffoods != null) for (int i=0; i<Ffoods.length; i++) System.out.println("Ffoods["+i+"] : "+Ffoods[i]); } public void Show(String _strName) { System.out.println("名字 : "+_strName); } public void Show(String _strName, int _iAge) { System.out.println("名字 : "+_strName+" , 年龄 : "+_iAge); } public void Show(List _list) { if (_list == null) { System.out.println("输入的_list == null ."); return; } for (int i=0; i<_list.size(); i++) System.out.println("_list["+i+"] : "+_list.get(i)); } private void Show(int _iAge) { System.out.println("年龄 : "+_iAge); } }
2、