java中反射:加载类的构造方法

package com.ma.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.junit.Test;
import com.ma.bean.UserBean;

/**
 * 反射:加载构造方法
 * @author ma
 *
 */
public class Demo2 {

	/**
	 * 反射:加载类的无参构造方法
	 */
	@Test
	public void test1(){
		//1.用Class.forName("类名")方法来调用;
		try {
			//反射类
			Class<?> clazz = Class.forName("com.ma.bean.UserBean");

			//得到类的构造函数
			Constructor<?> c = clazz.getConstructor(null);

			UserBean user = (UserBean) c.newInstance(null);
			System.out.println(user);

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} 

	}
	/**
	 * 反射:加载类的有参构造方法
	 * @throws ClassNotFoundException
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 * @throws IllegalArgumentException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 */
	@Test
	public void test2() throws ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
		//反射类
		Class<?> clazz = Class.forName("com.ma.bean.UserBean");
		Constructor<?> c = clazz.getConstructor(String.class,String.class,String.class);
		UserBean user = (UserBean) c.newInstance("001","李四","123abc");
		System.out.println(user);
	}

	/**
	 * 反射:加载类的私有有参构造方法
	 * @throws ClassNotFoundException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws InvocationTargetException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 * @throws IllegalArgumentException
	 */
	@Test
	public void test3() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
		Class<?> clazz = Class.forName("com.ma.bean.UserBean");
		Constructor<?> c = clazz.getDeclaredConstructor(String.class);
		c.setAccessible(true);
		UserBean user = (UserBean) c.newInstance("王五");
		System.out.println(user);
	}

	/**
	 *
	 * 另一种无参反射方法
	 * @throws ClassNotFoundException
	 * @throws IllegalAccessException
	 * @throws InstantiationException
	 */
	@Test
	public void test4() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		Class<?> clazz = Class.forName("com.ma.bean.UserBean");
		UserBean user = (UserBean) clazz.newInstance();
		System.out.println(user);
	}
}

  实体类

package com.ma.bean;
/**
 * UserBean实体类
 * @author ma
 *
 */
public class UserBean {

	private String id;
	private String name = "张三";
	private String password;
	public UserBean() {
		super();
		System.out.println("我是无参构造方法");
	}
	public UserBean(String id, String name, String password) {
		super();
		this.id = id;
		this.name = name;
		this.password = password;
		System.out.println("我是有参构造方法");
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "UserBean [id=" + id + ", name=" + name + ", password="
				+ password + "]";
	}

	private UserBean(String name){
		this.name = name;
		System.out.println(name);
	} 

}

  

原文地址:https://www.cnblogs.com/majingang/p/9116051.html

时间: 2024-10-09 22:07:50

java中反射:加载类的构造方法的相关文章

java中JVM加载类的时机

一.描述 java中的类在什么时候被JVM虚拟机加载呢?因为静态成员初始化的时候会在类首次加载的时候执行, 我们通过测试一个静态代码块的执行时间来判断JVM加载该类的时间. 总结:JVM只在需要某个类或者使用Class.forName(className)强制加载类的时候才会被调用,如果只是声明某个类的引用,而没有创建对象则不会加载该类. 二.源代码 1.只是声明某个类的引用,而没有创建对象则JVM不会加载该类 package tong.yue.day4_25; /** * java中的类在什么

Java 从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类 定义接口 package loader; public interface HelloIface {     public String hello();          public String sayHi(); } 实现接口 在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jar package loader; public class HelloImpl implements HelloIf

Java中动态加载jar文件和class文件

概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用. Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 动态加载jar文件 // 系统类库路径 File libPath =

php中自动加载类_autoload()和spl_autoload_register()实例详解

一._autoload 自动加载类:当我们实例化一个未定义的类时,就会触此函数.到了php7.1以后版本不支持此函数好像抛弃了 新建一个类文件名字自己随便去:news类在auto.php文件里面去实例news类而没有引入该类,可以用_autoload自动加载方法类去处理. news.class.php文件 class news{ function do_new() { echo 'aaa'; } } auto.php文件使用_autoload函数要定义函数体自己去定义 function __au

利用反射加载类

反射:java.lang.reflect 要被加载的类: package eg.fortest; public class WaitingforLoader { private String str; static{ System.out.println("loading WaitingforLoader"); } public WaitingforLoader() { str="empty"; System.out.println("Constructo

[转载] Java中动态加载jar文件和class文件

转载自http://blog.csdn.net/mousebaby808/article/details/31788325 概述 诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用. Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍

利用Java中反射来分析类的示例小程序

import java.util.*; import java.lang.reflect.*; /** * This program uses reflection to print all features of a class. * @version 1.1 2004-02-21 * @author Cay Horstmann */ public class ReflectionTest { public static void main(String[] args) { // read c

java加载类的顺序

一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new StaticCode();2.使用类中的静态成员:StaticCode.num=9;  StaticCode.show();3.在命令行中运行:Java StaticCodeDemo 二.类所有内容加载顺序和内存中的存放位置:利用语句进行分析.1.Person p=new Person("zhangsan",20);该句话所做的事情:1.在栈内存中,开辟main函数的空间,建立main函数的变量 p.2.加载

Java运行时动态加载类之ClassLoader

https://blog.csdn.net/fjssharpsword/article/details/64922083 *************************************************************************** 需求场景:动态加载类ClassLoaderd,在xml文件中配置加载类名称和方法,: 一.准备 1)在D:\\tmp\\目录下配置a.xml文件: <?xml version="1.0" encoding=&q