温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中怎么利用反射获取class对象

发布时间:2021-07-29 13:55:09 来源:亿速云 阅读:222 作者:Leah 栏目:编程语言

这篇文章将为大家详细讲解有关Java中怎么利用反射获取class对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1、获取Class对象

在 Java API 中,提供了获取 Class 类对象的三种方法:

第一种,使用 Class.forName 静态方法。

前提:已明确类的全路径名。

第二种,使用 .class 方法。

说明:仅适合在编译前就已经明确要操作的 Class

第三种,使用类对象的 getClass() 方法。

适合有对象示例的情况下

User类

package com.reflection; /** * Created by Liuxd on 2018-08-15. */public class User {  private String name;  private Integer age;   public User() {  }   public User(String name, Integer age) {    this.name = name;    this.age = age;  }   public String getName() {    return name;  }   public void setName(String name) {    this.name = name;  }   public Integer getAge() {    return age;  }   public void setAge(Integer age) {    this.age = age;  }   @Override  public String toString() {    return "User{" +        "name='" + name + '\'' +        ", age=" + age +        '}';  }}

package com.reflection; /** * Created by Liuxd on 2018-08-15. */public class TestReflection {   public static void main(String[] args) {//   第一、通过Class.forName方式    Class clazz1 = null;    try {      clazz1 = Class.forName("com.reflection.User");    } catch (ClassNotFoundException e) {      e.printStackTrace();    } //   第二、通过对象实例方法获取对象    Class clazz2 = User.class; //   第三、通过Object类的getClass方法    User user = new User();    Class clazz3 = user.getClass();     System.out.println(clazz1);    System.out.println(clazz2);    System.out.println(clazz3);  }}

2、获取对象实例

共两种方法:

一、直接用字节码文件获取对应实例

// 调用无参构造器 ,若是没有,则会报异常Object o = clazz.newInstance();

二、有带参数的构造函数的类,先获取到其构造对象,再通过该构造方法类获取实例:

//获取构造函数类的对象Constroctor constroctor = clazz.getConstructor(String.class,Integer.class); // 使用构造器对象的newInstance方法初始化对象Object obj = constroctor.newInstance("龙哥", 29);

package com.reflection;import java.lang.reflect.Constructor;/** * Created by Liuxd on 2018-08-15. */public class TestReflection {   public static void main(String[] args) {//   第一、通过Class.forName方式    Class clazz1 = null;    try {      clazz1 = Class.forName("com.reflection.User");    } catch (ClassNotFoundException e) {      e.printStackTrace();    } //   第二、通过对象实例方法获取对象    Class clazz2 = User.class; //   第三、通过Object类的getClass方法    User user = new User();    Class clazz3 = user.getClass();    System.out.println(clazz1);    System.out.println(clazz2);    System.out.println(clazz3);    User user1 = null;    try {       user1 =(User) clazz1.newInstance();    } catch (InstantiationException e) {      e.printStackTrace();    } catch (IllegalAccessException e) {      e.printStackTrace();    }    user1.setName("终结者");    user1.setAge(1500);    System.out.println("user1:"+user1.toString());    User user2 = null;    try {      // 获取构造函数      Constructor constroctor = clazz2.getConstructor(String.class,Integer.class);      // 通过构造器对象的newInstance方法进行对象的初始化      user2 = (User) constroctor.newInstance("龙哥",29);    } catch (Exception e) {      e.printStackTrace();    }    System.out.println("user2:"+user2.toString());  }}

关于Java中怎么利用反射获取class对象就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI