调用单独的 Java class 来设置或更改数据,而无需请求 return 或设置对象
Call a separate Java class to set up or change data without asking for a return or setting up an object
我正在尝试将 java 程序拆分为 .java 个文件,这些文件从主类调用:
public static void main(String[] args) {
//Call code in a separate .java file which sets up an array of objects.
//Call code to change the object values in a certain way i times
//Call code to do some calculations
//Call code to display some info
}
我遇到的所有指南都大致类似于调用单独的代码来做某事,指的是创建对象(例如MyObject myobject1 = new MyObject();
);或获取返回值(例如 x=myMethod(datain);
),而不是简单地创建或更改数据。
我是不是遗漏了什么,或者没有办法避免将所有 creating/changing 代码放在同一个主 .java 文件中,而无需人为创建对象或变得毫无意义 returns 这样的作为 Boolean datacreated = createMyData()
在我简单的 Fortran 派生世界中,我可以按如下方式拆分主程序:
call SetUpMyData
call ChangeMyData
call SomeOtherSub
//etc
嗯,有一种方法。如果你想有一个单独的 class 改变你的主 class 中的变量而不使用 return 语句或任何东西,你必须将它们定义为全局变量。你可以通过在你的主要方法之上创建它们来做到这一点,就像这样:
class Main {
public static int sampleNumber = 0;
public static String sampleString;
public static void main(String[] args) {
SupportClass.setVariables();
}
}
然后在您的 SupportClass 中,您想要更改第一个 class 的值,用 Classname.varaiblename
:
引用它们
class SupportClass {
public static void setVariables() {
Main.sampleNumber = 20;
Main.sampleString = "This works!";
}
}
但老实说,这不是一个好方法。如果您不想弄乱您的 main 方法,请在 main class 的底部添加一个辅助方法来设置变量。这不是设置变量的常用方法。
好吧,虽然您可以做一些事情,但您首先应该改变您的想法,使其更加面向对象。在那里你将有一个构造函数来设置一个对象。或者你会在同一个对象上调用多个方法 - 如果它们处理相同的数据。
main(String[] args) {
World world = new World(); // setup different fields
world.prepare(); // modify some fields
world.calculate();
System.out.println(world.getResult()); // or world.printResult();
}
您可以使用单例或字段隐藏一些数据依赖性,但您不应该这样做,因为这会使程序难以理解。
如果你想将一个更大的计算结构化到子例程中,你可以用私有方法做同样的事情:
class MyExperiment {
long sum, a, b;
void doExperiment() {
init();
simulate();
printResults();
}
private void init() {
a = 1;
b = 1;
}
private void simulate() {
sum = a + b;
}
private void printResult() {
System.out.println("sum=" + sum);
}
}
您可以从 new MyExperiment().doExperiment()
开始
你当然可以这样写程序。只需制作所有方法并声明 public
和 static
。您将能够在程序的任何位置使用它们:
public class Main {
public static int data[];
public static void initialize() {
Main.data = new int[100];
}
public static void print() {
System.out.println(Arrays.toString(Main.data));
}
public static void main(String[] args) {
Main.print();
Main.initialize();
}
}
这种方法的问题在于它更容易出错并且更难分析。如果你避免使用全局变量,编译器会发现很多错误:
public static int[] initialize() {
return new int[100];
}
public static void print(int[] data) {
System.out.println(Arrays.toString(data));
}
public static void main(String[] args) {
int data[];
Main.print(data); // compile error - data is not initialized
data = Main.initialize();
}
我正在尝试将 java 程序拆分为 .java 个文件,这些文件从主类调用:
public static void main(String[] args) {
//Call code in a separate .java file which sets up an array of objects.
//Call code to change the object values in a certain way i times
//Call code to do some calculations
//Call code to display some info
}
我遇到的所有指南都大致类似于调用单独的代码来做某事,指的是创建对象(例如MyObject myobject1 = new MyObject();
);或获取返回值(例如 x=myMethod(datain);
),而不是简单地创建或更改数据。
我是不是遗漏了什么,或者没有办法避免将所有 creating/changing 代码放在同一个主 .java 文件中,而无需人为创建对象或变得毫无意义 returns 这样的作为 Boolean datacreated = createMyData()
在我简单的 Fortran 派生世界中,我可以按如下方式拆分主程序:
call SetUpMyData
call ChangeMyData
call SomeOtherSub
//etc
嗯,有一种方法。如果你想有一个单独的 class 改变你的主 class 中的变量而不使用 return 语句或任何东西,你必须将它们定义为全局变量。你可以通过在你的主要方法之上创建它们来做到这一点,就像这样:
class Main {
public static int sampleNumber = 0;
public static String sampleString;
public static void main(String[] args) {
SupportClass.setVariables();
}
}
然后在您的 SupportClass 中,您想要更改第一个 class 的值,用 Classname.varaiblename
:
class SupportClass {
public static void setVariables() {
Main.sampleNumber = 20;
Main.sampleString = "This works!";
}
}
但老实说,这不是一个好方法。如果您不想弄乱您的 main 方法,请在 main class 的底部添加一个辅助方法来设置变量。这不是设置变量的常用方法。
好吧,虽然您可以做一些事情,但您首先应该改变您的想法,使其更加面向对象。在那里你将有一个构造函数来设置一个对象。或者你会在同一个对象上调用多个方法 - 如果它们处理相同的数据。
main(String[] args) {
World world = new World(); // setup different fields
world.prepare(); // modify some fields
world.calculate();
System.out.println(world.getResult()); // or world.printResult();
}
您可以使用单例或字段隐藏一些数据依赖性,但您不应该这样做,因为这会使程序难以理解。
如果你想将一个更大的计算结构化到子例程中,你可以用私有方法做同样的事情:
class MyExperiment {
long sum, a, b;
void doExperiment() {
init();
simulate();
printResults();
}
private void init() {
a = 1;
b = 1;
}
private void simulate() {
sum = a + b;
}
private void printResult() {
System.out.println("sum=" + sum);
}
}
您可以从 new MyExperiment().doExperiment()
你当然可以这样写程序。只需制作所有方法并声明 public
和 static
。您将能够在程序的任何位置使用它们:
public class Main {
public static int data[];
public static void initialize() {
Main.data = new int[100];
}
public static void print() {
System.out.println(Arrays.toString(Main.data));
}
public static void main(String[] args) {
Main.print();
Main.initialize();
}
}
这种方法的问题在于它更容易出错并且更难分析。如果你避免使用全局变量,编译器会发现很多错误:
public static int[] initialize() {
return new int[100];
}
public static void print(int[] data) {
System.out.println(Arrays.toString(data));
}
public static void main(String[] args) {
int data[];
Main.print(data); // compile error - data is not initialized
data = Main.initialize();
}