java 类的new_Java怎么在方法中按照类名new一个类?

Java中有一个高级特性:反射,可以根据你传入的类的全限定名,即完整的类名字符串(比如说name),来动态实例化(就是你所说的打开或new出来)你所传入与name同名的类。

Talk is cheap, show me the code, so, 用例子说话:

假设你已经写了3个Jframe窗口类:

1 org.evergreen.demo.Jframe1:

package org.evergreen.demo;

import javax.swing.*;

public class Jframe1 {

private String str;

public Jframe1() {

}

public Jframe1(String s) {

this.str = s;

}

public void sayHello(){

System.out.println("This is Jframe1");

}

}

2 org.evergreen.demo.Jframe2:

package org.evergreen.demo;

public class Jframe2 {

private String str;

public Jframe2() {

}

public Jframe2(String s) {

this.str = s;

}

public void sayHello(){

System.out.println("This is Jframe2");

}

}

3 org.evergreen.demo.Jframe3:

package org.evergreen.demo;

public class Jframe3 {

private String str;

public Jframe3() {

}

public Jframe3(String s) {

this.str = s;

}

public void sayHello(){

System.out.println("This is Jframe3");

}

}

反射核心方法工具类:

package org.evergreen.demo.utils;

public class ClassInitInstanceUtil {

/**

*

* @param fullClassName:注意:这里的fullClassName,必须是包含类所在包名的全限定名,

* 如:org.evergreen.demo.Jframe1,否则无法实例化

* @param args:这里是传入的Jframe类的构造函数的参数

* @return

*/

public static Object initlizeClazz(String fullClassName, Object... args) {

Class[] classes = new Class[args.length];

for (int i = 0; i < classes.length; i++) {

classes[i] = args[i].getClass();

}

Object clazz = null;

try {

clazz = Class.forName(fullClassName).getConstructor(classes).newInstance(args);

} catch (Exception e) {

}

return clazz;

}

}

验证一下,看看效果:

package org.evergreen.demo;

import org.evergreen.demo.utils.ClassInitInstanceUtil;

public class JFrameClazzDemo {

public static void main(String[] args) {

String name1 = "org.evergreen.demo.Jframe1";

String name2 = "org.evergreen.demo.Jframe2";

String name3 = "org.evergreen.demo.Jframe3";

//传入的字符串参数namex,必须是包含类所在包名的全限定名

Jframe1 jframe1 = (Jframe1) ClassInitInstanceUtil.initlizeClazz(name1);

jframe1.sayHello();

Jframe2 jframe2 = (Jframe2) ClassInitInstanceUtil.initlizeClazz(name2);

jframe2.sayHello();

Jframe3 jframe3 = (Jframe3) ClassInitInstanceUtil.initlizeClazz(name3);

jframe3.sayHello();

}

}

执行结果:

看到上面的结果没?这里的反射已经动态的打开,或者说new出来你传入的类名对应的实例了!

刚刚又看了一下你的具体描述,你是个初学者,应该还没有学到java反射这个“黑科技”。

反射功能并不是java独有,很多高级编程语言都内置了这个功能,可以深入学习了解一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值