1、經(jīng)典程序解析
這是一個經(jīng)典的Java
程序,它使用了面向對象的編程風格:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
第一行代碼:
public class HelloWorld {
這行代碼定義了一個名為HelloWorld
的公共類(public class
),該類是程序的入口點。Java
程序中的每個類都必須以一個公共類來定義。文件名必須與公共類的名稱相同,并以.java
作為文件擴展名。
注:
String args[]
與String[] args
都可以執(zhí)行,但推薦使用String[] args
,這樣可以避免歧義和誤讀。
public static void main(String[] args)
這行代碼定義了一個公共靜態(tài)方法(public static method)main
,它是Java
程序的起點。在程序執(zhí)行時,從main
方法開始執(zhí)行。main
方法是程序的入口,可以執(zhí)行程序中的其他代碼。
main
方法的參數(shù)是一個字符串數(shù)組String[] args
,它允許在命令行中傳遞參數(shù)給程序。args
數(shù)組在程序運行時可以用來接收命令行參數(shù)。
這是 Java
程序的入口地址,Java
虛擬機運行程序的時候首先找的就是 main
方法。跟 C
語言里面的 main()
函數(shù)的作用是一樣的。只有有 main() 方法的 Java
程序才能夠被 Java
虛擬機運行,可理解為規(guī)定的格式。
對于里面的參數(shù)及修飾符:
-
public
:表示的這個程序的訪問權限,表示的是任何的場合可以被引用,這樣Java
虛擬機就可以找到main()
方法,從而來運行javac
程序。 -
static
: 表明方法是靜態(tài)的,不依賴類的對象的,是屬于類的,在類加載的時候 main() 方法也隨著加載到內(nèi)存中去。 -
void
:方法是不需要返回值的。 -
main
:約定俗成,規(guī)定的。 -
String[] args
:從控制臺接收參數(shù)。
為什么是
String[] args
,這個args
是干嘛的?
String[] args
可以看出來它是一個數(shù)組。在命令行中比如運行 Test.class
文件,你可以這樣寫:
java Test runoob
相當于給數(shù)組傳入了一個 runoob
字符串。也可以打印出來,可以作為簡單的輸入。
例如:
public class Test {
public static void main(String[] args) {
System.out.println(args[0]);
}
}
$ javac Test.java
$ java Test runoob
runoob
此處注意,main
是一個程序的入口,一個 java
程序運行必須而且有且僅有一個 main
方法。
args[0]
是你傳入的第一個參數(shù),args[1]
是傳入的第二個參數(shù),以此類推。
String[] args
還有一種等價的寫法:String... args
前者為數(shù)組形式, 后者為可變參數(shù)形式。
前者用得較多, 但是看到后者也應認識。
Java
程序利用main
函數(shù)中args
參數(shù)實現(xiàn)參數(shù)的傳遞(傳遞空格處理)
public class Test
{
public static void main(String []args)
{
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
}
}
用控制臺編譯運行:
$ javac Test.java
$ java Test aaa bbb ccc
aaa
bbb
ccc
注意:三個參數(shù)之間用空格隔開!
如果要輸出空格怎么辦?
只需要在包含空格的參數(shù)上,使用雙引號 ""
即可。
實例運行:
$ java Test aaa "b bb" ccc
aaa
b bb
ccc
2、包里面的多個類
一個包里面可以有多個
java
類嗎?
是的,一個包(package)
可以包含多個Java
類。在Java
中,包是一種組織代碼的方式,它可以將相關的類和其他資源放在一起,使代碼更有結構和可維護性。
一個包可以包含多個Java
類文件,并且這些類可以相互引用和訪問。這種組織結構有助于避免類名沖突,并使代碼更易于組織和管理。
要在一個包中創(chuàng)建多個Java類,你可以將這些類放在同一個包目錄下,并確保每個類的文件名與類名相匹配。例如,假設你有一個名為com.example
的包,你可以在該包下創(chuàng)建多個Java
類文件,如ClassA.java
、ClassB.java
等。
com/
example/
ClassA.java
ClassB.java
在這個例子中,com.example
是包的名稱,ClassA.java
和ClassB.java
是位于該包下的兩個Java
類文件。
2.1 全限定名調用程序
在Java
代碼中引用包中的其他類時,你需要使用類的全限定名(fully qualified name)
,即包名加類名。例如,在ClassA.java
中引用ClassB
的話,你需要使用com.example.ClassB
作為類的名稱。
package com.example;
public class ClassA {
// 引用ClassB
com.example.ClassB b = new com.example.ClassB();
// ...
}
一個包可以包含多個Java
類文件,并且這些類可以相互引用。這種組織方式有助于將相關的類組織在一起,提高代碼的可讀性和可維護性。
2.2 包名的層數(shù)
在上面的結構中,
com.example
是一個包名,需要限定包名的層數(shù)嗎?可不可以沒有example
這一層?
在Java
中,包名是按照一定的命名約定來組織和識別代碼的。包名通常以域名的倒序形式命名,以確保包名的唯一性和可讀性。
對于包的層數(shù)并沒有硬性的限制要求,你可以根據(jù)自己的需要來組織包的層次結構。每個層級在包名中通過.進行分隔。
在你提供的示例中,com.example
是一個包名,其中com
是頂級包,example
是子包。這種層次結構有助于將相關的類組織在一起,并提供更好的可讀性和可維護性。當多個開發(fā)者共同開發(fā)項目時,按照這種約定命名包可以減少類名沖突的可能性。
根據(jù)Java
的命名約定,建議使用類似域名的包名結構,但并不是強制要求。你可以根據(jù)你的項目需求和個人喜好來命名包。
因此,可以有不同的包層級結構,如只有一個層級的包名com
、兩個層級的包名com.example
,或者更多層級的包名com.example.subpackage
,以滿足你的項目需求。
包名的層數(shù)沒有硬性的限制要求,你可以根據(jù)需要組織包的層次結構。通常建議使用類似域名的包名結構,但并不是強制要求,可以根據(jù)項目需求和個人喜好來命名包。
2.3 類中main位置的選擇
在一個包中,有多個
java
類,每一個類中都是public static void main(String[] args) { ...}
這樣的代碼嗎?
在一個包中,每個類都可以有一個public static void main(String[] args)
方法,但只能有一個類被指定為程序的入口點,即只能有一個類的main
方法被執(zhí)行。
當你運行Java
程序時,你需要指定要執(zhí)行的類,Java
虛擬機(JVM
)會從該類的main
方法開始執(zhí)行。其他類中的main
方法只是普通的方法,除非被顯式調用,否則不會被執(zhí)行。
如果一個包中有多個類,每個類中都有main
方法,你需要在運行程序時明確指定要執(zhí)行的類。使用Java
命令來執(zhí)行程序時,通過提供完整的類名來指定要執(zhí)行的類。例如:
java com.example.ClassA
在這個例子中,com.example.ClassA
是包com.example
中的一個類,它的main
方法將被執(zhí)行。其他類中的main
方法將不會被自動執(zhí)行。
在一個包中可以有多個類,每個類都可以有自己的main
方法,但只能指定一個類作為程序的入口點。其他類中的main
方法需要通過顯式調用來執(zhí)行。
2.4 不同包中類的調用
既然一個包執(zhí)行只會執(zhí)行一個
main
,那么其他類里面沒有main
,怎么寫代碼呢?又如何被調用呢?
如果一個包中的類沒有main
方法,它們可以包含其他方法和屬性,并且可以被其他類調用和使用。這些類可以用于實現(xiàn)特定的功能、定義對象、提供工具方法等。
如果你想調用其他包中的類,你需要在你的代碼中引用這些類。在Java
中,你可以使用import
語句來引入其他包中的類,然后通過類名來訪問這些類的方法和屬性。
假設你有兩個包:com.example.package1
和com.example.package2
。如果你想在package1
中的一個類中使用package2
中的類,你可以按照以下方式進行引用:
package com.example.package1;
import com.example.package2.ClassB;
public class ClassA {
public void doSomething() {
ClassB b = new ClassB();
// 使用ClassB的方法或屬性
b.methodName();
// ...
}
}
在這個例子中,ClassA
位于com.example.package1
包中,它通過import
語句引入了com.example.package2.ClassB
類。然后,你可以在ClassA
中創(chuàng)建ClassB
的實例并使用其方法和屬性。
當你在其他類中引用某個包中的類時,你需要使用類的全限定名(fully qualified name)
,即包名加類名。通過這種方式,你可以在一個包中使用另一個包中的類。
需要注意的是,如果要在命令行中執(zhí)行某個包中的類,你需要指定該類的全限定名作為程序的入口點,即在該類中包含main
方法。
一個包中的類可以被其他類調用和使用,即使它們沒有main
方法。你可以通過import
語句引入其他包中的類,并使用類的全限定名來訪問它們的方法和屬性。要在命令行中執(zhí)行某個包中的類,需要指定該類的全限定名作為程序的入口點。
詳細解釋上面的
public void doSomething()
-
public void doSomething()
是一個方法的定義。讓我逐步解釋每個部分的含義: -
public
: 這是方法的訪問修飾符(access modifier
),它指示該方法可以從任何地方訪問。public
修飾符表示該方法對外部可見,其他類可以直接調用該方法。 -
void
: 這是方法的返回類型(return type
)。void
表示該方法不返回任何值。當方法不需要返回結果時,可以將其返回類型設置為void
。 -
doSomething
: 這是方法的名稱,你可以根據(jù)需要選擇一個描述性的名稱。方法名應該具有描述性,以便能夠清楚地表達方法的功能。 -
()
: 這是方法的參數(shù)列表(parameter list
)。在這個例子中,該方法沒有接受任何參數(shù),因此參數(shù)列表為空。如果方法需要接受參數(shù),你可以在括號內(nèi)指定參數(shù)的類型和名稱。 -
{ ... }
: 這是方法體(method body
),包含了方法要執(zhí)行的代碼塊。在這個例子中,方法體內(nèi)部沒有給出具體的代碼,你可以在這個代碼塊中添加你要執(zhí)行的操作。
public void doSomething() {
// 執(zhí)行具體的操作
// ...
}
在這個示例中,doSomething
方法被定義為公共方法(可以被其他類訪問),它不返回任何值(void
),并且沒有接受任何參數(shù)。你可以在方法體中編寫代碼來執(zhí)行特定的任務,可以是打印信息、計算結果、調用其他方法等。
例如,你可以在doSomething
方法中實現(xiàn)某種功能,比如打印一條消息:
public void doSomething() {
System.out.println("Doing something...");
}
當其他類實例化ClassA
對象并調用doSomething
方法時,該方法內(nèi)的代碼將被執(zhí)行,并在控制臺上打印出"Doing something…"。
public void doSomething()
是一個方法的定義,它具有指定的訪問修飾符、返回類型、方法名、參數(shù)列表和方法體。你可以根據(jù)需要自定義方法的名稱、參數(shù)和實現(xiàn),以便執(zhí)行特定的功能或操作。
3、void位置返回值
倘若我需要返回一個值,那么上面的代碼如何修改?
對于java中的main
方法,jvm
有限制,不能有返回值,因此返回值類型為void
。
如果你需要在非main
方法中返回一個值,你可以將方法的返回類型從void
修改為你希望返回的數(shù)據(jù)類型。在Java
中,你可以使用各種數(shù)據(jù)類型作為方法的返回類型,例如int、double、String、自定義類
等。
下面是一個示例,將doSomething
方法的返回類型修改為int
,并返回一個整數(shù)值:
public int doSomething() {
// 執(zhí)行具體的操作
int result = 42; // 假設執(zhí)行操作后得到的結果是42
return result; // 返回結果
}
在這個例子中,doSomething
方法的返回類型是int
,它執(zhí)行一些操作并將結果存儲在result
變量中。然后,使用return
關鍵字將結果返回給調用者。
當其他類調用doSomething
方法時,可以接收返回的結果并將其存儲在一個變量中:
int value = doSomething();
System.out.println("Returned value: " + value);
在這個例子中,將doSomething
方法的返回值存儲在value
變量中,并在控制臺上打印出返回的值。
請注意,方法可以有不同的返回類型,具體取決于你希望返回的數(shù)據(jù)類型。你可以根據(jù)需要選擇適當?shù)姆祷仡愋?,并在方法體中使用return
語句返回相應的值。
如果你需要在方法中返回一個值,你可以將方法的返回類型從void
修改為你希望返回的數(shù)據(jù)類型,并在方法體中使用return
語句返回相應的值。調用該方法時,可以接收返回的結果并進行進一步處理。
4、同一個包內(nèi)的類調用
假設在一個包中有
A.java
以及B.java
, 在A.java
中有main
,B
中沒有main
,A
如何調用B
,詳細解釋并給出案例
要在一個類中調用另一個類,你需要先確保兩個類在同一個包中,或者使用適當?shù)?code>import語句引入其他包中的類。
假設你有兩個類:A.java
和B.java
,它們都在同一個包中。以下是一個示例,展示了在A.java
中如何調用B.java
:
在文件A.java
中:
package com.example;
public class A {
public static void main(String[] args) {
B b = new B(); // 創(chuàng)建B的實例
b.doSomething(); // 調用B的方法
}
}
在文件B.java
中:
package com.example;
public class B {
public void doSomething() {
System.out.println("Doing something in B");
}
}
在這個示例中,A.java
和B.java
位于同一個包com.example
中。在A.java的main
方法中,首先創(chuàng)建了B
類的一個實例,然后通過該實例調用了B類中的doSomething
方法。
當你運行A.java
時,它將輸出Doing something in B
,這是因為在A類的main
方法中調用了B
類的doSomething
方法。
為了在A.java
中使用B.java
,你需要確保這兩個文件位于同一個包中,并且在A.java
的頂部使用import
語句導入B
類。然而,在同一個包中的類不需要導入,因為它們位于相同的命名空間中。
要在一個類中調用另一個類,需要確保它們在同一個包中或使用適當?shù)?code>import語句引入其他包中的類。然后,你可以在調用類的代碼中創(chuàng)建該類的實例,并使用該實例來調用相應的方法。
5、public位置選擇
public
是固定的嗎?它是公共的是什么意思?還有其他類型的選擇嗎?比如私有的,或者其他類型?
public
是 Java
中的一個訪問修飾符(access modifier
),用于控制類、方法、屬性等的訪問級別。它具有以下特點:
-
public
是最高級別的訪問修飾符,表示被修飾的類、方法或屬性對所有其他類可見,無論這些類是否屬于同一個包或不同的包。 - 使用
public
修飾的類可以被其他包中的類直接訪問和使用,其方法和屬性也可以被其他類調用。 - 使用
public
修飾的方法可以在任何地方調用,無論是同一個類內(nèi)部還是不同的類。 - 使用
public
修飾的屬性可以在任何地方訪問和修改。
除了 public,Java
還提供了其他訪問修飾符,用于控制訪問級別和封裝性。常見的訪問修飾符包括:
-
private
: 表示私有的訪問級別,只有同一個類內(nèi)部可以訪問和修改。被private
修飾的類、方法或屬性對其他類都不可見。 -
protected:
表示受保護的訪問級別,只有同一個包內(nèi)的類以及該類的子類可以訪問和修改。對于不在同一個包中的類,除非是該類的子類,否則不能直接訪問。 -
默認(
package-private
): 如果沒有指定訪問修飾符,即沒有使用public、private
或protected
,則默認為包級訪問權限。表示只有同一個包中的類可以訪問和修改。
這些訪問修飾符提供了不同級別的封裝性,允許你控制類、方法和屬性的可見性和可訪問性。根據(jù)需求和設計原則,你可以選擇適當?shù)脑L問修飾符來限制對代碼的訪問。
訪問修飾符的選擇應根據(jù)代碼設計和封裝性原則進行,以確保良好的代碼組織、可維護性和安全性。
public 是 Java
中的一個訪問修飾符,表示被修飾的類、方法或屬性對所有其他類可見。除了 public
,還有其他訪問修飾符,如 private、protected 和默認
(包級訪問權限)。這些修飾符提供了不同級別的封裝性,你可以根據(jù)需求和設計原則選擇適當?shù)男揎椃?/p>
6、String[] args類型選擇
6.1 main方法
假設
main
中我要求傳入的不是String[] args
,而是其他類型的呢,有哪些可以傳入的類型,給出案例
在Java中,main 方法
的參數(shù)必須是一個 String
類型的數(shù)組 String[] args
。這是由Java
語言規(guī)范所定義的,這樣設計的目的是為了接收命令行參數(shù)。因此,main
方法的參數(shù)只能是 String[] args
,而不能直接傳入其他類型。
如果你需要在 main
方法中使用其他類型的參數(shù),你可以將命令行傳入的字符串參數(shù)解析為你需要的類型。以下是一些常見的方法參數(shù)類型及其解析示例:
- 整數(shù)類型(
int
):
public static void main(String[] args) {
int number = Integer.parseInt(args[0]);
// 使用 number 進行操作
}
- 浮點數(shù)類型(
double
):
public static void main(String[] args) {
double value = Double.parseDouble(args[0]);
// 使用 value 進行操作
}
- 布爾類型(
boolean
):
public static void main(String[] args) {
boolean flag = Boolean.parseBoolean(args[0]);
// 使用 flag 進行操作
}
- 自定義類型:
如果你希望傳入自定義類型的參數(shù),你可以將命令行傳入的字符串參數(shù)解析為該自定義類型的實例。例如,假設你有一個自定義的Person
類:
public class Person {
private String name;
// 其他屬性和方法
public Person(String name) {
this.name = name;
}
}
public static void main(String[] args) {
String name = args[0];
Person person = new Person(name);
// 使用 person 進行操作
}
在這個示例中,我們將命令行傳入的字符串參數(shù)解析為 name
,然后使用 name
創(chuàng)建了一個 Person
對象。
main
方法的參數(shù)類型只能是 String[]
,但你可以將命令行傳入的字符串參數(shù)解析為你需要的其他類型。常見的解析包括整數(shù)類型、浮點數(shù)類型、布爾類型,以及自定義類型。你可以根據(jù)需要解析并使用這些參數(shù),以便在 main
方法中進行相應的操作。
6.2 非main方法
在 Java 的非 main
方法中,可以接受各種類型的數(shù)組作為參數(shù)。以下是一些常見的數(shù)組類型:
基本類型數(shù)組:可以接受 int[]、double[]、boolean[]、char[]
等基本類型的數(shù)組。
public void processIntArray(int[] array) {
// 處理 int 數(shù)組
}
- 引用類型數(shù)組:可以接受包括類、接口和數(shù)組在內(nèi)的各種引用類型的數(shù)組。
public void processStringArray(String[] array) {
// 處理 String 數(shù)組
}
- 多維數(shù)組:可以接受多維數(shù)組,如
int[][]、String[][][]
等。
public void processTwoDimensionalArray(int[][] array) {
// 處理二維 int 數(shù)組
}
- 泛型數(shù)組:可以接受泛型數(shù)組,如
ArrayList<Integer>[]、List<String>[]
等。
public void processGenericArray(ArrayList<Integer>[] array) {
// 處理泛型數(shù)組
}
在 Java
中,數(shù)組是傳值的,而不是傳引用。這意味著在方法中修改傳入的數(shù)組,不會影響到原始數(shù)組。如果需要在方法中修改數(shù)組并使其在方法調用結束后保持變化,可以考慮返回一個新的數(shù)組或使用類似于 List
的可變長度集合。
7、import調用包
在
java
中調用某一個包,有哪些情況,需要下載這些包嗎?
-
JDK內(nèi)置包
:Java Development Kit (JDK)
內(nèi)置了許多常用的包,如java.util、java.io、java.lang
等。你無需下載或安裝這些包,可以直接在Java
程序中引用它們。 -
標準庫包:
Java
標準庫提供了大量的功能豐富的包,如java.net、java.sql、java.awt
等。這些包也是與JDK
一起提供的,你無需額外下載或安裝它們,只需要通過import
語句引入即可使用。 -
第三方庫/框架包:
Java
社區(qū)中有許多開源的第三方庫和框架,提供了各種功能的擴展和增強。這些庫通常不包含在JDK或Java
標準庫中,你需要從它們的官方網(wǎng)站或Maven
中央倉庫等渠道下載相應的庫文件(JAR
文件)。然后,在Java
項目中使用構建工具(如Maven或Gradle
)配置依賴關系,使得項目能夠使用這些第三方庫。
對于第三方庫和框架,你需要確保下載的版本與你的項目兼容,并且遵循相應的使用和許可協(xié)議。
在Java
中調用某個包的情況下,你可能需要下載相關的包文件,具體取決于包所屬的類型。對于JDK
內(nèi)置包和Java
標準庫包,你無需額外下載,只需要正確引入即可。而對于第三方庫和框架包,你需要下載相應的庫文件,并在項目中進行配置和引用,以便使用其功能。
8、下載第三方庫/框架包
如何下載第三方庫/框架包,有哪些下載地址和下載方法?如何查看下載的包是否和自己的開發(fā)環(huán)境匹配?
下載第三方庫/框架包時,可以通過以下方式進行:
-
官方網(wǎng)站:許多第三方庫和框架都會在其官方網(wǎng)站上提供下載鏈接。你可以訪問相應的官方網(wǎng)站,找到并下載所需的庫文件。通常,官方網(wǎng)站會提供詳細的文檔和說明,幫助你了解如何下載、配置和使用該庫。
-
Maven
中央倉庫:Maven是Java
中常用的項目管理工具之一。Maven
中央倉庫是一個公共的存儲庫,包含了大量的第三方庫和框架。你可以通過Maven
的配置文件(pom.xml)
中添加相應的依賴來下載所需的庫文件。Maven
會自動從中央倉庫下載并管理依賴。 -
Gradle
依賴管理:Gradle
是另一個常用的項目管理工具,與Maven類似。你可以通過Gradle
的配置文件(build.gradle)
中添加相應的依賴來下載所需的庫文件。Gradle
會自動從配置的倉庫中下載并管理依賴。
在確定下載地址后,你可以使用以下方法來檢查下載的包是否與你的開發(fā)環(huán)境匹配:
-
版本匹配:確保下載的包的版本與你的項目兼容。一般來說,官方網(wǎng)站或文檔會提供相應的版本兼容性信息,你可以參考這些信息選擇適合你的項目的版本。
-
JDK
版本:檢查所下載的包是否與你正在使用的JDK
版本兼容。通常,庫的文檔或說明中會指定所需的最低JDK
版本。確保你的開發(fā)環(huán)境符合這個要求。文章來源:http://www.zghlxwxcb.cn/news/detail-708066.html -
IDE
集成:如果你使用集成開發(fā)環(huán)境(IDE)如Eclipse、IntelliJ IDEA
等,IDE
通常提供了依賴管理的功能。你可以使用IDE
的依賴管理工具(如Maven或Gradle
插件)來下載和管理第三方庫。這樣可以確保所下載的包與你的項目和IDE
環(huán)境完全兼容。文章來源地址http://www.zghlxwxcb.cn/news/detail-708066.html
到了這里,關于菜鳥學Java public static void main(String[] args) 是什么意思?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!