为什么我们在主函数中启动一个对象
Why do we initiate an object inside main function
class MergeSort {
// Merge two subarrays L and M into arr
void merge(int arr[], int p, int q, int r) {
}
// Divide the array into two subarrays, sort them and merge them
void mergeSort(int arr[], int l, int r) {
}
// Print the array
static void printArray(int arr[]) {
}
// Driver program
public static void main(String args[]) {
int arr[] = { 6, 5, 12, 10, 9, 1 };
MergeSort ob = new MergeSort();
ob.mergeSort(arr, 0, arr.length - 1);
System.out.println("Sorted array:");
printArray(arr);
}
}
我是 Java 的新手,我是从今天开始的,但我确实了解 OOP 的基本概念。 我的问题是 为什么我们要在 void main 中创建 MergeSort 的实例 (ob)? class MergeSort 里面已经有 main 方法了,可以直接访问函数 mergeSort 对吧?为什么我们不使用 MergeSort 的实例化对象来调用 printArray(arr),我们可以直接调用 printArray 那么为什么不使用 mergeSort 方法呢。
另外,如果你有的话,请给我推荐一些可以更好地学习java的资源。
感谢您的帮助。
it can directly access the function mergeSort right ?
不,不能,因为 mergeSort
没有声明为静态函数,这意味着您需要 MergeSort
的实例才能调用它。这就是您能够调用 printArray
的原因,因为它 是 静态的,这意味着您不需要封闭 class 的实例来调用它。
有关静态成员和方法的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
首先,欢迎来到 Java 世界 ;-)
My question is Why are we creating an instance(ob) of MergeSort in void main?
好吧,所有应用程序都有一个起点,通常所有 c-based 编程语言都从 Main 函数(方法). Java的起点是位于class中的static main method
,按照约定,class被称为主要.
Java 是一种 面向对象的编程 语言,因此 Java 应用程序应该包含许多 classes和这些classes可以基于面向对象的规则相互通信和交互。要使用 class,您需要创建它的一个实例,并且您无法选择从 main 方法创建您的第一个实例。
main method ..., it can directly access the function mergeSort right ?
Main方法是一个静态方法,你可以直接从它调用所有的静态方法,但是mergeSort
方法被定义为一个实例方法(不是静态的),没有办法直接调用它。您需要创建一个 class 的实例,然后调用它的方法。
MergeSort ob = new MergeSort();
ob.mergeSort(arr, 0, arr.length - 1);
why are we not using instantiated object of MergeSort to call
printArray(arr)
因为 printArray 是静态方法,您可以轻松地从 main 方法或任何其他静态方法调用它。阅读相关question的所有答案,对你有帮助。
请注意,您的 code-snippet 可以 class 化为 single-source-code 应用程序,这意味着您只有一个。单文件应用程序是小型实用程序。但真正的应用程序是由各种 classes 和文件组成的。
please suggest me some sources to learn java better if you have one.
在 Whosebug 中推荐学习资源并不常见,但我强烈建议先阅读在线视频教程,然后阅读书籍。 Pluralsight and Linkedin 有很好的学习途径。
class MergeSort {
// Merge two subarrays L and M into arr
void merge(int arr[], int p, int q, int r) {
}
// Divide the array into two subarrays, sort them and merge them
void mergeSort(int arr[], int l, int r) {
}
// Print the array
static void printArray(int arr[]) {
}
// Driver program
public static void main(String args[]) {
int arr[] = { 6, 5, 12, 10, 9, 1 };
MergeSort ob = new MergeSort();
ob.mergeSort(arr, 0, arr.length - 1);
System.out.println("Sorted array:");
printArray(arr);
}
}
我是 Java 的新手,我是从今天开始的,但我确实了解 OOP 的基本概念。 我的问题是 为什么我们要在 void main 中创建 MergeSort 的实例 (ob)? class MergeSort 里面已经有 main 方法了,可以直接访问函数 mergeSort 对吧?为什么我们不使用 MergeSort 的实例化对象来调用 printArray(arr),我们可以直接调用 printArray 那么为什么不使用 mergeSort 方法呢。
另外,如果你有的话,请给我推荐一些可以更好地学习java的资源。
感谢您的帮助。
it can directly access the function mergeSort right ?
不,不能,因为 mergeSort
没有声明为静态函数,这意味着您需要 MergeSort
的实例才能调用它。这就是您能够调用 printArray
的原因,因为它 是 静态的,这意味着您不需要封闭 class 的实例来调用它。
有关静态成员和方法的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
首先,欢迎来到 Java 世界 ;-)
My question is Why are we creating an instance(ob) of MergeSort in void main?
好吧,所有应用程序都有一个起点,通常所有 c-based 编程语言都从 Main 函数(方法). Java的起点是位于class中的static main method
,按照约定,class被称为主要.
Java 是一种 面向对象的编程 语言,因此 Java 应用程序应该包含许多 classes和这些classes可以基于面向对象的规则相互通信和交互。要使用 class,您需要创建它的一个实例,并且您无法选择从 main 方法创建您的第一个实例。
main method ..., it can directly access the function mergeSort right ?
Main方法是一个静态方法,你可以直接从它调用所有的静态方法,但是mergeSort
方法被定义为一个实例方法(不是静态的),没有办法直接调用它。您需要创建一个 class 的实例,然后调用它的方法。
MergeSort ob = new MergeSort();
ob.mergeSort(arr, 0, arr.length - 1);
why are we not using instantiated object of MergeSort to call printArray(arr)
因为 printArray 是静态方法,您可以轻松地从 main 方法或任何其他静态方法调用它。阅读相关question的所有答案,对你有帮助。
请注意,您的 code-snippet 可以 class 化为 single-source-code 应用程序,这意味着您只有一个。单文件应用程序是小型实用程序。但真正的应用程序是由各种 classes 和文件组成的。
please suggest me some sources to learn java better if you have one.
在 Whosebug 中推荐学习资源并不常见,但我强烈建议先阅读在线视频教程,然后阅读书籍。 Pluralsight and Linkedin 有很好的学习途径。