Java反射Class 对象
package com.study.reflect;public class ReflectionDemo01 {public static void main(String []args) {//以下都是程序在《《《运行时》》》》String str="学习java反射机制";//java为任何类都可以拥有类class生成对应的Class对象 //可以使用 class :1) getClass() 方法 2)返回泛型 getSupperClass返回父类对象System.out.println(str.getClass());//class java.lang.String//反射有以下几种方法加载任何类的对象到JVM中,且通过类加载器加载到内存//方法一:使用Class<?> cla= xxx.getClass()方法Integer inte= new Integer(100);System.out.println(inte.getClass());//class java.lang.IntegerDouble doub= new Double(100.0);System.out.println(doub.getClass());//方法二:Class.forName(); 运行时加载类到jvmtry{Class<?> clazz=Class.forName("java.lang.Class");//返回Class<?>泛型System.out.println(clazz);Class<?> cla= Class.forName("java.awt.font.GlyphMetrics");System.out.println(cla);}catch(ClassNotFoundException e) {e.printStackTrace();}//方法三:使用 Class 类名.class 加载System.out.println(Boolean.class); //class java.lang.BooleanSystem.out.println(Thread.class); //class java.lang.Thread//方法四:使用getSupperClass 返回父类对象 Class类中的方法,返回该Class的父类的Class//方法五:--运用primitive wrapper classes的TYPE语法: 基本类型包装类的TYPE,如:Integer.TYPE // 注意:TYPE的使用,只适合原生(基本)数据类型System.out.println(Integer.TYPE); //intSystem.out.println(Double.TYPE); //double///总结:///在使用反射的时候,一般使用前三种方法,最常用的也是Class.forName() ,类名.class 作为加载类的///在程序使用反射中需要有如下的步骤://Step 1: 使用Class.forName(),类名.class 加载类到jvm载入内存//Step 2: 运行时实例化(Instace);实例化类有种实现方式//A:类的实例化不带参数的构造方法 使用Class类的newInstace()方法直接实例化类。是不带参数的构造方法 //B:类的实例化有带参数的构造方法 使用Constructor类的getConstructor()方法传递参数 //使用带参数的构造方法首先需要准备 Class[] constructor的参数类型 //在使用Class getConstructor() 的专属于Constructor对象 //最后使用Object[] 对象的作为Constructor对象 newInstace()传递实参。////////////////////////////备注注意/////////////////////////////////////在这里需要说明的是 只有两个类拥有newInstance()方法,分别是Class类和Constructor类//Class类中的newInstance()方法是不带参数的,而Constructro类中的newInstance()方法是带参数的//需要提供必要的参数。/////////////////////////////////////////////////////////////////////////////////例如:// Class clazz = Class.forName("TestReflection");// Class[] classtype= new Class[]{Integer.class,String.class};// Constructor constr= clazz.getConstructor(classtype);// Object[] obj= new Object[]{100,"反射的使用带参数"};// Object objinstace= constr.newInstace(obj);//System.out.println(objinstace);//Step 3: 运行时调用Method 方法//Step 4: 运行时调用Field 方法}}?