java反射

package com.day1;

public class Student {
	
	public int age;
	
	protected String name;
	
    private char sex;
	public Student(String str){
		System.out.println("默认的构造方法 str"+str);
	}
	
	public Student(){
		System.out.println("无参构造");
	}
	
	public Student(char name){
		System.out.println("性别 name"+name);
	}
	
	public Student(String name,int age){
		System.out.println("姓名:name"+name+"年龄:age"+age);
	}
	
	protected Student(Boolean b){
		System.out.println("受保护的构造方法 b"+b);
	}
	private Student(int age){
		System.out.println("私有构造方法:age"+age);
	}
	
	public void geAge(){
		System.out.println("今年 age:"+age);
	}

	@Override
	public String toString() {
		return "Student [age=" + age + ", name=" + name + ", sex=" + sex + "]";
	}
	
	
}



package com.day1;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;

/**
 * 反射
 * @author YangTG
 *
 */
public class Test8 {
     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, 
     SecurityException, InstantiationException, IllegalAccessException,
     IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
    	 /**
    	  * //获取类路径,或者Class对象的方法
    	  */
		Student t = new Student();
		Class cl=t.getClass();
		System.out.println(cl.getName());
		Class cl1 =Student.class;
		System.out.println(cl1.getName());
		Class cl2 = Class.forName("com.day1.Student");
		System.out.println(cl2.getName());
		
		
		//通过反射获取构造方法并使用
		System.out.println("------------------------------------------------");
		/**
		 * 1先加载class对象
		 */
		Class student = Class.forName("com.day1.Student");
		/**
		 * 2.获取所有公有构造方法
		 */
		Constructor[] conArray = student.getConstructors();
		 for(int i=0;i<conArray.length;i++){
			 System.out.println(conArray[i]);
		 }
		 
		 /**
		  * 3.获取所有构造方法,包括私有和受保护的
		  */
		 System.out.println("------------------------------------------------------------");
		 Constructor[] conArray1=student.getDeclaredConstructors();
		  for(int i=0;i<conArray1.length;i++){
				 System.out.println(conArray1[i]);
		 }
		  
		  System.out.println("--------------------------------------------------------------");
		 /**
		  * 4.获取共有的无参构造方法
		  */
		  Constructor conArray2=student.getConstructor(null);
		  System.out.println(conArray2);
		  System.out.println("-------------------------------------------------------------");
		  /**
		   * 调用构造方法
		   */
		  
		 Object obj = conArray2.newInstance();
		 
		 System.out.println("-----------------------------------------");
		 /**
		  * 获取私有构造方法,并且调用
		  */
		 
		 Constructor con = student.getDeclaredConstructor(char.class);
		 con.setAccessible(true);//暴力访问,可以忽略访问修饰符
	     Object obj1 = con.newInstance('女');
	     System.out.println("-----------------------------------------");
	     
	     
	     /**
	      * 获取属性
	      */
	     Field[] field = student.getFields();
	     System.out.println(Arrays.toString(field));
	     
	     //获取所有属性
	     System.out.println("-----------------------------------------获取所有属性");
	     Field[] field1 =student.getDeclaredFields();
	     System.out.println(Arrays.toString(field1));
	     System.out.println("-----------------------------------------获取单个属性");
	     Field field2 = student.getDeclaredField("sex");
	     /**
	      * 反射 类方法的调用
	      */
	     System.out.println(field2.getName());
	     System.out.println("-----------------------------------------获取所有方法");
	     Method[] method = student.getMethods();
	     System.out.println(Arrays.toString(method));
	     //获取某个方法,如果是有参数的话的,方法+参数类型(String.class)
	     Method m= student.getMethod("toString");
	     //反射调用构造方法
	     Object obj3 = student.getConstructor().newInstance();
	     //反射使用toString方法
	     m.invoke(obj3);
     }
     
    
}
package com.day1;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
//  
public class Test9 {
    
	public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException,
InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
		Class cl = Class.forName("com.day1.Student");
		Constructor con = cl.getConstructor();
		//调用无参构造方法,如果是有参构造的话就加上参数类型
		Object obj = con.newInstance();
		//获取Student的属性    
		Field age =cl.getField("age");
		//根据属性的类型给属性设置相应的值
		age.set(obj, 25);
		Field name =cl.getDeclaredField("name");
		name.setAccessible(true);
		name.set(obj, "强世武");
		Field sex=cl.getDeclaredField("sex");
		sex.setAccessible(true);
		sex.set(obj, '男');
		//获取toString方法,如果有参数的话后面加参数类型
		Method method = cl.getMethod("toString");
		//调用toString方法,有参数的话加参数
		Object result = method.invoke(obj);
		//打印输出
		System.out.println(result);
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值