问题内容: 众所周知,有很多Java反编译器工具可以将.class转换为.java文件。 因此,我们需要保护.java文件免于反编译。我知道这是一个大话题,也许没有止境。 通常,有两种方法:混淆器和定制的类加载器。 是否有将这两种方式结合在一起的成熟解决方案或开源框架? 另一个方面与exe4j有关,它将jars打包到exe文件中,似乎可以保护java代码,因为我们看到的是exe文件而不是jar
问题内容: 情况1 案例1的输出:hello10 情况二 显示编译错误。但是,我无法理解。为什么呢 但是,当我注释掉的任何方法时,它就可以正常工作。谁能帮助我了解一下,这是怎么回事? 问题答案: 在Java语言规范(JLS)中以非常正式的方式定义了查找最具体的方法。我在尝试尽可能删除正式公式的同时提取了适用的主要项目。 总之,适用于您的问题的主要项目是: JLS 15.12.2:您的用例属于阶段3
问题内容: Java项目中系统内部版本号和版本号管理的当前最佳做法是什么?特别: 如何在分布式开发环境中系统地管理内部版本号 如何在源代码中维护版本号/可用于运行时应用程序 如何与源存储库正确集成 如何更自动地管理版本号和存储库标签 如何与持续构建基础架构集成 有很多可用的工具,并且ant(我们正在使用的构建系统)的任务将维护一个构建号,但是目前尚不清楚如何使用CVS,svn或类似的方法与多个并发
问题内容: 我在评论 @Esailija回答我的一个问题时读到 ISO-8859-1是唯一完全保留原始二进制数据的编码,其字节<->代码点精确匹配 我也在@AaronDigulla的这个答案中读到: 在Java中,ISO-8859-1(也称为ISO-Latin1)是1:1映射 我需要对此有一些了解。这将失败: 问题 我承认我不太了解它- 为什么它没有得到上面代码中的字节 ? 最重要的是, 这是哪里
问题内容: 当存在后置条件时,该方法的返回值一定不能为null,该怎么办? 我可以 但是断言可以关闭! 那可以吗 ? 还是针对此类情况使用用户定义的异常(例如NullReturnValueException)更好? 问题答案: 我认为在JVM为您执行操作之前尽早抛出NPE没问题-特别是对于null参数。对此似乎有一些争论,但是Java SE库中有许多示例正是这样做的。我不明白为什么NPE在您自己不
问题内容: 问题是: 编写一个称为mode的方法,该方法返回整数数组中最频繁出现的元素。假定该数组至少包含一个元素,并且数组中的每个元素的值都介于0和100之间(含0和100)。通过选择较低的值来打破平局。 例如,如果传递的数组包含值{27、15、15、11、27},则您的方法应返回15。(提示:您可能希望看一下本章前面的Tally程序,以了解如何解决这个问题呢。) 下面是我的代码,除了单元素数组
问题内容: 我想使用jarsigner对jar进行签名,然后使用Java应用程序对其进行验证,该Java应用程序没有将签名的jar作为其类路径的一部分(即,仅使用jar的文件系统位置) 现在我的问题是从罐子中取出签名文件,有没有简单的方法可以做到这一点? 我玩过Inflater和Jar InputStreams并没有运气。 还是可以通过更好的方式来实现? 谢谢 问题答案: 《安全提供程序实施指南》
问题内容: 我已经对这个程序进行了数小时的故障排除,尝试了几种配置,但是没有运气。它是用Java编写的,有33个错误(从之前的50个降低) 源代码: 错误日志(在JCreator中编译): 我觉得这是一个基本错误,但似乎找不到。如果有什么不同,我正在使用JCreator进行编译,并且一切都已正确安装。 更新:我已修复所涉及的错误(类声明和不正确的导入语句(有人回去并删除了一些分号)) 工作代码:
问题内容: 如何使用javac在Unix上的所有子文件夹中编译所有java文件? 问题答案: 使用诸如Ant或Maven之类的构建工具。与使用UNIX工具相比,这两种方法都可以使您以更好的方式管理依赖关系。And和Maven都还允许您定义除编译之外要执行的自定义任务。Maven还附带了用于管理远程存储库中的外部依赖项的约定,以及用于运行单元测试和支持连续集成的功能的约定。 即使您只需要偶尔编译一次
问题内容: 假设我有一个这样的课程: 我的应用程序中的许多其他类都在使用这些选项。现在,我只想更改其中一个选项,而仅部署已编译的类。但是,如果将这些字段插入到消费者类中,这将变得不可能,对吗? 是否有任何选项可以禁用内联编译时间常数? 问题答案: 您可以使用String.intern()获得所需的效果,但应注释您的代码,因为对此知之甚少。即 这样可以防止内联编译时间。由于它是指编译器将放入烫发中的
问题内容: 考虑以下Java 8代码段。 什么是越来越编译? 我知道Lambda并没有实现为匿名内部类。但是,因此接口必须在生成某种对象,但是尚不清楚在生成哪种对象。 Java 8中是否存在某种表示lambda表达式的新型对象? 更新 这是经过反编译的程序,该程序已使用eclipse java 8编译器编译,当您打开类文件时,以下输出来自eclipse。 看起来lambda表达式已变成包含lamb
问题内容: 我需要广泛地重构代码。我知道可以从Eclipse IDE内部重构类。但是我可以在Java项目中使用任何API,以便通过代码动态重构项目吗? 我需要一些有关如何实现以下目标的想法:一个程序,该程序调用所有Eclipse重构以重命名和循环移动,以一次重构整个项目! 我不想通过扩展重构类来引入新的重构类型。我只想以编程方式调用它们。 问题答案: 下面的答案很好,但是对于那些需要更庞大,更美味
问题内容: Java编译器了解if语句的条件始终为true,因此y将始终被初始化。没有编译错误,如预期的那样。 但是,当我将x的声明和初始化分为两行时,编译器似乎没有得到条件始终为true且y将始终被初始化的信息。 同样的事情在这里发生,编译器会损失精度误差。 同样,编译器可以理解x在b的范围内。 问题答案: 它与编译器如何确定是否执行语句有关。它在JLS#16中定义: 每个局部变量和每个空白的f
问题内容: 我定义了以下Java类: 当我尝试编译它们时,出现以下错误: 如果我删除文件并从所有文件中编译: 因此Java允许我定义一个名称中包含美元符号的类。如何编译我的原始示例? 问题答案: 之所以会发生名称冲突,是因为您定义的顶级类A $ B与类A的静态内部类B的生成名称具有相同的名称。由于两者都存在,因此编译器无法解决冲突。 JLS说: $字符仅应在机械生成的源代码中使用,或很少用于访问旧
问题内容: 目前,我们使用HSQLDB作为嵌入式数据库,但是随着数据量的增长,我们将搜索内存占用更少的数据库。 Derby / JavaDB 目前无法选择,因为它在系统属性中全局存储属性。所以我们想到了h2。 当我们使用HSQLDB时,我们创建了一个Server对象,设置参数并启动它。这描述在这里(和如实施例中的类org.hsqldb.test.TestBase的给定)。 问题是:这也可以与h2数