栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

反射(代码演示)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

反射(代码演示)

反射演示实例
  • 父类Person
  • 接口Study
  • 子类Student
    • 1、获取属性
      • 运行结果:
    • 2、获取方法
      • 运行结果:
    • 3、获取构造方法
      • 运行结果:
    • 4、获取其他
      • 运行结果
    • 5、通过反射实例化对象,调用对象方法
      • 运行结果
  • 详细方法参考:

父类Person
package reflex_pac;

public class Person {
	public String name;//姓名
	public int age;
	public Person(){}
	public Person(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String showInfo(){
		return "name="+name+",age="+age;
	}
}

接口Study
package reflex_pac;

public interface Study {
//仅为展示没有抽象方法
}

子类Student
package reflex_pac;

public class Student extends Person implements Study {
	public String className;//班级
	private String address;//住址
	
	public Student(){}
	public Student(String name,int age,String className,String address){
		super(name,age);
		this.address=address;
		this.className=className;
	}
	public Student(String className){
		this.className=className;
	}
	public String toString(){
		return "姓名:"+name+",年龄:"+age+",班级:"+className+",住址:"+
	address;
	}
	public String getAddress(){
		return address;
	}
	public void setAddress(String address){
		this.address=address;
	}
}

1、获取属性

import java.lang.reflect.Field;//不能省略
Field[] fields=stu.getFields();//获取对象的所有公有属性
Field[] declaredFields=stu.getDeclaredFields();//获取对象所有属性,不包括继承的

package reflex_pac;

import java.lang.reflect.Field;

public class TestAttributes {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Class stu=null;
		try{
			stu=Class.forName("reflex_pac.Student");
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
		//获取对象的所有公有属性
		Field[] fields=stu.getFields();
		for(Field f:fields){
			System.out.println(f);
		}
		System.out.println("--------------------------------");
		
		//获取对象所有属性,不包括继承的
		Field[] declaredFields=stu.getDeclaredFields();
		for(Field ff:declaredFields){
			System.out.println(ff);
		}
	}

}

运行结果:
public java.lang.String reflex_pac.Student.className
public java.lang.String reflex_pac.Person.name
public int reflex_pac.Person.age
--------------------------------
public java.lang.String reflex_pac.Student.className
private java.lang.String reflex_pac.Student.address

2、获取方法

import java.lang.reflect.Method;//不能省略
Method[] methods = stu.getMethods();// 获取对象的所有公共方法
Method[] declaredMethods = stu.getDeclaredMethods(); // 获取对象所有方法,但不包含继承的

package reflex_pac;

import java.lang.reflect.Method;//不能省略

public class TestMethod {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Class stu=null;
		try{
			stu=Class.forName("reflex_pac.Student");
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}
		
		// 获取对象的所有公共方法
        Method[] methods = stu.getMethods();
        for (Method m : methods) {
            System.out.println(m);
        }
        System.out.println("---------------------");
        // 获取对象所有方法,但不包含继承的
        Method[] declaredMethods = stu.getDeclaredMethods();
        for (Method ms : declaredMethods) {
            System.out.println(ms);
        }
	}

}

运行结果:
public java.lang.String reflex_pac.Student.toString()
public java.lang.String reflex_pac.Student.getAddress()
public void reflex_pac.Student.setAddress(java.lang.String)
public java.lang.String reflex_pac.Person.showInfo()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
---------------------
public java.lang.String reflex_pac.Student.toString()
public java.lang.String reflex_pac.Student.getAddress()
public void reflex_pac.Student.setAddress(java.lang.String)

3、获取构造方法
package reflex_pac;

import java.lang.reflect.Constructor;

public class TestConstructor {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		    Class stu = null;
	        try {
	            stu = Class.forName("reflex_pac.Student");
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        }
	        // 获取对象所有的公共构造方法
	        Constructor[] constructors = stu.getConstructors();
	        for (Constructor c : constructors) {
	            System.out.println(c);
	        }
	        System.out.println("---------------------");
	        // 获取对象所有的构造方法
	        Constructor[] declaredConstructors = stu.getDeclaredConstructors();
	        for (Constructor con : declaredConstructors) {
	            System.out.println(con);
	        }

	}

}

运行结果:
public reflex_pac.Student(java.lang.String)
public reflex_pac.Student(java.lang.String,int,java.lang.String,java.lang.String)
public reflex_pac.Student()
---------------------
public reflex_pac.Student(java.lang.String)
public reflex_pac.Student(java.lang.String,int,java.lang.String,java.lang.String)
public reflex_pac.Student()

4、获取其他
package reflex_pac;

public class TestOther {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 Class stu = null;
	        try {
	            stu = Class.forName("reflex_pac.Student");
	        } catch (ClassNotFoundException e) {
	            e.printStackTrace();
	        }
	        System.out.println(stu.getName());//获取对象全限定名称
	        System.out.println(stu.getPackage());// 获取包名
	        Class[] interfaces = stu.getInterfaces();//获取该类实现的所有接口
	        for (Class in : interfaces) {
	            System.out.println(in);
	        }

	}

}

运行结果
reflex_pac.Student
package reflex_pac
interface reflex_pac.Study
5、通过反射实例化对象,调用对象方法
package reflex_pac;

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

public class TestReflect {
	@SuppressWarnings("unchecked")	

	public static void main(String[] args) {
		
		 try {
	            //获取class对象
	            Class c = Class.forName("reflex_pac.Student");
	            Student stu1 = (Student) c.newInstance();
	 
	            // 第一种方法,实例化默认构造方法,调用set赋值
	            stu1.setAddress("山东泰安");
	            System.out.println(stu1);
	 
	            // 第二种方法 取得全部的构造函数 使用构造函数赋值
	            Constructor constructor = (Constructor) c.getConstructor(String.class, int.class, String.class, String.class);
	            Student stu2 = (Student) constructor.newInstance("梦蕊", 18, "5班", "济南");
	            System.out.println(stu2);
	 
	            
	            Method show = c.getMethod("showInfo");//获取showInfo()方法
	            Object object = show.invoke(stu2);//调用showInfo()方法
	 
	            System.out.println(object);
	 
	        } catch (Exception e) {
	 
	            e.printStackTrace();
	        }	 
	}
}

运行结果
姓名:null,年龄:0,班级:null,住址:山东泰安
姓名:梦蕊,年龄:18,班级:5班,住址:济南
name=梦蕊,age=18

详细方法参考:

反射演示实例

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号