Java获取类对象的几种方式

在日常的编码过程中,如果想实例化一个类取得对象时,我们通常采用 “类名 对象名 = new 类名()” 的方式来实例化该类并取得该类的对象。

虽然这是最简单、最快捷的方式,但是这并不是获取一个类对象的唯一方法,下面介绍另外几种取得类对象的方法:

操作步骤

1.首先定义一个模板类,代码如下:

类中存在一个mode属性以及它的getter、setter方法,还有一个无参构造、一参构造以及toString()方法。

package com.test;

/**
 * 模板类
 * @author 谈笑、
 * @Date 2020-04-11
 */
public class Demo {
  
  private String mode;
  
  public Demo() {}
  
  public Demo(String mode) {
    this.mode = mode;
  }

  public String getMode() {
    return mode;
  }

  public void setMode(String mode) {
    this.mode = mode;
  }

  public String toString() {
    return "实例化类的方式:" + this.mode;
  }
  
}

2.接下来编写代码来实例化该类并获取到该类的对象

2.1.常规方式

public class DemoExample {

  public static void main(String[] args) {
    
    // 通过new对象的方式实例化一个类,并取得该类对象。
    Demo demo = new Demo();
    demo.setMode("New对象方式");
    System.out.println(demo.toString());
    
  }

}

2.2.通过全限定类名来实例化该类并获取到该类的对象

public class DemoExample {

  public static void main(String[] args) throws Exception {
    
    /**
     * 通过类的全限定名
     * 1.调用Class类的forName方法传入某个类的全限定类名来实例化Class类。
     * 2.然后再调用Class中的newInstance方法来返回由此类对象表示类的新实例,并强制转换为该类的实例对象。
     */
    Class<?> name = Class.forName("com.test.Demo");
    Demo demo = (Demo) name.newInstance();
    d2.setMode("通过类的全限定名");
    System.out.println(d2.toString());
    
  }

}

2.3.通过class属性来实例化该类并获取到该类的对象

public class DemoExample {

  public static void main(String[] args) throws Exception {
    
    /**
     * 通过类的全限定名
     * 1.类名.class的方式来实例化Class类。
     * 2.然后再调用Class中的newInstance方法来返回由此类对象表示类的新实例,并强制转换为该类的实例对象。
     */
    Class<?> name = Demo.class;
    Demo demo = (Demo) name.newInstance();
    d2.setMode("类.class");
    System.out.println(d2.toString());
    
  }

}

上面的两种方式都是基于反射机制来实现的,操作方法略有相似之处。

需要注意的是,如果使用上面两种方式来取得某个类的实例对象的话,那么在该类内需要定义一个无参构造方法,否则将会抛出java.lang.InstantiationException异常。如果不定义无参构造的话,那么就需要采取其他的方式来获取到该类的构造方法。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注