1.什么是反射? 
反射是一种机制,利用反射机制动态的实例化对象、读写属性、调用方法、构造函数。
2.如何得到类对象 
     一切反射相关的代码都从获得类对象开始
 3种获取方式: 
      2.1 类名.class;
      2.2 对象名.getClass();
      2.3 Class.forName(全限定名/全路径名) // 传统方式
		 Hello hello = new Hello();
		 System.out.println("hello=" + hello);
		
		 //反射方式
		 Class cls = Class.forName("com.zking.reflect.entity.Hello");
		 Object hello1 = cls.newInstance();
	    System.out.println(hello1);
		// 1)一切与反射相关的操作都从获取类对象开始(3)
		 Class cls= Hello.class;
		// 2)对象名.getClass()
		// 3)Class.forName(类的全路经名/权限定名)
		
		 Class cls= Class.forName("com.zking.reflect.entity.Hello");
		  System.out.println("获取类的全路径名="+cls.getName());
		  System.out.println("获取类的简单的类名="+cls.getSimpleName());
		 System.out.println("获取访问修饰符="+cls.getModifiers());
		  System.out.println("获取包名="+cls.getPackage()); 
3.根据类得到类名(全限定名/全路径名) 
    1)cName.getName();            -->获取全限定名
     2)cName.getSimpleName();         -->获取类名
     3)cName.getPackage();             -->获取包名 4.根据类得到类的属性
     Field field=cla.getField(“属性名”);
    field.getName();            -->获取属性名            
     filed.getType();            -->获取属性类型        
     field.getModifiers();            -->获取属性访问修饰符    
     field.set(Object,Object);         -->设置属性值,参数1:要设置属性所在对象;参数2:要设置的值;    
     field.get(Object);            -->获取属性值,参数:要获取属性值的对象                
     field.getDeclaredField(“属性名”);    -->获取单个属性(私有、公有、受保护、默认、静态)    
     field.getDeclaredFields();        -->获取所有属性(私有、公有、受保护、默认、静态)5.根据类得到类的方法 
  //无参无返回、无参有参会、有参无返回、有参有返回
     cla.getMethod();            -->获取单个公有方法
     cla.getDeclaredMethod();        -->获取当个方法(包括私有、受保护、默认、公有)
     cla.getMethods();            -->获取所有公有方法
     cla.getDeclaredMethods();        -->获取所有的方法(包括私有、受保护、默认、公有)// 获取类对象
		Class cls = Student.class;
		// 反射机制实例化对象
		Student stu = (Student) cls.newInstance();
		 4.读取属性(Field)
		 1)获取单个公共的属性
		 Field field=cls.getField("name");
		 2)获取单个公共的,私有的,受保护的,最终的..属性
		 只要是有公开的就是用getDeclaredField("age");
		 Field field = cls.getDeclaredField("sid");
		 3)获取所有的公共的属性
		 Field[] fields=cls.getFields();
		 Field[] fields=cls.getDeclaredFields();
		 //4)获取所有公共的,私有的,受保护的,最终的..属性
		 for (Field field : fields) {
		 System.out.println("获取属性名="+cls.getName());
		 System.out.println("获取属性访问修饰符="+cls.getModifiers());
		 System.out.println("获取属性类型="+cls.getPackage());
		 } 
6.根据类得到类的构造方法 
 cla.getConstrutor();            -->获取单个公有构造方法
     cla.getDeclaredConstrutor();        -->获取单个构造方法(包括私有、受保护、默认、公有)
     cla.getConstrutors();            -->获取所有的公有构造方法
     cla.getDeclaredConstrutors();        -->获取所有的构造方法(包括私有、受保护、默认、公有)6.获取方法构造函数(Method)
//		 有参有返,有参有返,无参有返,无参无返
//		 1)获取单个公共的方法
		 Method method=cls.getMethod("hello", null);

		// 2)获取公共的,私有的,受保护的,最终的..方法
		 Method method= cls.getDeclaredMethod("add", Integer.class,Integer.class);
		 //3)获取所有的公共的方法
		 Method[] methods= cls.getMethods();

		// 4)获取所有的公告的,私有的,受保护的,最终的..等等方法
		 Method[] methods=cls.getDeclaredMethods();
		 for (Method method2 : methods) {
		 System.out.println("=======================");
		 System.out.println("获取方法名"+method.getName());
		 System.out.println("获取访问修饰符"+method.getModifiers());
		 System.out.println("获取访问数量"+method.getParameterCount());
		 System.out.println("获取访问类型"+method.getReturnType());
		 }
		// 5)调用方法
		 Method method = cls.getMethod("add", Integer.class,Integer.class);
		 // 执行方法
		 Object returnvalues = method.invoke(stu, 10 ,20);
		 System.out.println(returnvalues);

		// 6)调用构造函数
		Constructor cons = cls.getConstructor(null);
		cons.setAccessible(true);
		cons.newInstance(20); 
7.根据类得到类的实现接口列表 
  Class[] interface=cla.getInterfaces();    -->获取类对象中所有实现接口列表
Class cls = Person.class;
    Class field = cls.getSuperclass();
		// 遍历、
		Class[] field1 = cls.getInterfaces();
		for (Class class1 : field1) {
			System.out.println(class1.getName());
		}

		System.out.println(field.getName()); 
8.作业
 1)新建实体类Person
 2)三个字段:pid pname psex
 3)要求该类有父类,并且实现多接口
 4)通过反射得到该类所有的属性和方法,父类和实现接口public class Person extends Student implements UserDao,RoleDao
    pid
    pname
    psexpublic class Student
    sname
    sid
    ....public interface UserDao
    ...
 public interface RoleDao
    ...