java动态加载类

Java类动态加载(一)——java源文件动态编译为class文件 NULL 博文链接:https://zheng12tian.iteye.com/blog/1488813 立即下载

 

/*
在JAVA中,通过Class.forName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用Class.forName(configClassName).getInstance()就可以构造一个特定的实现类实例,而不用每次修改源代码。这样对于程序来讲只用关心接口的定义,用户只用进行配置文件的设置就完成了同一功能的不同实现的切换。
但是如果实现类需要通过静态方法来进行初始化的时候,动态加载的过程就会复杂一些。同样的以数据库连接池为例,通常连接池的构造函数都会被定义为私有的,而通过自定义的getInstance()静态方法来得到唯一实例。这种情况下简单的通过Class.forName().getInstance()就无法正确构造实例。
幸好JAVA所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。通过反射机制,我们能够完成基本上所有的运行时决定的动作(虽然这一实现要比其他动态语言,比如PHP,的eval()的使用要复杂的多)。
下面通过实际的例子说明如何在运行时动态访问类的静态方法。
-------------------------------------------------------
*/
import java.lang.reflect.*;
publicclass myTestClass{
    privatestatic Object pLock = new Object();
    privatestatic myTestClass p_instance = null;
    private String s_configName = "";
    privateboolean b_isFromResource = true;
    publicstatic Object getInstance(String sConfigName,
                                         Boolean bIsFromResource){
        synchronized(pLock){
            if(null == p_instance){
                 p_instance =
                    new myTestClass(sConfigName,bIsFromResource);
             }
         }
        return p_instance;
     }
    private myTestClass(String sConfigName,Boolean bIsFromResource){
         s_configName = sConfigName;
         b_isFromResource = bIsFromResource.booleanValue();
     }
    publicvoid echoInfo(){
         System.out.println("current arguments : configName=["+
                             s_configName+"],isFromResource=["+
                             b_isFromResource+"]");
     }
    publicstaticvoid main(String[] args) throws Exception{
        // 设置方法的传入参数的类型.
         Class[] parameterTypes = new Class[]{
                                     java.lang.String.class,
                                     java.lang.Boolean.class
                                     };
         Method mGetInstance = null;
         String className = "myTestClass";
         Class curTestClass = Class.forName(className);
        try{
             mGetInstance = curTestClass.
                             getMethod("getInstance",parameterTypes);
         }
        catch(NoSuchMethodException e){
             e.printStackTrace();
             mGetInstance = null;
         }
        if(mGetInstance != null){
             myTestClass pObj = (myTestClass)
                                 mGetInstance.invoke(
                                    null,
                                    new Object[]{
                                        "src/myconfig.properties",
                                         Boolean.FALSE
                                     }
                                 );
             pObj.echoInfo();
         }
        else{
            throw
            new Exception("myTest Init Failed from class" +
                                 className +
                                 System.getProperty("line.seperator","/n") +
                                "method getInstance(String, Boolean) exists.");
         }
     }

}

Lane、PHY和Preset Value Bit 每个Lane支持不同的传输速度和带宽,例如PCIe 3.0中,一个Lane的传输速度可以达到8 GT/s(Giga Transfers per second),也就是1 GB/s(GigaBytes per second)。Preset Value Bit(预置值位)是在PCIe 3.0的Lane上新引入的一种机制,用于优化信号传输质量。PCIe设备可以包含多个Lane,例如x1、x4、x8、x16等,表示该设备同时使用的Lane数目,比如x16表示该设备采用了16个Lane,具有更高的传输速度和带宽。 阅读详情

相关推荐

麒麟OS恢复出厂设置原理与实操:非重装的系统状态回滚

Linux操作系统中的‘恢复出厂设置’并非简单重装或镜像还原,而是一种基于状态快照、包管理与配置模板的可控回滚机制。其核心原理依赖LVM快照技术、RPM包签名验证和预置配置模板,兼顾系统稳定性与用户数据安全。该方案在政务、教育等国产化场景中具有显著技术价值——不格式化硬盘、不丢失/home文档、不重配驱动与授权,大幅降低运维复杂度。典型应用场景包括系统卡顿修复、软件冲突清理、桌面环境异常恢复等。本文深入解析银河麒麟V10的kylin-restore-cli工具链与麒麟管家集成逻辑,聚焦‘恢复出厂设置’这一高

weixin_30879169的博客 772

Java动态类加载

Java动态类加载 文章首发自: https://www.le1a.com/posts/9d41d3f8/ 前言 前面学习了反序列化,正准备趁热打铁去学cc3了,但是发现cc3需要用到动态类加载,就先来学一下。 利用URLClassLoader加载远程class文件 首先了解下什么是ClassLoader? ClassLoader是一个"加载器",它会让Java虚拟机知道如何加载这个类。默认的ClassLoader是根据类名来加载类的,这个类名必须是类的完整路径(跟反射有点类似),例如java.lang.R

Le1a's Blog 6149

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5290

java--动态加载

Java字节码(ByteCode)指的是Java虚拟机执行使用的一类指令,通常被存储在.class文件中。 但是我们所说的"字节码"可以理解的更广义一些----所有能够恢复成一个类并在JVM虚拟机里加载的字节序列,都在我们的讨论范围之内。 Java的ClassLoader是用来加载字节码文件最基础的方法,ClassLoader就是一个"加载器",告诉Java虚拟机如何加载这个类。 ClassLoader就是根据类名来加载类,这个类名是类完整路径。 我们在学习反射的时候利用到的Class.forNam

zyer 3148

2017阿里内推笔试题--算法工程师(运筹优化)

2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3

shawpan的专栏 1万+

(MIUI)小米手机录音文件深度寻踪:从系统缓存到数据目录的实战解析

本文深入解析了MIUI系统中录音文件丢失的常见原因及解决方案,包括系统升级兼容性问题、应用缓存机制异常和存储权限变动。通过实战操作指南,详细介绍了如何从系统目录、数据库层面恢复录音文件,并提供了预防措施和自动化备份方案,帮助小米手机用户有效找回重要录音数据。

weixin_42699679的博客 518

Java中的动态类加载详解

今天我们将深入探讨Java中的动态类加载,这是一种在运行时加载类文件的重要机制。动态类加载通过反射和自定义类加载器机制,使得程序在运行时可以根据需要动态加载和使用类,提高了应用程序的灵活性和可维护性。Java中的动态类加载能够使程序在运行过程中动态地装载、链接和初始化类,从而增强程序的灵活性和可扩展性。除了Java标准库提供的类加载器外,我们还可以自定义类加载器来实现更灵活的动态类加载需求。在Java中,实现动态类加载主要依赖于Java的反射机制和类加载器(ClassLoader)机制。

微赚开发者技术分享博客 1474

华为OD机试真题 新系统2026-04-08 C++ 实现【直捣黄龙】

小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个 哨兵警戒以自己为中心的9宫格,一旦被哨兵发现则行动失败。

MISAYAONE的博客 261

JAVA动态类加载

Java 类加载是 Java 虚拟机 (JVM) 在运行时将 .class 文件转换为内存中的数据结构(主要存放在方法区)并生成对应 Class 对象的过程。这个过程使得 JVM 能够动态地加载、链接和初始化类,从而实现灵活的运行时行为。

Bloyet 1130

1、微软 Intune 全面指南:配置、管理与自动化

本文全面介绍了微软 Intune 的配置、管理和自动化操作,涵盖用户与设备管理、安全策略设置、跨平台应用部署、合规性监控及报告分析等内容。通过详细的操作步骤、自动化脚本示例和流程优化建议,帮助技术人员高效掌握 Intune 在混合办公环境中的实际应用,并展望其未来发展趋势。

ii567的博客 359

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652

Java安全--篇2-类的动态加载

首先我们来了解一下构造代码块和静态代码块:Java中静态代码块、构造代码块、构造函数、普通代码块 - YSOcean - 博客园 继上周我们重写了Person类: 我们先写一个main来实例化Person看一下结果:看到这个结果我们可以观察到两个信息:接下来我们利用反射来尝试获取类看看会发生什么:发现只调用了静态代码块为什么?了解一下类是怎么加载到JVM中的:类加载过程,以及什么是双亲委派? - 掘金用图来说就是这样:只要初始化了就会执行静态代码块如果实例化那么与对象相关的实例化和构造方法也会被调用

qq_64201116的博客 1327

C++设计模式之观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统,当一个对象(称为“主题”或“发布者”)改变状态时,所有注册的观察者都会收到通知。

每天进步一点点。 600

java 动态加载类

一、什么是动态加载类动态加载:通过Class.forName的方式来得到一个Class类型的实例,然后通过这个Class类型的实例的newInstance来初始化,这种方法我们称之为动态加载程序在运行时调用相应方法,即使其他方法是错误的,程序依旧会执行。通过动态加载可以让程序的可延长性大大提升,对以后的维护和扩展有重要意义。Class c = Class.forName("com.mianshi.t

小小布的程序世界 3670

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java类动态加载

1、静态类加载 说到动态加载,就得说说静态加载了。 下面就通过一个例子来说明静态加载的特点: class Office{ public static void main(String[] args){ //new 创建对象 是静态加载类, //在编译时刻就需要加载所有可能使用到的类。 //不管是否使用到 //通过动态加载类可以解决该问题 if("Word".equal...

stoneWang_L的博客 593

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java动态加载类_Java动态加载类示例详解

在讲解动态加载类之前呢,我们先弄清楚为什么要动态加载类,静态加载不行吗?我们可以看下面的实例:我在文件夹里写了office.java 类和 word.java类,如下:office.javaclass office{public static void main(string[] args){if(args[0].equals("word")){word w = new word();w.star...

weixin_39895862的博客 351

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java中实现动态加载类?

一、案例引入: 假如某项目组要开发一款Office平台, 里面有Word模块和Excel模块, 你负责的部分是启动程序,即: 当键盘输入"Word"时,启动Word 当键盘输入"Excel"时,启动Excel 你写完代码,但是并不能运行, 因为, 你并没有拿到其他人所写的Word类和Excel类 ...

yongganzhe02的博客 1362

java动态加载类的好处_Java动态加载类示例详解

在讲解动态加载类之前呢,我们先弄清楚为什么要动态加载类,静态加载不行吗?我们可以看下面的实例:我在文件夹里写了Office.java 类和 Word.java类,如下:Office.javaclass Office{public static void main(String[] args){if(args[0].equals("Word")){Word w = new Word();w.star...

weixin_36147152的博客 214

java 动态加载修改类_JAVA运行时动态加载类

想必大家在J2EE开发中一定会纳闷Servelt的改变,伴随的是Tomcat的重启。JAVA是否能够动态加载类呢?答案是肯定的。当然这不局限于J2EE,也可以做更多的拓展。Let's Hack The Code:Java Files List:ClassLoaderTest/IC.javaTest.javaClassLoaderTest/1/IC.javaC.javaClassLoaderTest...

weixin_33785596的博客 858

java反射加载类_Java反射 —— 动态加载类

class.forName("类的全称");不仅表示了类的类类型,还代表了动态加载类。编译时刻加载类是静态加载类,运行时刻加载类是动态加载类。编写一个Office.java如下:class Office {public static void main(String[] args) {if ("Word".equals(args[0])) {Word w = new Word();w.start(...

weixin_39972741的博客 216

java 类动态加载实例_java类的动态类加载

万物皆对象类是java.lang.Class的对象package com.mysec.reflex;import java.util.Scanner;//任何一个类都是Class的实例对象public class OfficeBeffer {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Str...

weixin_29779159的博客 210

java动态加载类 更新_Java动态加载类示例详解

在讲解动态加载类之前呢,我们先弄清楚为什么要动态加载类,静态加载不行吗?我们可以看下面的实例:我在文件夹里写了Office.java 类和 Word.java类,如下:Office.javaclass Office{public static void main(String[] args){if(args[0].equals("Word")){Word w = new Word();w.star...

weixin_39653764的博客 126

java 动态加载类_Java 从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类定义接口packageloader;publicinterfaceHelloIface{publicStringhello();publicStringsayHi(Stringname);}实现接口在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jarpackageloader;pub...

weixin_39561004的博客 297

java反射加载类_Java反射第二课 动态加载类

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

weixin_30558657的博客 169

java动态加载类 持久带_java动态加载类和静态加载类笔记

JAVA中的静态加载类是编译时刻加载类 动态加载类指的是运行时刻加载类二者有什么区别呢举一个例子 现在我创建了一个类 实现的功能假设为通过传入的参数调用具体的类和方法class office{public static void main(String args[]){if("word".equals(args[0]){word w=new word();word.run();}if("ex...

weixin_42495661的博客 104

Java反射之Java动态加载类

Java动态加载类 Class.forName(“类的全称”) 不仅表示了类的类类型,还代表了动态加载类 编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 new 创建对象是静态加载类,在编译时刻就需要加载所有可能使用到的类 Word word = new Word(); 通过动态加载类可以解决该问题 Class c = Class.forName(args[0]); 动态加载类例子 public class DynamicLoading { public static void

qq_38530648的博客 494
上一篇: Java1.6.0实现系统托盘技术
下一篇: 如何删除快捷方式的箭头
QJC13
博客等级 码龄19年 9粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值