通过Relect反射方法创建对象,获得对象的方法,输出对象信息

package reflects;

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

import io.Person;

//通过Relect反射方法创建对象,输出对象信息
public class ReflectDemo1 {

    public static void main(String[] args) {
        try {
            // 1、获得目标对象的类型
            Class cl = Class.forName("io.Person");
            // 2、获得对象的构造方法
            Constructor ct = cl.getDeclaredConstructor();
            // 3、创建对象
            Person p = (Person) ct.newInstance();
            // 4、获得对象的属性,赋值
            Field name = cl.getDeclaredField("name");
            Field age = cl.getDeclaredField("age");
            Field gender = cl.getDeclaredField("gender");
            // 5、设置属性访问权限,无论属性的访问修饰符是什么级别true表示可见
            name.setAccessible(true);
            age.setAccessible(true);
            gender.setAccessible(true);
            // 6、设置属性的值
            name.set(p, "Tom");
            age.set(p, 20);
            gender.set(p, "男");
            // 7、获得对象的方法
            Method mt = cl.getDeclaredMethod("toShow", String.class);
            // 8、通过反射调用p对象的toshow方法
            String st = (String) mt.invoke(p, "Refect反射");
            System.out.println(st);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
**********************************************************************************************
package io;

import java.io.Serializable;

//人类Person实现Serializable接口,实现序列化
public class Person implements Serializable {
    private String name;// 姓名
    private Integer age;// 年龄
    private String gender;// 性别

    public Person() {
    }

    public Person(String name, Integer age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

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

    public String toShow(String st) {
        return "通过" + st + "方法调用输出:Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((gender == null) ? 0 : gender.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Person other = (Person) obj;
        if (age != other.age)
            return false;
        if (gender == null) {
            if (other.gender != null)
                return false;
        } else if (!gender.equals(other.gender))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

}
时间: 2024-10-10 02:34:01

通过Relect反射方法创建对象,获得对象的方法,输出对象信息的相关文章

jsp隐式对象 (输入/输出对象:request) (二)

jsp隐式对象 (输入/输出对象) request        response          out 1:request对象 用户输入的数据用来存放在Request对象中,用javax.servlet.HttpServletRequest执行 *接受数据 <body> <% out.println("协议版本类型和版本号:"+request.getProtocol()+"<br>"); out.println("当前连

java中创建对象的五种方法

用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制.Class.forName("")返回的是类Class.forName("").

Java中创建对象的5种方法

将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例. 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖管理系统去创建这些对象,例如 Spring .然而,我们可以有更多的方式去创建对象,让我们一起在文章中去学习这些方法吧. 这里列举在 Java 中创建对象的五种方式,下面将介绍它们的示例,以及创建对象的行的字节码. 使用 new 关键字 构造函数会被调用 使用 Class 类的 newInstanc

【Swift】ios开发中巧用 description 打印对象时,打印对象的属性

ios开发中我们打印对象的时候,会直接输出对象地址,这样不方便我们开发.我们可以 巧用 description 打印对象时,输出对象的属性 在oc中直接重写即可.swift中需要遵守Printable协议 看下面的例子 1 override var description: String { 2 let properties = ["属性1", "属性2", "属性3", "属性4"] 3 4 return "\(d

通过反射动态创建对象、方法

之前做的都是获取特性对象,都是查元数据的信息,现在我们可以通过反射开始动态的去创建对象和方法 1.两种调用无参构造函数的方法: 创建一个DemoClass,里面有无参构造函数和有参构造函数 public class DemoClass { public string Name { get; set; } public int Age { get; set; } public DemoClass() { Console.WriteLine("无参构造函数被调用啦"); } public

java反射调用某个对象的方法

// 反射调用某个对象的方法 public Object invokeMethod(Object methodObject, String methodName, Object[] args) throws Exception { Class ownerClass = methodObject.getClass(); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) {

【反射之Method】如何获取字节码对象中的方法

■获取字节码对象的方法有两种 第一种:使用字节码对象获取所有的方法(只能获取公有的方法,而不能获取私有/受保护的方法) 语法: Class.getMethods() 示例: Method[] methods = personClass.getMethods(); 第二种:使用字节码对象获取对象指定的方法,其参数:1.方法名:2.传入方法的参数类型加上".class" 语法: Class.getMethod(String name, Class<?>... parameter

C# - 使用配置文件和反射来创建对象实例

使用配置文件和反射来创建对象实例 为了增加程序的可扩展性,提高可配置性,常常需要使用配置文件+反射来动态调用方法. 下面定义的SIT类包含一个接口方法,演示如何使用配置文件及反射来动态调用. using System; namespace ConsoleApp1.CRMDataHandler { public class SIT : CRMDataHandler, IIncident { public void CreateIncident() { Console.WriteLine("{0}

【C#反射-动态创建对象】

上面博客学习了使用反射查看类型的信息,以及使用反射获取特性对象. 下面使用反射来动态创建对象.首先准备一个Test类: public class TestClass { public TestClass() { Console.WriteLine("这是一个无参构造函数"); } public TestClass(int a, int b) { Console.WriteLine("这是一个有参数构造函数 > a+b=" + (a + b)); } publi