Java - 可执行的JAR文件?易于反编译?

6

我最近开始学习Java,除了变量、逻辑运算符、循环和类似的东西之外,我还玩了一下JFrames,现在有几个问题让我感到困惑。

  1. 我注意到将程序保存为可执行jar文件后,该程序似乎只是一个单独的文件。这是否意味着当您要开发使用许多资源(图像、音频文件等)的程序时,它们都会存储在此jar文件中?

  2. 我注意到第二件事是我可以轻松地提取jar文件并反编译.class文件。假设我使用MySQL数据库并且必须使用JDBC驱动程序连接到MySQL服务器,我必须在代码中硬编码密码吗?

  3. Java适合制作3D游戏吗?我离这个目标还很远,但请告诉我。我看到使用Java 3D游戏引擎(如jMonkeyEngine)编写的游戏,给我留下了深刻的印象,但我也读到过一些帖子说Java很慢,不太适合制作3D游戏,这让我有点困惑。


1
永远不要硬编码密码。也不要暴露数据库。 - Hovercraft Full Of Eels
1
  1. 游戏例子:Minecraft是用Java编写的。
- dghalbr
7
如果你现在只是在学习Java基础并且担心3D编程、打包和其他话题,那么你很可能会让自己得动脉瘤。先专注于学习基础知识,等你掌握了基础后再转向更高级的主题。如果你担心投入时间最终目标是3D游戏设计,别担心。你将学到有价值的技能,可移植到C/C++或其他编程语言。 - Robert H
1
@booleanCube 是的,但它在我的电脑上运行速度比许多其他游戏慢得多。 - ApproachingDarknessFish
@jahroy,我从未说过他们没有,也没有打算暗示任何关于年龄的事情,我只是向一个新手编程Java的人提供了建议。他们从基础概念到高级概念的学习速度取决于他们自己。请记住,所有建议可能适用于某些人,也可能不适用于某些人。接受或不接受建议由你自己决定。 - Robert H
显示剩余4条评论
3个回答

6
  1. 如果您愿意,可以这样做。在Oracle的Java教程中,您可以了解有关创建可执行JAR文件的内容:在JAR文件中打包程序

  2. 任何语言编写的任何类型的程序都可以被反向工程,因此无论是Java还是其他语言,您都不应该硬编码密码。使用Java字节码进行反编译相对容易。

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


2
  1. 这只是一种选择。当然,你也可以从外部文件加载资源。

  2. 没错,这种应用程序的常见架构是在客户端和实际数据库之间放置一个应用程序服务器。你控制的应用程序服务器知道数据库密码。它只向客户端公开他们被允许执行的操作。

  3. Minecraft是用Java编写的,所以QED。你不太可能用Java编写的游戏推动现代GPU性能的极限,但并不是每个游戏的目标都是如此。


1
利用LWJGL的游戏可以轻松地将GPU推向极限,因为它允许通过Java访问OpenGL。顺便说一下,Minecraft使用LWJGL。 - William Morrison

2
  1. 是的,你可以把所有东西放在一个jar文件中。
  2. 是的,但是给不受信任的用户直接访问数据库通常不是一个好主意。更好的方法是构建一个具有公共API和用户认证的服务器应用程序。
  3. 这取决于情况。如果你想编写一个重点放在丰富、高质量图形效果上的3D应用程序,那么Java可能不是最佳选择。然而,在Java中进行3D开发很容易且相当高级,因此与其他低级技术相比,你可以节省大量开发时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接