`
woshixushigang
  • 浏览: 576174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

动态加载类的方式

    博客分类:
  • j2ee
 
阅读更多
import java.util.Scanner;


public class ClassDemo2 {
	public static void main(String[] args) throws ClassNotFoundException
	{
		Cat cat=new Cat("tom",2);
		ClassLoader loader=cat.getClass().getClassLoader();
		System.out.println(loader);
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入一个类名");
		String className=scan.next();
		//Class clazz=Class.forName(className);
		//System.out.println(clazz.getName());
		Class clazz=loader.loadClass(className);
		System.out.println(clazz.getSimpleName());
	}

}

 

看个完整的例子:

 

import java.util.*;
import java.lang.reflect.*;
class ClassDemo
{
	public static void main(String[] args) throws ClassNotFoundException
	{	//动态加载类;h
		Scanner scan=new Scanner(System.in);
		System.out.println("请输入一个你想创建的类");
		String className=scan.next();
		Class clazz=Class.forName(className);
		System.out.println(clazz.getName());
		Bird bird=new Bird("tom",2);
		Class clazz2=bird.getClass();
		System.out.println(clazz==clazz2);
		//一些基本操作;
		System.out.printf("%s是否是接口%b\n",clazz.getClass().getName(),clazz.isInterface());
		System.out.printf("%s是否死基本数据类型%b\n",clazz.getClass().getName(),clazz.isPrimitive());
		System.out.printf("%s是否是数组%b\n",clazz.getClass().getName(),clazz.isArray());
		System.out.printf("%s的父类是%s",clazz.getClass().getName(),clazz.getSuperclass().getName());
		System.out.println();
		//查看类的信息
		int m=clazz.getModifiers();
		System.out.printf("%s\t",Modifier.toString(m));
		if(clazz.isInterface())
		{System.out.println("interface");}
		else{System.out.print("class");}
		System.out.printf("\t");
		System.out.printf("%s",clazz.getSimpleName());

		System.out.println("\t\t{");
		Field [] fields=clazz.getDeclaredFields();
		for(Field field:fields)
		{
			int n=field.getModifiers();
			System.out.printf("%s\t",Modifier.toString(n));
			System.out.printf("%s\t",field.getType().getSimpleName());
			System.out.printf("%s\t",field.getName());

		}
		Constructor [] cons=clazz.getDeclaredConstructors();
		for(Constructor con:cons)
		{
			int p=clazz.getModifiers();
			System.out.printf("%s\t",Modifier.toString(p));
			System.out.printf("%s (){\n}\n",con.getName());
		}
		Method []methods=clazz.getDeclaredMethods();
		for(Method method:methods)
		{
			int q=method.getModifiers();
			System.out.printf("%s\t",Modifier.toString(q));
			System.out.printf("%s\t ",method.getReturnType().getSimpleName());
			System.out.printf("%s\n; ",method.getName());
		}
		System.out.println("\t\t}");
		//实现类的动态加载有两个方法:一个是用forname一个是用加载器
		ClassLoader loader=bird.getClass().getClassLoader();
		Scanner scan1=new Scanner(System.in);
		String className1=scan1.next();
		Class clazz1=loader.loadClass(className1);

		System.out.println(clazz1.getSimpleName());

	}
}

 

分享到:
评论

相关推荐

    动态加载类机制JAVA

    - `Class.forName(String className)` 是动态加载类的常见方式,它会尝试加载指定名称的类,并返回`Class`对象。如果类尚未加载到JVM中,该方法会调用相应的类加载器进行加载。 4. URLClassLoader: - 当类位于非...

    利用类装载器动态加载类并启动类

    ### 利用类装载器动态加载类并启动类 #### 概述 本文将详细介绍如何通过自定义类装载器来动态加载并启动类的过程,同时介绍一个简单的位移...这种方式不仅增强了数据的安全性,也为动态加载类提供了灵活的解决方案。

    java动态加载类

    本文将深入探讨Java动态加载类的概念、应用场景以及其实现方式。 #### 1. 动态加载类的意义与应用 动态加载类的主要意义在于提高系统的灵活性和可维护性。例如,当存在多个实现同一接口的类时,如不同的数据库连接...

    Java反射动态加载实例类

    2. **加载类**:使用`Class.forName()`方法根据配置文件中的类名动态加载类。 3. **创建对象**:调用`clazz.newInstance()`方法创建类的一个新实例。 4. **设置字段值**:通过`Field`类的`set()`方法为对象的指定...

    Java语言-动态编译代码并热加载类

    在Java编程中,动态编译代码并热加载类是一项重要的技术,它允许程序在运行时修改或添加新的类,而无需重启应用。这种能力对于快速迭代开发、调试和性能优化非常有用。本主题将深入探讨Java中的动态编译与热加载机制...

    插件化:动态加载类(无法加载资源)

    "插件化:动态加载类(无法加载资源)"这一主题涉及到的关键知识点主要围绕Android插件化原理、动态加载类的方法以及资源加载问题的解决策略。 首先,Android插件化的核心思想是将应用程序拆分成主程序(宿主)和...

    jni动态加载方式示例工程

    这个“JNI动态加载方式示例工程”显然是一个演示如何在Java程序中动态加载本地库(.so文件)的实例。在Android开发中,JNI通常用于实现Java无法高效处理的底层操作,如高性能计算、系统调用或者与硬件设备通信。 ...

    springboot+java类热加载

    例如,`MemoryClassLoader.java`可能就是一个自定义类加载器的实现,它可以在内存中动态加载或更新类。 **JarinJAR**是一种打包技术,它可以将多个JAR文件打包成一个大的JAR文件。在热加载场景下,JarinJAR使得在...

    Android App 如何动态加载类.doc

    在Android应用开发中,动态加载类是一项重要的技术,它允许应用程序在运行时加载新的功能或者更新已有代码,而无需重新安装整个应用。本篇将详细解释如何在Android中实现动态加载类,主要涉及两种ClassLoader:...

    动态加载Cpp类示例.rar

    在C++编程中,动态加载类是一种非常有用的技巧,它允许程序在运行时根据需要加载和使用未知或未预先编译的类。这种技术通常与插件系统、可扩展性或者模块化软件设计相关联。动态加载类的核心是C++标准库中的`dlopen`...

    Java动态加载类小实验.pdf

    Java动态加载类是一种重要的编程技巧,它允许程序在运行时根据需要加载新的类,而无需重新编译或修改主程序。这种技术对于实现模块化、可扩展性和灵活性至关重要,尤其适用于大型复杂系统。以下是关于Java动态加载类...

    动态加载dll,动态加载webservice

    动态加载是编程中的一种技术,它允许程序在运行时加载未知或在编译时不可用的库、组件或服务。这种技术在很多情况下非常有用,因为它增强了程序的灵活性和可扩展性。本篇文章将深入探讨“动态加载dll”和“动态加载...

    Android中的动态加载机制

    1. ClassLoader重写:Android系统的类加载是通过ClassLoader来完成的,因此,要实现动态加载,我们需要自定义ClassLoader。通过对默认的 DexClassLoader 或 PathClassLoader 进行扩展,我们可以控制何时以及如何加载...

    动态加载jar包的实现

    在Java编程环境中,动态加载jar包是一项重要的技术,它允许我们无需重启服务器就能引入新的功能或更新已有的类。这在大型系统维护和迭代中尤为关键,因为它提高了系统的灵活性和可扩展性。以下是对"动态加载jar包的...

    Java技术----实现JAVA的动态类载入机制

    Java虚拟机(JVM)有多个内置的类加载器,如Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader,它们按层次结构工作,依次加载类。用户还可以自定义类加载器以满足特定需求,例如加载网络上的类或加密...

    动态加载jar包

    在Java编程环境中,动态加载jar包是一项重要的技术,它允许程序在运行时根据需要加载新的功能或库,而不是在编译阶段就确定所有依赖。这种技术对于开发大型、可扩展和模块化的应用尤其有价值,因为它提供了灵活性...

    MFC动态加载和静态加载bmp类型图片

    总结,MFC加载BMP图片涉及了对资源管理的理解,包括静态和动态加载方式的选择以及避免内存泄漏的注意事项。正确使用这些技术,可以帮助我们高效、安全地在MFC应用程序中处理图像资源。在实际项目中,应根据具体需求...

    C# 反射实例代码 接口方式动态加载dll方式

    本文将深入探讨如何通过接口方式动态加载DLL,以此来理解C#反射的应用。 首先,我们要知道什么是接口。在C#中,接口(Interface)是一种定义行为规范的类型,它不包含任何实现,只包含方法、属性、索引器和事件的...

    Android 免安装动态加载APK

    综上所述,Android免安装动态加载APK技术涉及了类加载、资源管理、权限控制等多个方面的知识,对于提升应用的灵活性和可维护性具有重要意义,同时也对开发者的技术水平提出了较高的要求。在实践中,开发者需要根据...

    动态加载webservices

    动态加载Web服务是一种灵活的应用程序设计策略,它允许程序在运行时发现、加载并使用Web服务,而不是在编译时硬编码对特定Web服务的引用。这种方法的优势在于提高了应用程序的可扩展性和适应性,因为即使Web服务提供...

Global site tag (gtag.js) - Google Analytics