ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

反射创建实例对象

2022-07-14 22:35:00  阅读:120  来源: 互联网

标签:反射 String 创建 age 实例 Student Constructor public name


第一步:Constructor 对象获取(更多请查看JDK文档,关键字:Class)

  • Constructor<?>[] getConstructors()      获取当前Class类对象中,所有的公共的构造方法
  • Constructor<?>[] getDeclaredConstructors()  获取当前Class类对象中,所有的构造方法(常用)
  • Constructor<T> getConstructor(Class<?>... parameterTypes)      获取一个单个的公共的构造方法对象
  • Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)  获取一个单个的,任意权限修饰符的构造方法对象(推荐使用)
// 学生类
public class Student { private String name; int age; protected String address; public String tel; // getter 和 setter 方法 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 String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } // 成员方法 void eat(){ System.out.println("吃东西"); } protected void sleep(){ System.out.println("睡觉"); } private void study(String subject){ System.out.println("学" + subject); } // 构造方法 public Student() {}  // 构0
Student(String name, int age) {  // 构2 this.name = name; this.age = age; }
protected Student(String name, int age, String address) {  // 构3 this.name = name; this.age = age; this.address = address; }
private Student(String name, int age, String address, String tel) {  // 构4 this.name = name; this.age = age; this.address = address; this.tel = tel; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", address='" + address + '\'' + ", tel='" + tel + '\'' + '}'; } }

import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException {

        // 1.读取需要被加载进内存的类的路径
        Properties properties = new Properties();
        FileInputStream fis = new FileInputStream("day14\\class.properties");  // 读取配置文件
        properties.load(fis);
        //2.从集合中,把className的信息获取到
        String className = properties.getProperty("className");
        //3.反射根据类的全路径(包名 + 类名),将当前的类加载进内存,形参Class类对象
        Class<?> c = Class.forName(className);

        System.out.println("Constructor<?>[] getConstructors()  获取所有的公共的构造方法");
        Constructor<?>[] constructors = c.getConstructors();
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }

        System.out.println("Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法");
        Constructor<?>[] declaredConstructors = c.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor);
        }
System.out.println("Constructor<T> getConstructor(Class<?>... parameterTypes) 获取单个的公共的构造方法对象"); Constructor<?> constructor = c.getConstructor(); // 获取了一个公共的,空参的构造方法(构0) System.out.println(constructor); System.out.println("Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取单个的,任意权限修饰符的构造方法对象 (推荐使用)"); // 构0 Constructor<?> declaredConstructor0 = c.getDeclaredConstructor(); System.out.println(declaredConstructor0); // 构2 Constructor<?> declaredConstructor2 = c.getDeclaredConstructor(String.class, int.class); System.out.println(declaredConstructor2); // 构3 Constructor<?> declaredConstructor3 = c.getDeclaredConstructor(String.class, int.class, String.class, String.class); System.out.println(declaredConstructor3); fis.close(); // 关流 } }
测试结果如下:

Constructor<?>[] getConstructors() 获取所有的公共的构造方法
public cn.powernode.javase.reflect.constructor.Student()
Constructor<?>[] getDeclaredConstructors() 获取所有的构造方法
public cn.powernode.javase.reflect.constructor.Student()
protected cn.powernode.javase.reflect.constructor.Student(java.lang.String,int,java.lang.String)
private cn.powernode.javase.reflect.constructor.Student(java.lang.String,int,java.lang.String,java.lang.String)
cn.powernode.javase.reflect.constructor.Student(java.lang.String,int)
Constructor<T> getConstructor(Class<?>... parameterTypes) 获取单个的公共的构造方法对象
public cn.powernode.javase.reflect.constructor.Student()
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 获取单个的,任意权限修饰符的构造方法对象 (推荐使用)
public cn.powernode.javase.reflect.constructor.Student()
cn.powernode.javase.reflect.constructor.Student(java.lang.String,int)
private cn.powernode.javase.reflect.constructor.Student(java.lang.String,int,java.lang.String,java.lang.String)

-----------------------------------------------------

第二步:根据获取到的 Constructor 对象,创建该类的实例对象

 

标签:反射,String,创建,age,实例,Student,Constructor,public,name
来源: https://www.cnblogs.com/lwj0126/p/16479594.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有