在JAVA中动态执行类的静态方法

GPU架构(1.1)--介绍 GPU的 VPU(Vision Processing Unit)架构 基于自研的 VPU(Vision Processing Unit)架构,专为高性能图形处理和深度学习设计。VPU 架构通过优化计算单元、内存层次结构、同步机制和指令流水线,提供了卓越的性能和能效。VPU 架构通过优化计算单元、内存层次结构、同步机制和指令流水线,提供了卓越的性能和能效。这种架构不仅适用于高性能图形处理,还广泛应用于深度学习、科学计算和边缘计算等领域。通过了解 VPU 架构的详细设计和工作原理,读者可以更好地利用这些先进的 GPU 技术,开发出高效、可靠的计算系统。 阅读详情

在JAVA中动态执行类的静态方法,本文通过示例介绍了如何通过java.lang.reflect.*包所提供的反射机制来实现运行时构造类实例/执行类静态方法。

 

/*
在JAVA中,通过Class.forName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用Class.forName(configClassName).getInstance()就可以构造一个特定的实现类实例,而不用每次修改源代码。这样对于程序来讲只用关心接口的定义,用户只用进行配置文件的设置就完成了同一功能的不同实现的切换。
但是如果实现类需要通过静态方法来进行初始化的时候,动态加载的过程就会复杂一些。同样的以数据库连接池为例,通常连接池的构造函数都会被定义为私有的,而通过自定义的getInstance()静态方法来得到唯一实例。这种情况下简单的通过Class.forName().getInstance()就无法正确构造实例。
幸好JAVA所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。通过反射机制,我们能够完成基本上所有的运行时决定的动作(虽然这一实现要比其他动态语言,比如PHP,的eval()的使用要复杂的多)。

下面通过实际的例子说明如何在运行时动态访问类的静态方法。
-------------------------------------------------------

*/
import java.lang.reflect.*;

public class myTestClass{
    private static Object pLock = new Object();

    private static myTestClass p_instance = null;
    private String s_configName = "";
    private boolean b_isFromResource = true;

    public static 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();
    }


    public void echoInfo(){
        System.out.println(
"current arguments : configName=["+
                            s_configName
+"],isFromResource=["+
                            b_isFromResource
+"]");
    }


    public static void 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.");
        }
    }
}

 
使用GitLab限制开发者使用CI/CD的权限,三种方案 使用三种方案来限制开发人员的CI/CD权限。 阅读详情

相关推荐

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 467

Java基础系列:Class.forName、static及应用

(1)Class.forName(String name)生成指定类名或接口名的类对象(Class)。与方法等价:Class.forName(className, true, currentLoader), currentLoader即定义当前类的类加载器。 (2)Class.forName:在方法区生成java.lang.Class对象。即类加载过程:通过全限定名获取类的二进制字节流,将二进制字节流转化为方法区的运行时数据结构。 (3)生成Class对象后,即可执行不依赖对象的静态块代码,如MySQL驱动

天然玩家的博客 1705

如何用DETR(detection transformer)训练自己的数据集

DETR(detection transformer)简介 DETR是Facebook AI的研究者提出的Transformer的视觉版本,是CNN和transformer的融合,实现了端到端的预测,主要用于目标检测和全景分割。 DETR的Github地址:link

weixin_50233398的博客 3万+

使用beanShell来解析执行java的String方法,类似javascipt的eval方法

今天项目中遇到一个问题,需要根据一段String表达式的运算结果来决定后续执行的分支,表达式为动态的,具体实现时,为传入一些参数只想该表达式,表达式返回一个结果,对结果进行判断最终决定分支。一开始没啥思路。经过baidu和google的学习之后,发现beanShell可以很完美的解决该问题。故写在这里,希望可以帮助遇到同样问题的童鞋们,同时也作为记录免得自己后续给忘记了。 ...

weixin_30892987的博客 172

树莓派5新手必看:保姆级ibus中文输入法安装与配置全流程(含.bashrc设置避坑)

本文详细介绍了在树莓派5上安装和配置ibus中文输入法的完整流程,包括系统环境准备、ibus框架安装、图形界面配置及常见问题解决方案。通过清晰的步骤说明和避坑指南,帮助新手快速实现中文输入功能,提升开发效率。

weixin_29159441的博客 531

Jupyter地铁数据分析预测地铁后7天小时客流量

地铁数据分析 基于八月地铁刷卡数据,以前23天的数据作为训练数据,预测后7天各个地铁站点在6点—23点每个小时的客流量。 import pandas as pd import time import numpy as np import matplotlib.pyplot as plt ...

qq_45868915的博客 1753

Java reflect 动态调用静态方法

Java reflect 动态调用静态方法

longtimetoc的博客 1172

离线安装ambari 更换spark版本 集成carbondate文档

1、Linux系统环境配置 1.1 配置IP地址 vim /etc/sysconfig/network-script/ifcfg-eth0 “DEVICE”:网卡对应的设备别名,如ifcfg-eth0第一块网卡; “HWADDR”:网卡物理地址; “BOOTPROTO”:网卡获得ip地址的方式,Static(静态 ip地址)dhcp(通过dhcp协议获取ip)bootip通过boot...

weixin_44742962的博客 3036

Java静态方法是如何执行的,Java中的static静态代码块的使用详解

一.与静态方法的比较一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的。二.静态方法...

weixin_35761094的博客 1213

IAR安装成功的关键:STM32设备支持文件导入方法

IAR安装常卡在设备支持缺失这一步——尤其对STM32新手,没导入对应芯片包,编译直接报错。实测发现,必须通过IAR的Tools→Options→IDE→Configuration→Device Support手动加载STM32设备支持文件,否则新建工程时连芯片型号都选不到。IAR安装是否顺利,往往就差这一步。

weixin_42527589的博客 680

机器学习实战7-基于机器学习算法预测相亲成功率

大家好,我是微学AI,今天给大家介绍一下机器学习实战7-基于机器学习算法预测相亲成功率,随着社会的发展,大家都忙于事业,对自己的终身大事就耽搁了,相亲是一种传统的寻找伴侣的方式,随着时代的发展,相亲的方式也在不断地改变。在这个过程中,了解相亲双方的信息以及预测相亲是否成功变得越来越重要。本文将介绍如何使用随机森林算法对相亲成功进行预测,通过分析男女双方的房子、车子、长相、家庭条件、父母情况、生活习惯、学历、性格、兴趣等因素,来预测相亲是否成功。

微学AI的博客 3035

在Java中动态执行类的静态方法

在Java中,通过Class.forName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用Class.forName(configClassName).getInstance()就可以构造一

冥界执法者 797

Chamfer Loss

ChamferLoss是一种常用于3D点云(pointcloud)处理的损失函数,特别是在点云生成和对齐任务中。它的目的是度量两个点集之间的相似度,特别是在点云重建、配准或生成等任务中,常用于优化模型使得生成的点云更接近真实的点云。

夜空中明亮的星的专栏 455

java设计距离静态方法_在Java中动态执行类的静态方法

在Java中动态执行类的静态方法时间:2007-12-27来源:不详作者:林子在Java中,通过Class.forName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用Class.f...

weixin_42491886的博客 102

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java 动态加载类执行非静态方法_JAVA类的静态加载和动态加载以及NoClassDefFoundError和ClassNotFoundException...

我们都知道JAVA初始化一个类的时候1.可以用new 操作符来初始化,这是动态加载2.也可通过Class.forName的方式来得到一个Class类型的实例,然后通过这个Class类型的实例的newInstance来初始化.这是动态加载.在很多框架中经常使用,通过用property文件的方式指定类名称.如我们熟悉的在写JDBC代码的时候加载不同数据库的驱动.静态加载的时候如果在运行环境中找不到要初...

weixin_31869917的博客 263

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

java 动态加载类执行非静态方法_为什么在Java中new一个子类会加载其父类的非静态代码块?...

实例化一个子类对象必然执行子类构造函数的某个重载,子类构造函数的每个重载必然先执行其超类的构造函数的某个重载,超类构造函数的每个重载必然先执行超类的实例初始化块。1、Object的构造函数首先反编译看一下java.lang.Object的构造函数:$ javap -c java.lang.ObjectCompiled from "Object.java"public class java.lang...

weixin_42345187的博客 325

pscad IEEE标准系统搭建说明

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

java 静态方法重写_Java 类中可以覆盖静态方法吗?

Java技术栈www.javastack.cn打开网站看更多优质文章Java 类中可以覆盖静态方法吗?不,你不能在Java中覆盖静态方法,但在子类中声明一个完全相同的方法不是编译时错误,这称为隐藏在Java中的方法。你不能覆盖Java中的静态方法,因为方法覆盖基于运行时的动态绑定,静态方法在编译时使用静态绑定进行绑定。虽然可以在子类中声明一个具有相同名称和方法签名的方法,看起来可以在Java中覆...

weixin_32373123的博客 285

java 静态的 调用动态,java 反射 动态调用不同类的静态方法(推荐)

准备调用的类package ss;public class Use {public static Integer demo( String s ){System.err.println(s+"<<<<<Integer ss=1;return ss;}}执行调用的类public class Ceshi {public static void main(String[]...

weixin_39970064的博客 288

java 静态方法 反射_java 利用反射调用静态方法的示例

内容简介主要介绍使用反射的机制来调用执行类中的静态方法。静态方法public class GisUtil {private final static Logger logger = LoggerFactory.getLogger(GisUtil.class);public static ExportMethodResultDto gisService1 (String str){logger.in...

weixin_29999895的博客 1508

Java中子类是否可以继承父类的static变量和方法而呈现多态特性

静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法。 它们只能访问static数据。 它们不能以任何方式引用this 或super。 无论是static修饰的变量,还是static修饰的方法,我们都知道他们是属于类本身的,不是属于某一个对象的,当声明一个对象时,并不产生static变量和方法的拷贝。也就是说,用static修饰的变量和方法在类加载的时候,只分

wounler的博客 2308

静态与动态

这会导致静态代码块中的代码被执行,这些代码可以用于初始化类的静态变量或执行其他的初始化逻辑,并且只会执行一次。动态变量(实例变量)是指属于类的一个实例的变量,在实例化对象时候被初始化,在每个对象的生命周期内保留一份副本。通过类的实例来访问它们。使用静态代码块时需要注意的是,其主要用于在类加载时初始化静态变量和执行其他初始化操作,因此代码块中的代码应该尽可能地简洁。在静态代码块中执行一些复杂的初始化操作,例如初始化连接池或其他的资源,这可以保证这些资源在类加载时就被初始化并且在整个程序生命周期内可供使用。

2301_76716766的博客 735

java 中double类的方法_Java动态调用类中方法代码

在Java中,调用类的方法有两种方式:对于静态方法可以直接使用类名调用,对于非静态方法必须使用类的对象调用。反射机制提供了比较另类的调用方式,可以根据需要指定要调用的方法,而不必在编程时确定。调用的方法不仅限于public的,还可以是private的。编写程序,使用反射机制调用Math类的静态方法sin()和非静态方法equals()。思路如下:使用Math.class.getDeclaredMe...

weixin_34354231的博客 344

【Java】反射基础(Class类)

主要介绍反射的基础Class类、以及它的内部类Field类、Method类。以及简单介绍了反射。

摸鱼小小虫的博客 1494

java程序执行顺序理解

public class StaticTest { public static int k = 0; public static StaticTest t1 = new StaticTest("t1"); public static StaticTest t2 = new StaticTest("t2"); public static int i...

weixin_30627381的博客 138
上一篇: Win32学习笔记 第三章 HelloWin 选择自 villager 的 Blog
下一篇: 世界500强公司的面试问题与答案提示
麦子_9
博客等级 码龄24年 183粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值