1 package cn.wh; 2 /** 3 * java.lang.Class 4 * @author 王恒 5 * @time 2016年11月2日 上午10:39:25 6 */ 7 public class RedlectTest { 8 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { 9 Cat cat=new Cat();System.out.println("--------------------------");10 11 Class c1=Class.forName("cn.wh.Cat");12 Class c2=Cat.class;13 Class c3=cat.getClass();14 15 System.out.println(c1.getName());16 System.out.println(c1.getSimpleName());17 //返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口。18 System.out.println(c1.getClasses());19 System.out.println(c1.getPackage());20 System.out.println(c1.getModifiers());21 System.out.println(c1.getInterfaces());22 System.out.println("接口数量 "+c1.getInterfaces().length);23 System.out.println(c1.getSuperclass().getName());24 System.out.println("实例化 "+c1.newInstance());25 }26 }
1 package cn.constructor; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.InvocationTargetException; 5 6 public class TestConstructor { 7 8 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { 9 Class claxx=Class.forName("cn.wh.Cat");10 //查看有几个构造方法11 Constructor[] cs=claxx.getConstructors();12 System.out.println("有public几个构造方法 "+cs.length);13 Constructor[] cs2=claxx.getDeclaredConstructors();14 System.out.println("总共有几个构造方法 "+cs2.length);15 //暴力反射,即没有public修饰的构造方法,使其能够创建构造方法16 //c.setAccessible(true);17 //一个参数18 Constructor c=claxx.getDeclaredConstructor(String.class);19 System.out.println(c.getName()+"---"+c.getModifiers());20 //两个参数21 Constructor c2=claxx.getDeclaredConstructor(String.class,String.class);22 System.out.println(c.getName()+"---"+c.getModifiers());23 //实例化24 Object obj=c.newInstance("");25 System.out.println(obj+"---"+obj.getClass().getSimpleName());26 //Class ... parameterTypes 表示任意类型的可变参数27 }28 }
1 package cn.Field; 2 3 import java.lang.reflect.Field; 4 5 import cn.wh.Cat; 6 7 public class TestField { 8 9 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException {10 Class claxx=Class.forName("cn.wh.Cat");11 Cat cat=(Cat) claxx.newInstance();12 System.out.println("---------------------");13 //获取声明字段数组14 Field[] fs=claxx.getDeclaredFields();15 System.out.println("数组长度为 "+fs.length);16 17 for(Field f:fs){ 18 f.setAccessible(true);19 System.out.println(f.getName()+"--"+f.getModifiers()+"---"+f.get(cat));20 }21 22 //获取单个声明字段23 System.out.println("---------------------获取单个声明字段");24 Field f2=claxx.getDeclaredField("master");25 f2.setAccessible(true);26 System.out.println(f2.getName()+"--"+f2.getModifiers()+"---"+f2.get(cat));27 System.out.println(f2.getName()+"--"+f2.getModifiers()+"---"+f2.get(null));28 //若声明的字段是static 类型,则可以为f2.get(null),否则一律加对象29 }30 }
1 package cn.wh; 2 3 public class Cat extends Animal{ //,Maoke{ 4 //protected int age=50; 5 protected String age="我的年龄50"; 6 public static String master="周老师"; 7 8 public Cat(){ 9 System.out.println("Cat.Cat(111)");10 }11 public Cat(String age,String sname){12 13 }14 15 Cat(String master,String sname,String age1){16 17 };18 19 public Cat(String sname){20 //super(); 写与不写 都存在! 如果写super()必须放在第一行21 super(sname);22 this.sname=sname;23 //super.eat();24 //System.out.println("Cat.Cat(222)"+super.age);25 //System.out.println("Cat.Cat(222)"+age);26 }27 // public float walk(String road){28 // System.out.println("Cat.walk()");29 // return 60f;30 // }31 // 32 float walk(){33 System.out.println("Cat.walk()");34 m1();35 return 60f;36 }37 38 39 public void eat(){40 System.out.println("Cat.eat(111)");41 }42 void m1(){43 44 }45 46 }
1 package cn.wh; 2 3 4 5 public class Animal { 6 7 protected String sname=""; 8 protected int age=80; 9 public static String master="杨老师";10 public Animal(){11 //System.out.println("Animal.Animal(111)");12 sname="";13 }14 15 public Animal(String sname){16 //System.out.println("Animal.Animal(222)");17 }18 19 public void eat(){20 System.out.println("Animal.eat(111)");21 }22 23 public void eat(String foodName){24 System.out.println("Animal.eat(222)"+foodName);25 }26 27 String eat(String foodName,int num){28 System.out.println("Animal.eat(333)"+foodName);29 return "好";30 }31 32 33 public void sleep(){34 35 }36 float walk(){37 System.out.println("Animal.walk()");38 return 30.5f;39 }40 41 42 43 }
1 package cn.method; 2 3 import java.lang.reflect.InvocationTargetException; 4 5 import java.lang.reflect.Method; 6 7 import cn.wh.Cat; 8 9 public class TestMethod {10 11 public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {12 Cat cat=new Cat();13 14 Class claxx=Class.forName("cn.wh.Cat");15 //获取所有方法 包括实例方法,即对象方法 类名.getInstanll();16 Method[] ms=claxx.getDeclaredMethods();17 for(Method m:ms){18 System.out.println(m.getModifiers()+"--"+m.getName()+"--"+m.getParameterCount()+"--"+m.getReturnType());19 }20 21 Method me=claxx.getDeclaredMethod("walk",String.class);22 me.setAccessible(true);23 me.invoke(cat,"貓");24 25 Method me2=claxx.getDeclaredMethod("eat");26 me.setAccessible(true);27 me2.invoke(cat);28 29 claxx.getDeclaredMethod("m1").invoke(null);30 }31 }