你如何#include java中的文件?

来自C ++环境我习惯将我需要的许多函数拆分成funcs.h文件,然后执行#include "funcs.h" ,然后将函数原型添加到主.cpp文件中。 现在我开始使用java(主要是使用我的Minecraft ModloeaderMp)并且我已经创建了一个funcs.java文件,其中有一些预制函数(例如一些函数用于文件复制,给出堆栈的项目等)。 我已经在使用语句Public class mod_mine extends BaseModMp ,有没有一种方法可以导入函数或者我可以只做另一个Public class mod_mine extends funcs

你在Java中没有#include ,你import package.Class 。 从Java 6(或它是5?)开始,您还可以import static package.Class.staticMethodOfClass ,它将实现您尝试执行的某些forms。

另外,正如@duffymo所指出的那样, import只会使您系统地为导入的类名添加包名称前缀,或者使用包和类名导入静态方法名称。 实际的#include语义在Java中根本不存在 – 根本不存在。

也就是说,拥有一个“funcs.java”文件在我看来就像你开始将脚趾浸入一些反模式……你应该远离这些。

Java中没有#include

我不喜欢具有存储所有变量的funcs.java的设计。 对象是封装在单个组件中的状态和行为。 如果你这样做,你不是以面向对象的方式进行设计。

好名字很重要。 扩展Stuff2一个名为Stuff的类最好只是一个糟糕的例子。

这不是好Java。 我也不认为它是好的C ++。

Java是一种面向对象的编程语言,这是有原因的。

虽然您可以从其他包中导入类,但Java中没有#include。 制作单独的类func.java来存储变量可能不是一个好主意,除非所有这些都是常量。 通过扩展某些类,您可以重用该函数。 但扩展类是否通过了IS A测试,如果不是这可能是一个坏主意。

如果从C ++开始,通过一些好书,例如Head First java可能会有很大帮助。

听起来你把所有的方法放在同一个class级。 你应该将它们分开:

实用课程

这些应该包含静态方法,可以执行诸如获取文件内容,显示对话框屏幕或将两个数字组合在一起。 它们并不真正属于对象类,它们不需要实例,并且它们在整个程序中被广泛使用。 有关此的一个很好的示例,请参阅java.lang.Math 。

常量类或配置文件

这可以是包含static final成员的Constants类,如PI = 3.1415 。 您可以使用Constants.PI访问它们。

或者,您可以使用配置文件并将其加载到Configuration并使用config.get("database")类的内容访问配置变量

其他

如果您的代码不适合任何这些代码,您将需要将它放入某个类中,以便您的代码适合面向对象的编程概念 。 从你的问题来看,听起来你会想要阅读这个。 我首先会阅读Head First Java ,然后可能会阅读其他一些关于Java中面向对象编程的书籍。 在那之后,我会看一些设计模式 。

java中没有#include。 您可以使用import语句在文件中提供类和接口。

实际上……有一种方法可以使用与C #include相同的语义(该关键字后来被C ++借用,看起来很花哨……)。 它只是没有用相同的词来定义,但它完全符合您的要求。

首先,让我们看看你在C ++中用#include做什么来理解这个问题:

  • 包括#defines
  • “转发”函数定义(它们的“主体”在其他地方定义,在类实现中,如果你还记得Turbo Pascal,你明白我的观点),
  • 定义结构,

这就是它。

对于结构定义,没有必要,那就是老式的C:在C ++中你不再定义struct {}了多年,你用class和访问器方法定义class结构,它在Java中是相同的:没有typedef struct {}在这里。

为此,您有“接口”声明,请参阅https://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

它完全符合您的要求:

  public interface MyDefines { final CHAR_SPACE : ' '; // ugly #define int detectSpace(FileInputStream fis); // function declaration // and so on } 

然后,使用:

  public class MyClass extends MyAncestor implements MyDefines { ... // implementation of detectSpace() int detectSpace(FileInputStream fis) { int ret = 0; char Car; if((Car = fis.read()) != -1) && (Car == CHAR_SPACE)) ret++; ... } 

阅读上面给出的链接,它充满了有用的案例。