java之反射-简单例子

User.java测试类代码:

package com.test;
public class User {
	private int id;//id号
	private String name; //用户名
	private String password;//密码
	private User user;
		
	public User() {
		super();
	}
	public User(int id, String name, String password) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
	}
	//构造器和相应的set,get方法
	public boolean checkName(String name){
		return false;
	}
	public User getName(String name){
		user=new User(1,name,"123");
		return user;
	}
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password + ", user=" + user + "]";
	}
}

UserTest.java反射测试实例代码:

package com.exercise.corejava.e12;
//反射
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class UserTest {
	public static void main(String[] args){
	try {
	/*
		反射三种方法:
		1.类名.class	
		Class<User> c1=User.class;
		2.对象.getClass()	
		User ls=new User();
		Class<? extends User> c2=ls.getClass();	
	*/
		//3.Class.forName("全限定名");
		Class<?> c11 = Class.forName("com.test.User");
		//调用无参构造器
		Object ins=c11.newInstance();
	
		System.out.println("--------------获取属性------------------------");
		//获取某个私有属性,
		Field field = c11.getDeclaredField("name");
		//设置私有属性可见性
		field.setAccessible(true);
		field.set(ins, "zhangsan");
		System.out.println(field);
		
		//获取所有的属性
		Field[] fields = c11.getDeclaredFields();
		for(Field f:fields){
			//获取修饰符
			int modifiers = f.getModifiers();
			//属性类型
			Class<?> type = f.getType();
			//属性名
			String name = f.getName();
		
			System.out.println("修饰符:"+modifiers+"; 属性类型: "+type+"; 属性名:"+name);
		}
	
		System.out.println("----------------获取方法----------------------");
		//获取所有方法
		Method[] methods = c11.getDeclaredMethods();
		for (Method m : methods) {
			//获取修饰符
			int modifiers = m.getModifiers();
			//返回值类型
			Class<?> returnType = m.getReturnType();
			//方法名
			String name = m.getName();
			//参数类型
			Class<?>[] parameterTypes = m.getParameterTypes();
		
			System.out.println("修饰符:"+modifiers+"; 返回值类型:"+returnType+"; 方法名:"+name+"(参数:"+parameterTypes+");参数个数:"+parameterTypes.length);
		}
	
		Method getname = c11.getDeclaredMethod("getName",String.class);
		Object invoke = getname.invoke(ins, "Lucy");
		System.out.println(invoke);
	
		System.out.println("-----------------获取构造器---------------------");
		//获取构造器
		Constructor<?>[] constructors = c11.getConstructors();
		for (Constructor<?> c : constructors) {
			//获取修饰符
			int modifiers = c.getModifiers();
			//构造器名
			String name = c.getName();
			//参数列表
			Class<?>[] parameterTypes = c.getParameterTypes();
		
			System.out.println("修饰符:"+modifiers+"; 构造器名:"+name+"(参数:"+parameterTypes+");参数个数:"+parameterTypes.length);
		}
	
		Constructor<?> constructor = c11.getDeclaredConstructor(int.class,String.class,String.class);
		Object newuser = constructor.newInstance(3,"wangwu","123465");
		System.out.println(newuser);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值