Java - 可执行JAR?轻松反编译?

时间:2013-07-19 20:25:37

标签: java

首先,我是一名绝对的Java初学者。

我最近开始使用Java,除了变量,逻辑运算符,循环和我在JFrames中玩的东西之外,还有一些问题出现在我的脑海中。

  1. 我注意到我将程序保存为executable jar 程序似乎是1个文件。这意味着什么时候你去 开发一种可以使用许多资源的东西(图像,音频 文件和等)它们都将存储在这个jar文件中?

  2. 我注意到的第二件事是我可以提取jar文件并相当容易地反编译.class文件。考虑到这一点,让我说我使用MySQL数据库并连接到MySQL服务器,我必须使用JDBC驱动程序,我必须吗?硬编码密码?

  3. Java是否适合3D游戏?我真的很远,但请告诉我。我看到用Java 3D游戏引擎编写的游戏,如jMonkeyEngine,我印象深刻,但我在Java周围的帖子很慢(读)很慢,不适合{{1}这些游戏让我有些困惑。

3 个答案:

答案 0 :(得分:6)

  1. 如果你愿意,你可以这样做。在Oracle的Java教程中,您可以阅读有关创建可执行JAR文件的信息:Packaging Programs in JAR Files

  2. 任何用任何语言编写的程序都可以进行逆向工程,因此无论是否为Java,都不应该对密码进行硬编码。使用Java字节代码,反编译起来相当容易。

  3. 十多年前,当Java还很年轻时,与直接编译为本机代码的语言(如C或C ++)相比,它相对较慢。但是,多年来Java虚拟机已经取得了许多进展,在许多情况下Java程序的性能与C ++相当。仍然抱怨Java速度慢的人不是最新的,或者没有很多当前的Java经验。正如您从jMonkeyEngine演示中看到的那样,Java肯定足够快。然而,对于商业3D图形游戏,C ++似乎是使用的传统事实上的编程语言。请注意,为了从硬件中挤出最后一点性能,您需要专门为该硬件编写代码。 Java不是正确的工具,因为它的设计与平台无关。

答案 1 :(得分:2)

  1. 这是一个选择。它当然不是强制性的,您也可以从外部文件加载资源。

  2. 这是真的。这种应用程序的通用体系结构是将应用程序服务器放在客户端和实际数据库之间。您控制的应用程序服务器是知道数据库密码的。它只向客户公开他们应该允许执行的操作。

  3. Minecraft是用java编写的,所以QED。使用Java编写的游戏不太可能突破现代GPU性能的极限,但这不是每个游戏的目标。

答案 2 :(得分:2)

  1. 是的,你可以将所有东西放在一个罐子里
  2. 是的,但是给不受信任的用户提供对数据库的原始访问权限无论如何都不是一个好主意。更好的方法是使用公共API构建服务器应用程序并对用户进行身份验证。
  3. 这取决于。如果你想编写一个专注于丰富,高质量图形效果的3D应用程序,那么Java可能不是最好的选择。然而,Java中的3d很容易且相当高级,因此与其他低级技术相比,您可以节省大量的开发时间。