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.Integer
		Double doub= new Double(100.0);
		System.out.println(doub.getClass());
		
		
		
		//方法二:Class.forName(); 运行时加载类到jvm
		try{
			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.Boolean
		System.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); //int
		System.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 方法

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值