![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.vince; 2 3 import org.junit.Test; 4 5 public class ReflectionDemo { 6 7 8 @Test 9 public void test1(){ 10 //通过对象的getclass()方法 11 Dog dog = new Dog("wangwang",4,"白色"); 12 Class aClass = dog.getClass(); 13 14 //通过类.class 15 Class dogClass = Dog.class; 16 17 //通过Class.forName方法 18 try { 19 Class aClass1 = Class.forName("com.vince.Dog"); 20 } catch (ClassNotFoundException e) { 21 e.printStackTrace(); 22 } 23 24 } 25 26 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.vince; 2 3 import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer; 4 import org.junit.Test; 5 6 import java.lang.reflect.*; 7 8 /** 9 * Created by vince on 2017/6/9. 10 */ 11 public class ReflectionDemo { 12 13 14 @Test 15 public void test5(){ 16 Dog dog = new Dog("wangwang",4,"白色"); 17 Class<Dog> dogClass = Dog.class; 18 //获取类的包名 19 Package aPackage = dogClass.getPackage(); 20 //System.out.println(aPackage.getName()); 21 //获取公共的方法,包括继承的公有方法 22 Method[] methods = dogClass.getMethods(); 23 for (int i = 0; i < methods.length; i++) { 24 System.out.println(methods[i]); 25 if (methods[i].getName().equals("toString")){ 26 try { 27 String s = (String)methods[i].invoke(dog); 28 System.out.println(s); 29 } catch (IllegalAccessException e) { 30 e.printStackTrace(); 31 } catch (InvocationTargetException e) { 32 e.printStackTrace(); 33 } 34 } 35 } 36 System.out.println("---------------"); 37 //访问私有方法,获取到本类中定义的所有方法(不包括父类) 38 Method[] declaredMethods = dogClass.getDeclaredMethods(); 39 for (int i = 0; i < declaredMethods.length; i++) { 40 System.out.println(declaredMethods[i]); 41 if (declaredMethods[i].getName().equals("set")){ 42 //设置 私有方法可以被访问(去除访问修饰符的检查) 43 declaredMethods[i].setAccessible(true); 44 try { 45 declaredMethods[i].invoke(dog); 46 } catch (IllegalAccessException e) { 47 e.printStackTrace(); 48 } catch (InvocationTargetException e) { 49 e.printStackTrace(); 50 } 51 } 52 } 53 } 54 55 //获取所有的属性 56 @Test 57 public void test4(){ 58 59 Class<Dog> dogClass = Dog.class; 60 //获取非私有属性 61 Field[] fields = dogClass.getFields(); 62 //System.out.println(fields.length); 63 64 //获取所有属性(包括私有属性) 65 Field[] declaredFields = dogClass.getDeclaredFields(); 66 //System.out.println(declaredFields.length); 67 for (int i = 0; i < declaredFields.length; i++) { 68 int modifiers = declaredFields[i].getModifiers(); 69 System.out.println(Modifier.toString(modifiers)+ " "+declaredFields[i].getType()+" "+declaredFields[i].getName()); 70 } 71 } 72 73 //获取所有构造方法 74 @Test 75 public void test3(){ 76 Class<Dog> dogClass = Dog.class; 77 Constructor<?>[] constructors = dogClass.getConstructors(); 78 for (int i = 0; i < constructors.length; i++) { 79 System.out.println(constructors[i].getName()); 80 System.out.println(constructors[i].getParameterCount()); 81 82 } 83 try { 84 //获取一个指定的构造方法 85 Constructor<Dog> constructor = dogClass.getConstructor(String.class, int.class, String.class); 86 //调用带参数的构造器来实例化对象 87 Dog dog = constructor.newInstance("小白", 5, "白色"); 88 } catch (NoSuchMethodException e) { 89 e.printStackTrace(); 90 } catch (IllegalAccessException e) { 91 e.printStackTrace(); 92 } catch (InstantiationException e) { 93 e.printStackTrace(); 94 } catch (InvocationTargetException e) { 95 e.printStackTrace(); 96 } 97 } 98 /** 99 * 通过反射来实例化对象 100 */ 101 public void test2(){ 102 Class<Dog> dogClass = Dog.class; 103 try { 104 //通过Class对象实例化类对象,调用了默认无参的构造方法 105 Dog dog = (Dog) dogClass.newInstance(); 106 } catch (InstantiationException e) { 107 e.printStackTrace(); 108 } catch (IllegalAccessException e) { 109 e.printStackTrace(); 110 } 111 } 112 113 /** 114 * 获取Class对象的三种形式 115 */ 116 @Test 117 public void test1(){ 118 //通过对象的getClass()方法 119 Dog dog = new Dog("wangwang",4,"白色"); 120 Class aClass = dog.getClass(); 121 122 //通过类.class 123 Class dogClass = Dog.class; 124 125 //通过Class.forName方法 126 try { 127 Class aClass1 = Class.forName("com.vince.Dog"); 128 } catch (ClassNotFoundException e) { 129 e.printStackTrace(); 130 } 131 132 } 133 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 package com.vince; 2 3 /** 4 * Created by vince on 2017/6/12. 5 */ 6 public class Dog { 7 public int type; 8 private String name; 9 private int age; 10 private String color; 11 12 private void set(){ 13 System.out.println("set"); 14 } 15 16 protected void get(){ 17 System.out.println("get"); 18 } 19 public String getName() { 20 return name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 public int getAge() { 28 return age; 29 } 30 31 public void setAge(int age) { 32 this.age = age; 33 } 34 35 public String getColor() { 36 return color; 37 } 38 39 public void setColor(String color) { 40 this.color = color; 41 } 42 43 @Override 44 public String toString() { 45 return "Dog{" + 46 "name='" + name + '\'' + 47 ", age=" + age + 48 ", color='" + color + '\'' + 49 '}'; 50 } 51 52 public Dog() { 53 } 54 55 public Dog(String name, int age, String color) { 56 this.name = name; 57 this.age = age; 58 this.color = color; 59 } 60 }