反射的思想

package com.yanshu.fanshe;


import java.lang.reflect.Field;
import java.lang.reflect.Method;


import com.alibaba.fastjson.JSON;
import com.yanshu.pojo.Person;


public class Fanshe1 {


/**
* 利用反射简单的调用属性和方法
* @throws Exception
*/
public static void FiledAndMethod() throws Exception{
Class clazz = Person.class;


// 1.创建clazz对应的运行时类Person类
Person p = (Person) clazz.newInstance();
System.out.println(p);
// 2.通过反射调用运行时类的字段的属性
/*
* Field f1=clazz.getField("name"); f1.set(p, "张三丰");
* System.out.println(p);
*/
// 2.1
Field f2 = clazz.getDeclaredField("name");
f2.setAccessible(true);
f2.set(p, "20");
System.out.println(p);


// 3.通过反射调用方法
Method m1 = clazz.getMethod("show");
m1.invoke(p);
Method m2 = clazz.getMethod("address", String.class);
m2.invoke(p, "河南");


}
/**
* java.lang.Class:是反射的源头
* 通过反射可以调用:属性 方法 构造器
* 正常的方法:引入需要的包类名称,通过new实例化,取得实例对象
* 反射是方法:1.实例化对象,2.getClass()方法,3得到完整的包名

* 反射的原理:
* 1.每一个运行时类只加载一次
* 2.有Class的实例化后,可以进行哪些操作
*  1).创建对应的运行时类的对象
*  2).获取对应的运行时类的完整结构(属性,方法,构造器,内部类,父类,所在的包,异常,注解)
* 3).调用对应的运行时类的指定的结构(属性,方法,构造器)
* 4).反射的应用,动态代理
* @throws Exception 
*/
public static void clazz() throws Exception
{
//如何获取Class的实例(3种)
//1.调用运行时类本身的.class属性
Class clazz1=Person.class;
System.out.println(clazz1.getName());
Class clazz2=String.class;
System.out.println(clazz2.getName());
Class clazz3=Integer.class;
System.out.println(clazz3.getName());
//2.通过运行时类的对象获取
Person p=new Person();
Class clazz4=p.getClass();
System.out.println(clazz4.getName());
//3.通过Class的静态方法获取
String className="com.yanshu.pojo.Person";
Class clazz5=Class.forName(className);
System.out.println(clazz5);





}



public static void main(String[] args) throws Exception {
clazz();
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值