//定义一个接口
public interface ClassInterFace
{
public String getStr(String className);
}
==================================
//定义一个单例模式的实现类
public class BaseClass implements ClassInterFace
{
private static BaseClass instance = null;
public static synchronized BaseClass getInstance()
{
if (instance == null)
instance = new BaseClass();
return instance;
}
public String getStr(String ClassName)
{
return ClassName;
}
}
===================================
//通过ClassLoader或者Reflection获取接口实现类
public class ClassLoadTest
{
/**
* ClassLoader加载器使用
*/
public void getClassTest(String className)
{
ClassInterFace base = null;
if (null != className && !"".equals(className)) {
try {
base = (ClassInterFace)this.getClass().getClassLoader().loadClass(className).newInstance();
base.getStr("ClassLoad加载器使用");
}
catch(Exception e) {
e.printStackTrace();
}
}
}
/**
* 通过反射获取java类
*/
public void getClassToReflection(String className)
{
try {
ClassInterFace base = (ClassInterFace)Class.forName(className).newInstance();
base.getStr("反射获取java类");
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ClassLoadTest classLoad = new ClassLoadTest();
classLoad.getClassTest("com.demo.BaseClass");//指定的java类
classLoad.getClassToReflection("com.demo.BaseClass");
BaseClass aa = BaseClass.getInstance();
aa.getStr("java单态模式");
}
}
分享到:
相关推荐
在Java中,我们通常通过`URLClassLoader`或`ClassLoader`的子类来实现动态加载外部JAR包。例如,假设我们有一个名为`PrintInterface.jar`的库,其中包含一个实现了特定接口的类。我们可以通过以下方式加载这个JAR并...
通过反射,开发者可以在运行时检查类的结构,创建和操作对象,这在处理未知类型的数据或者实现元编程时特别有用。例如,我们可以使用`Class.forName()`加载类,`Class.getDeclaredMethods()`获取类的所有方法,`...
开发者可以自定义类加载器,实现`java.lang.ClassLoader`接口,以满足特定的加载需求。 3. **URLClassLoader**: 这是Java标准库中的一个类加载器,它可以从指定的URL加载类。通过创建`URLClassLoader`实例并传入...
用户还可以自定义类加载器,实现特定的类加载逻辑,比如从网络加载类或者从加密的存储中加载类。 类对象还关联着类的生命周期。当类加载时,其对应的Class对象被创建,而在卸载类时,Class对象也会被垃圾收集器回收...
4. **动态代理**:Java的`java.lang.reflect.Proxy`类可以生成动态代理类,用于实现接口的动态回调。 5. **注解处理**:反射可以用来检查和处理类、方法或字段上的注解,实现元数据驱动的编程。 ### 示例 以下是...
通过这些类,我们可以在运行时获取到类的信息,并可以创建对象、调用方法和访问字段。 1. 获取Class对象: - 使用`Class.forName(String className)`方法,传入类的全名(包括包名),返回对应的Class对象。 - ...
- 某个类到底实现了哪些接口。 2. **`Class`对象的生成方式**: - 对于每个类而言,JRE都为其保留了一个不变的`Class`类型的对象。 - `Class`对象只能由系统建立对象。 - 一个类在JVM中只会有一个`Class`实例。...
Java动态代理是一种在运行时动态生成代理类的技术,通过该技术可以为一个或多个接口生成一个实现类,该实现类可以拦截接口方法的调用,并进行额外的操作。Java动态代理主要由`java.lang.reflect.Proxy`类和`java....
6. **接口与泛型反射**:反射同样适用于接口和泛型,可以获取接口的所有方法以及泛型的实际类型参数。 **Java动态代理(Dynamic Proxy)** Java动态代理是Java提供的一种机制,可以在运行时创建具有特定接口的代理...
在Java编程中,“lookup”通常指的是寻找类、接口、方法或字段的过程,这可能涉及到反射机制(Reflection)或者服务提供者接口(SPI, Service Provider Interface)。反射允许程序在运行时检查和操作类、接口、方法...
在Java编程语言中,反射(Reflection)和动态代理(Dynamic Proxy)是两个强大的特性,它们为程序员提供了在运行时检查和操作类、接口、对象的能力。这篇内容将深入讲解这两个概念,帮助初学者理解并掌握它们的应用...
线程可以通过继承 Thread 类或实现 Runnable 接口来创建和启动。 10. 同步和异步 同步和异步是 Java 中的两种并发编程机制。同步机制用于保证线程安全,而异步机制用于提高程序的响应速度。 11. 集合框架 Java 中...
开发者可以通过自定义ClassLoader来实现动态加载特定的类文件,这在插件系统或者模块化系统中非常常见。 3. 动态代理(Dynamic Proxy):Java标准库提供了一个动态代理机制,允许在运行时创建实现了指定接口的新类...
- 获取类的信息(如类名、父类、实现的接口、字段、方法等)。 - 创建新的实例。 - 调用方法。 - 访问和修改字段值。 **2. 获取Class对象的方式** 获取`Class`对象主要有三种方式: - **通过类名直接获取**: ...
1. 代理类生成:`Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler handler)`静态方法用于创建一个实现了指定接口的代理对象。 2. `InvocationHandler`接口:它定义了一个方法`...
Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取关于任何已知类的内部信息,包括类的修饰符、超类、实现的接口,以及字段和方法的所有细节。通过反射,我们可以动态地创建对象、访问私有成员、调用...
- 同步机制:synchronized关键字、Lock接口及其实现类,用于避免并发问题。 - 线程池(ExecutorService):高效管理线程资源,提高系统性能。 9. **输入/输出流(I/O Stream)**: - Java提供了丰富的I/O流类,...
动态加载APK的核心技术主要包括类加载器(ClassLoader)的重写、 Dex优化(DexOpt)和反射(Reflection)等。类加载器是Java虚拟机加载类的关键组件,通过重写其行为,我们可以使得系统在运行时识别并加载外部的APK...