Java反射(获取有参成员方法+理解)

一、获取有参成员方法(ReflectDemo1.java)

1.获取字节码对象

2.getMethod("", )使用,无返回值,有一参,有两参

   getDeclaredMethod("", ),访问私有要有*.setAccessible(true);//暴力访问

3.有返回值的用法

ReflectDemo1.java

package com.java.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectDemo1 {

	public static void main(String[] args) throws Exception {
		//获取字节码对象
		Class c = Class.forName("com.java.test.Student");
		
		Constructor con = c.getConstructor();
		Object obj = con.newInstance();
		
		Method m1 = c.getMethod("show");//无参方法调用
		m1.invoke(obj);
		
		Method m2 =c.getMethod("method", String.class);//带一个参的方法调用
		m2.invoke(obj,"Hello");//传递一个参数
		
		Method m3 = c.getMethod("getString", String.class,int.class);//带二个参的方法调用
//		m3.invoke(obj, "张三",19);
//		String s = (String)m3.invoke(obj, "张三",19);
		Object objString = m3.invoke(obj, "张三",19);
		System.out.println(objString);
		
//		Method m4 = c.getDeclaredMethod("", )//调用私有方法
//		m4.setAccessible(true);//暴力访问
	}

}

 Student.java

package com.java.test;

public class Student {
	private String name;
	private int age;
	public int num;
	
	public Student() {
		super();
	}
	
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	public Student(String name, int age, int num) {
		super();
		this.name = name;
		this.age = age;
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}
	
	public void show(){
		System.out.println("show");
	}
	
	public void method(String s) {
		System.out.println("method:"+s);
	}
	public String getString(String name,int age) {
//		System.out.println(name+"的年龄"+age);
		return name+"的年龄"+age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + ", num=" + num + "]";
	}
	
}

 

二、对反射的简单理解和注意点

        随着写代码越来越多,发现反射无非是一个反过程,就拿上面这个调用成员方法来说,首先我们一定要做的就是获取字节码对象,获取之后得到构造方法,然后调用构造方法,似曾相识的new一个对象也是如此。然后得到成员方法,传递参数。

        对于反射来说私有方法也可以取用,得到后要用*.setAccessible(true);进行暴力访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值