Java中的反射——Class类对目标类对象构造方法,属性和普通方法获取,调查与使用

目录

 

一、编写一个目标类(Student类)

二、构造方法的获取,调查与使用

(1)获取

a.无declared修饰

b.declared修饰

(2)调查

a、构造方法的归属类

b、构造方法的修饰符

c、构造方法的名称

d、构造方法的参数类型

(3)使用

三、普通方法的获取,调查与使用

(1)获取

a.无declared修饰

b.declared修饰

(2)调查

a、普通方法的归属类

b、普通方法的修饰符

c、普通方法的名称

d、普通方法的参数类型

e、普通方法的返回值类型

(3)使用

四、属性的获取,调查与使用

(1)获取

a.无declared修饰

b.declared修饰

(2)调查

a、属性的归属类

b、属性的修饰符

c、属性的数据类型或类

d、属性的名称

(3)使用


一、编写一个目标类(Student类)

package Test;

public class Student {	
	
	public String name;
	
	private String id;
	
	public Student() {
		
	}
	
	private Student(String name) {
		this.name = name;
	}
	
	private int doHomework(int b,String str) {
		System.out.println("正在做作业......");
		return b;
	}
	
	public void sleep() {
		System.out.println("正在睡觉......");
	}
}

二、构造方法的获取,调查与使用

(1)获取

a.无declared修饰

getConstrutors()方法返回该Class对象表示类包含的所有public构造方法所对应Constructor对象数组。       

getConstrutor(Class<?>... parameterTypes)方法用于返回与该Class对象表示类中参数列表相匹配的public构造函数(不含继承)对应的Constructor对象。

package Test;

import java.lang.reflect.Constructor;

public class Test {

	public static void main(String[] args) {
		// 反射是一种新的操作类中属性,构造方法和普通方法的机制
		Class clazz = null;
		clazz = Student.class;
		Constructor constructor = null;
		try {
			constructor = clazz.getConstructor();// 获取无参构造方法
			System.out.println(constructor.getName());
			
			constructor = clazz.getConstructor(String.class);// 获取有参构造方法
			System.out.println(constructor.getName());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

 运行结果:

由开头的定义的Student类得,有参构造方法为private修饰而getConstrutors()方法只能获取public修饰的方法,所以系统报错

b.declared修饰

getDeclaredConstructors() 方法用于返回一个该Class对象表示类中声明的所有构造方法(不区分访问权限)对应的Constructor对象数组。

getDeclaredConstructor(Class<?>... parameterTypes)用于返回与该Class对象表示类中定义的形参类型相匹配的构造方法(不区分访问权限)的Constructor对象。

package Test;

import java.lang.reflect.Constructor;

public class Test {

	public static void main(String[] args) {
		// 反射是一种新的操作类中属性,构造方法和普通方法的机制
		Class clazz = null;
		clazz = Student.class;
		Constructor constructor = null;
		try {
			constructor = clazz.getDeclaredConstructor();// 获取无参构造方法
			System.out.println(constructor.getName());
			
			constructor = clazz.getDeclaredConstructor(String.class);// 获取有参构造方法
			System.out.println(constructor.getName());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

 

因为declared声明的方法不区分权限,因此两个构造方法都能被获取。 

(2)调查

a、构造方法的归属类

getDeclaringClass()方法用于返回声明Constructor对象对应构造方法的类的Class对象。

package Test;

import java.lang.reflect.Constructor;

public class Test {

	public static void main(String[] args) {
		// 反射是一种新的操作类中属性,构造方法和普通方法的机制
		Class clazz = null;
		clazz = Student.class;
		Constructor constructor = null;
		try {
			constructor = clazz.getDeclaredConstructor();// 获取无参构造方法
			clazz = constructor.getDeclaringClass();//获取归属类
			System.out.println(clazz.getName());
			
			constructor = clazz.getDeclaredConstructor(String.class);// 获取有参构造方法
			clazz = constructor.getDeclaringClass();//获取归属类
			System.out.println(clazz.getName());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

运行结果 :

b、构造方法的修饰符

getModifiers()方法用于以整数形式返回Constructor对象表示的构造函数的修饰符。后期可用toString()方法将其转换为字符串

package Test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;

public class Test {

	public static void main(String[] args) {
		// 反射是一种新的操作类中属性,构造方法和普通方法的机制
		Class clazz = null;
		clazz = Student.class;
		Constructor constructor = null;
		int result = 0;
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值