5. java基础 -- 反射与异常

1. 反射

1.1 反射是什么?

反射就是把 Java 类中的各个部分,映射成一个个的 Java 对象,拿到这些对象后可以做一些事情

既然说反射是 Java 类中的各个组成部分,所以说咱们得知道一个类中有哪儿些部分?

例如,一个类有:成员变量,方法,构造方法等信息,利用反射技术咱们可以把这些组成部分映射成一个个对象。

1.2 反射能干什么?

  • 拿到映射后的构造方法,可以用它来生成对象;
  • 拿到映射后的方法,可以调用它来执行对应的方法;
  • 拿到映射后的字段,可以用它来获取或改变对应字段的值;

一般来说反射是用来做框架的,或者说可以做一些抽象度比较高的底层代码,反射在日常的开发中用到的不多,但是咱们还必须搞懂它,因为搞懂了反射以后,可以帮助咱们理解框架的一些原理。

所以说有一句很经典的话:反射是框架设计的灵魂。现在说完这个可能还不太能理解,不急,等下说完一个快速入门的例子后,应该会稍微有点感觉

1.3 怎么得到想反射的类

刚才已经说过,反射是对一个类进行解剖,想解剖一个东西,前提是首先你得拿到这个东西,那么怎么得到咱们想解剖的类呢?

首先大家要明白一点,咱们写的代码是存储在后缀名是 .java 的文件里的,但是它会被编译,最终真正去执行的是编译后的 .class文件。

Java是面向对象的语言,一切皆对象,所以java认为 这些编译后的 class文件,这种事物也是一种对象,它也给抽象成了一种类,这个类就是Class,在Class类中,有一个方法forName(String className); 而且是一个静态的方法,这样咱们就可以得到想反射的类了

在这里插入图片描述
到这里,看Class clazz = Class.forName(“com.cj.test.Person”);这个应该有点感觉了吧

Class.forName(“com.cj.test.Person”);因为这个方法里接收的是个字符串,字符串的话,我们就可以写在配置文件里,然后利用反射生成我们需要的对象,这才是我们想要的。很多框架里都有类似的配置

1.4 反射中常用的方法

反射无参的构造函数

在这里插入图片描述
在这里插入图片描述
可以看到 默认的无参构造方法执行了

从上边的例子看出,要想反射,首先第一步就是得到类的字节码

所以简单说一下得到类的字节码的几种方式

(1)、Class.forName(“com.cj.test.Person”); 这就是上边我们用的方式

(2)、对象.getClass();

(3)、类名.class;

在这里插入图片描述

反射“一个参数”的构造函数

在这里插入图片描述

反射“多个参数”的构造函数

在这里插入图片描述

反射“私有”的构造函数

这就是反射的厉害之处,在别的类中,都可以调用想要获取的类的私有方法
在这里插入图片描述
注意:在反射私有的构造函数时,用普通的clazz.getConstructor()会报错,因为它是私有的,所以提供了专门反射私有构造函数的方法

clazz.getDeclaredConstructor(int.class);//读取私有的构造函数,用这个方法读取完还需要设置一下暴力反射才可以

c.setAccessible(true);//暴力反射

反射得到类中所有的构造函数

在这里插入图片描述

反射类中的方法

下面是Person类以及其方法

package com.cj.test;
 
import java.util.Date;
 
public class Person {
   
	
	public Person(){
   
		System.out.println("默认的无参构造方法执行了");
	}
 
	public Person(String name){
   
		System.out.println("姓名:"+name);
	}
	
	public Person(String name,int age){
   
		System.out.println(name+"="+age);
	}
	
	private Person(int age){
   
		System.out.println("年龄:"+age);
	}
	
	public void m1() {
   
		System.out.println("m1");
	}
	
	public void m2(String name) {
   
		System.out.println(name);
	}
	
	public String m3(String name,int age) {
   
		System.out.println
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值