利用反射加载类

反射: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("Constructor of WaitingforLoader without anything.");
	}
	public WaitingforLoader(String str) {
		this.str=str;
		System.out.println("Constructor of WaitingforLoader with "+str);
	}
	public void getStr(int i){
		System.out.println("str="+str);
	}
}

  加载运行的类:

package factory.classfactory;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

//import eg.fortest.WaitingforLoader;不需要这条语句

public class LoadMyClass {

	public static void main(String[] args)
			throws ClassNotFoundException,
			InstantiationException,IllegalAccessException,
			NoSuchMethodException, SecurityException,
			IllegalArgumentException, InvocationTargetException
	 {

		System.out.println("Program start.");

		/**
		 * 类的加载、链接、初始化。
		 */
		Class<?> clazz = Class.forName("eg.fortest.WaitingforLoader");

		/**
		 * 对象的创建
		 */
		Object myvar1 = clazz.newInstance();
		Constructor cor=clazz.getConstructor(String.class);
		Object myvar2 =cor.newInstance("string Parameter");
		/**
		 * 方法调用
		 */
		Method m =clazz.getMethod("getStr",int.class);
		m.invoke(myvar2, 1);
	}

}

  输出的结果:

Program start.
loading WaitingforLoader
Constructor of WaitingforLoader without anything.
Constructor of WaitingforLoader with string Parameter
str=string Parameter

时间: 2024-10-17 15:14:28

利用反射加载类的相关文章

java 反射机制与动态加载类学习要点

获取Class类的对象: 假设Foo是一个类,Foo foo = new Foo():则 第一种:Class c1 = Foo.class; 第二种:Class c2 = foo.getClass(); 第三种:Class c3 = Class.forName("com.nudt.reflection.Foo"); //会抛出异常 此时  c1 == c2 == c3 为true 也可以通过c1\c2\c3创建Foo的实例: Foo foo = (Foo)c1.newInstance(

反射(一)动态加载类

反射是什么?当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载,这样的好处对于服务器来说不言而喻,比如我们的项目底层有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,通过类的全类名让jvm在服务器中找到并加载这个类,根据需求来改变传入的参数.这时候就可以看到反射的好处了. 通过反射加载一个类,创建对象和调用方法: //根据类的包名+类名加载一个类 Class<?> c = Class.forName("

JAVA中的反射中加载类的方法

反射:加载类的方法有三种, 1.用Class.forName("类名")方法来调用; 2.类名.class得到 3.用对象.getClass()得到 package com.ma.reflection; import org.junit.Test; import com.ma.bean.UserBean; public class Demo1 { /** * 反射:加载类的方法 */ @Test public void test1(){ //1.用Class.forName("

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 { /** * 反射:加载类的无参构造方法 */ @Te

Java 反射理解(二)-- 动态加载类

Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 演示 我们以具体的代码来演示什么是动态加载类和静态加载类: 新建:Office.java: class Office { public static void main(String[] args) { // new 创建对象,是静态加载类,在编译时刻就需

[javaSE] 反射-动态加载类

Class.forName(“类的全称”) ①不仅表示了类的类类型,还代表了动态加载类 ②请大家区分编译,运行 ③编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 Ⅰ所有的new对象都是静态加载类 在编译的时刻就要去检测该类是否存在,如果不存在,编译失败. //对于这种情况,静态加载不适用,因为我们需要根据输入来确定加载哪个类 package com.tsh.reflect; class ReflectLoadDemo { public static void main(String[]

01_反射_01_加载类

[简述] 一个类有多个组成部分,例如:成员变量.方法.构造方法等.发射就是加载类,并剖析出类的各个组成部分. [加载类的三种方式] * Java中有一个Class类用于代表某一个类的字节码. * Class类既然代表某个类的字节码,它就自然会提供加载某个类的字节码的方法:forName( ); forName( )方法用于加载某个类的字节码到内存中,并使用class对象进行封装. *另外两种得到class对象的方式: 类名.class 对象.getClass() 如下所示: [Class对象]

Java反射第二课 动态加载类

在第一节课中我们讲的第三种方法 Class.forName("类的全称"); 不仅表示了类的类类型,还代表了动态加载类 请大家区分编译,运行 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 现在的开发工具比如eclipse把编译过程给隐藏了 下面做一个实验 比如用记事本编写下面的Office.java文件 class Office { public static void main(String[] args) { if(("Word").equals(ar

Java--Reflect(反射)专题2——动态加载类

转载请注明:http://blog.csdn.net/uniquewonderq 首先区分什么是动态加载,什么是静态加载? Class.forName("类的全称");//第三种表达类类型的方式 不仅代表了类的类类型,还代表了动态加载类 要区分编译和运行. 编译时刻加载类是静态加载类.运行时刻加载类是动态加载类. 在编译时刻就需要加载所有的可能使用到的类. 演示代码如下:功能性的类,最好使用动态加载.如,更新,升级,增加新功能等. 首先是一个接口,用于动态加载的.稍候可体验出来. pa