web 项目里面经常会定义一些常量的接口,类,方便开发引用。在维护工作中,如果修该了这个常量值Constant类,发布过程中只替换Constant类,你会发现引用类中的值根本没有改掉。
例:定义一个常量类Constant 定义了两个基本常量。
public class Constant {
public final static int Max_size = 120;
public final static String xxSQL="select *From SCOTT;";
}
写个调用类:
public class Client {
public static void main(String[] args ){
System.out.println("引用基本类型常量:"+Constant.Max_size);
System.out.println("引用String类型常量:"+Constant.xxSQL); }
}
结果大家都知道:
引用基本类型常量:120
引用String类型常量:select *From SCOTT;
如果你用反编译工具打开Client.class的内容你就会发现,它的内容是这样的:
public class Client
{
public Client()
{
}
public static void main(String args[])
{
System.out.println("引用基本类型常量:120");
System.out.println("引用String类型常量:select *From SCOTT;");
}
}
我操,居然没有引用到Constant的变量,而是把他们的值。
总结:
对于final 修饰基本类型和String类型的,我们的智能IDE编译器会认为它是稳定态的,所以在编译器是就直接放值编译到了字节码中了,避免了运行期的引用,提高效率。
维护工作中如果咱们只对类似Constant类的重新发布,结果显然易见就是--莫名其妙被坑了...
相关推荐
5. **运行阶段**:在运行时,需要一个解密器来解密加载到JVM的类文件,这个解密器通常是ClassFinal提供的。 四、ClassFinal与其他保护措施的结合 尽管ClassFinal提供了强大的保护,但单一的防护手段可能不足以抵挡...
在 Java 编程中,我们经常会定义一个常量类来管理项目中的常量值,例如: ```java public class AppConst { public static final String STR_CONST_1 = "String1"; public static final String STR_CONST_2 = ...
要创建一个自定义插件,你需要编写一个实现了`org.gradle.api.Plugin`接口的类,并声明一个`apply`方法,用于向项目应用插件逻辑。 在我们的场景中,目标是修改编译后的class文件,这可能涉及到字节码操作,例如...
标题中的"PyPI 官网下载 | django-class-registry-0.0.2.tar.gz"表明这是一个在Python Package Index(PyPI)上发布的开源软件包,名为`django-class-registry`,版本为0.0.2,以tar.gz格式打包。PyPI是Python开发者...
其中,发布编译后的Class文件是Jenkins的一个重要应用场景。本文将详细介绍基于Jenkins发布编译后的Class文件的整个过程,并提供详细的示例代码,以便读者更好地理解和应用。 二、创建自由风格项目 在Jenkins中,...
- 在这里可以配置JAR文件的清单文件,主要是设置主类名(Main-Class属性),这是运行JAR文件时会首先执行的类。 - 可以添加其他自定义属性,例如`Class-Path`来指定依赖库的位置等。 4. **导出JAR文件**: - ...
至于文件“SecurityManage”,这可能是项目中的一个安全管理相关的类或模块。在Jetty中,安全管理主要涉及身份验证和授权。我们可以通过实现自定义的`ConstraintSecurityHandler`,配置用户、角色和权限,以实现基于...
本篇文章将详细介绍如何在MyEclipse中利用Ant来发布项目。 首先,Ant的工作原理是通过一个名为`build.xml`的配置文件来定义一系列的任务,这些任务可以是编译源代码、创建JAR或WAR包、复制文件等。在描述中提到的...
在Unity3D中,开发游戏或交互式应用时,我们经常需要将其发布为Web Player格式,以便用户在浏览器中直接体验。然而,Unity Web Player在加载时会显示Unity的默认Logo,这可能不符合某些开发者的品牌需求。这篇内容将...
在Visual Studio等集成开发环境中,解决方案是一个容器,它可以包含一个或多个相互关联的项目(Projects),这些项目共同构成了一个完整的应用程序或系统。解决方案提供了一种管理项目依赖、构建顺序和配置的方式。 ...
在项目中创建一个继承自`TinkerApplication`的自定义应用类,用于初始化Tinker。例如: ```java public class MyApplication extends TinkerApplication { @Override public void onCreate() { super.onCreate()...
Apache Commons BCEL(Byte Code Engineering Library)是Apache软件基金会的一个开源项目,主要目的是提供对Java字节码的高级操作。这个库允许开发者分析、创建、修改和编译Java类文件,为开发动态类生成和代码分析...
- 如果你有一个包含多个`.class`文件的文件夹,比如`test`,要将其打包为`test.jar`,命令会是这样的: ``` jar cvf test.jar test ``` - 这个命令会将`test`文件夹中的所有内容打包到`test.jar`中。如果需要...
在这个场景中,我们将讨论如何在Java中调用MQTT,实现订阅和发布功能,并通过封装`MQTTUtils`工具类来简化这一过程。 首先,我们需要引入一个Java MQTT客户端库,如Eclipse Paho项目提供的`org.eclipse.paho.client...
JavaAssist是一个强大的Java字节码操作库,它允许开发者在运行时动态地修改或创建新的Java类。这个jar包的最新版本是在4月16日更新的,提供了最新的功能和改进,对于需要进行字节码操作的Java开发工作尤其有用。 在...
PHP LJ-tools class 是一个专门为LiveJournal(简称LJ)网站设计的API类库,允许开发者通过PHP语言与LJ的接口进行交互,实现诸如读取和发布消息、使用控制台以及管理朋友和非朋友用户等功能。这个开源项目目前处于...
应用补丁时,可能需要通过更新项目配置或直接替换源代码目录中的文件。 六、自动化处理 为了提高效率,开发者通常会编写脚本或程序来自动化补丁的提取和应用过程。这可能涉及到解析`copyclass.txt`,调用`...
war(Web Application Archive)是一个Java Web应用的标准打包方式,通常包含WEB-INF目录,其中存放Java类和库、配置文件、页面和其他静态资源。在Web服务器或应用服务器上部署时,这些资源被解包并放置到服务器上的...
在Java中,模块可能是一个包含相关包和类的独立项目。 自定义模块的优势在于提高了代码的可维护性、可读性和可重用性。它们使得开发者能够更有效地组织代码,避免了大而复杂的单体应用。此外,通过模块化设计,...
对于点对点通信,我们可以创建一个发送消息的Java类,如下所示: ```java @Service public class MessageProducer { @Autowired private JmsTemplate jmsTemplate; public void sendMessage(String message) { ...