Java进阶-----反射

Java进阶-----反射

基础概念

反射:框架设计的灵魂

什么是反射

将类的各个组成部分封装成其他对象,这就是反射机制

Java代码在计算机中经历的三个阶段

在这里插入图片描述

反射的好处

1、在程序的运行过程中,操作这些对象
在这里插入图片描述

2、可以解耦(降低程序的耦合程度),提高程序的可扩展性

反射中API的操作

获取class对象的方式(3种)

源码阶段:Class.forName(“全类名”):将字节码文件加载进内存,返回class对象

多用于配置文件,将类名定义在配置文件中,读取文件,返回class对象

class类阶段:类名.class :通过类名的属性class获取

多用于参数传递

Runtime运行时阶段:对象.getClass()

多用于对象的获取字节码文件

使用class对象

class对象的功能

1、获取功能:
(1)获取成员变量
(2)获取构造方法
(3)获取成员方法
(4)获取类名
在这里插入图片描述

反射的基本使用

1、获得Class:主要有三种方法

(1)通过class类的静态方法:Class.forName(String className)(最常用)

(2)任何数据类型(包括基本的数据类型)都有一个“静态”的class属性:类名.class

(3)对象.getClass

 
public class Fanshe {
	public static void main(String[] args) {
		
		//通过class类的静态方法:forName(String className)(最常用)
		try {
			Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
			System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	    //任何数据类型(包括基本的数据类型)都有一个“静态”的class属性
		Class stuClass2 = Student.class;
		System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个

		//对象.getClass  
		Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
		Class stuClass = stu1.getClass();//获取Class对象
		System.out.println(stuClass.getName());
		
	}
}
2、判断是否为某个类的示例:

一般的,我们使用instanceof 关键字来判断是否为某个类的实例。同时我们也可以借助反射中Class对象的isInstance()方法来判断时候为某个类的实例,他是一个native方法。

public native boolean isInstance(Object obj);

反射的用途

1、反编译:.class–>.java

2、通过反射机制访问java对象的属性,方法,构造方法等

3、当我们在使用IDE,比如Ecplise时,当我们输入一个对象或者类,并想调用他的属性和方法是,一按点号,编译器就会自动列出他的属性或者方法,这里就是用到反射。

4、反射最重要的用途就是开发各种通用框架。比如很多框架(Spring)都是配置化的(比如通过XML文件配置Bean),为了保证框架的通用性,他们可能需要根据配置文件加载不同的类或者对象,调用不同的方法,这个时候就必须使用到反射了,运行时动态加载需要的加载的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值