Java基礎語法 JAVA--黑馬程式員 筆記 一、Java入門 1、JAVA 是一種很火的電腦語言。 2、JAVA 代碼編寫分三步: 編寫程式源碼,即編寫一個java文件 編譯:翻譯文件, javac是JDK提供的編譯工具,對java文件編譯後會產生一個class文件,class文件即交給電腦 ...
Java基礎語法
JAVA--黑馬程式員 筆記
1、JAVA 是一種很火的電腦語言。
2、JAVA 代碼編寫分三步:
-
編寫程式源碼,即編寫一個java文件
-
編譯:翻譯文件, javac是JDK提供的編譯工具,對java文件編譯後會產生一個class文件,class文件即交給電腦執行的文件。Eg:
javac hello.java
-
執行:運行程式, java是JDK提供的運行工具。Eg:
java hello
3、JAVA--配置環境變數
-
下載Java安裝後,僅幫助配置了
`java、javac、javaw、jshell
-
若變數不夠用,需選擇手動配置環境變數。標準配置方式:先配置路徑不帶bin的JAVA_HOME;然後再配置Path。
4、JAVA 代碼中的類名一定要與文件名一致。
5、判斷JAVA版本命令為:
java --version
或者java -version
(舊)
6、JAVA 的下載和安裝
-
通過官方網站獲取JDK進行下載,
-
建議:安裝路徑不要有中文,不要有空格等一些特殊的符號。
7、JDK 的安裝目錄介紹:
目錄名稱 | 說明 |
---|---|
bin | 該路徑下存放了JDK的各種工具命令。javac和java就放在這個目錄。 |
conf | 該路徑下存放了JDK的相關配置文件。 |
include | 該路徑下存放了一些平臺特定的頭文件。 |
jmods | 該路徑下存放了JDK的各種模塊。 |
legal | 該路徑下存放了JDK各模塊的授權文檔。 |
lib | 該路徑下存放了JDK工具的一些補充JAR包。 |
8、編譯運行時常見問題:
非法字元問題。Java中的符號都是英文格式的。
大小寫問題。Java語言對大小寫敏感(區分大小寫)。
在系統中顯示文件的擴展名,避免出現HelloWorld.java.txt文件。
編譯命令後的java文件名需要帶文件尾碼.java
運行命令後的class文件名(類名)不帶文件尾碼.class
...
9、Java 的三大平臺:
JavaSE(基礎)、JavaME(小型)、JavaEE(Web網站、伺服器)
10、Java 用法:
桌面應用開發、企業級應用開發、移動應用開發、科學計算、大數據開發、游戲開發。
11、Java 的主要特性:
-
面向對象
-
安全性
-
多線程
-
簡單易用
-
開源
-
跨平臺
12、Java 語言跨平臺的原理:
-
Java提供了不同操作系統對應的虛擬機,即JVM(Java Virtual Machine,Java虛擬機)
註:高級語言的編譯運行方式——編譯型、解釋型、混合型(半編譯,半解釋)
13、JRE和JDK:
-
JRE(Java Runtime Environment),Java運行環境,包含了JVM和Java的核心類庫(Java API)。JRE:JVM、核心類庫、運行工具。
-
JDK(Java Development Kit)稱為Java開發工具,包含了JRE和開發工具。JDK:JVM、核心類庫、開發工具。
-
JDK、JRE、JVM三者包含關係:JDK包含了JRE,JRE包含了JVM。
-
總結:我們只需安裝JDK即可,它包含了java的運行環境和虛擬機。
14、Java 開發工具:
-
javac 編譯工具
-
java 運行工具
-
jdb 調試工具
-
jhat 記憶體分析工具
二、Java基礎概念
1、註釋:是對代碼的解釋和說明文字。Java中的註釋分為三種:
-
單行註釋:
// 這是單行註釋文字
-
多行註釋:
/*
這是多行註釋文字
註意:多行註釋不能嵌套使用。
*/
-
文檔註釋(暫時用不到):
/**
這是多行文檔註釋文字
這是多行文檔註釋文字
*/
2、關鍵字:被Java賦予了特定含義的英文單詞,字母全部小寫,共有51個+2個保留字=53個關鍵字。
-
關鍵字包括:48個關鍵字(
abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
)、2個保留字(goto、const
)、3個特殊直接量(true、false、null
)。 -
第一個關鍵字class:用於創建/定義一個類,類是Java項目最基本的組成單元。class後面跟隨的就是這個類的名字,簡稱:類名。在類名後面會有一對大括弧,表示這個類的內容/範圍。
3、字面量-作用:告訴程式員,數據在程式中的書寫格式。
-
字面量的分類:
字面量類型 | 說明 | 程式中的寫法 |
---|---|---|
整數 | 不帶小數的數字 | 666,-88 |
小數 | 帶小數的數字 | 13.14,-5.21 |
字元 | 必須使用單引號,有且僅能一個字元 | ‘A’,‘0’,‘我’ |
字元串 | 必須使用雙引號,內容可有可無 | “HelloWorld”,“黑馬程式員” |
布爾值 | 布爾值,表示真假,只有兩個值:true,false | true 、false |
空值 | 一個特殊的值,空值 | 值是:null |
-
區分技巧:
-
不帶小數點的數字都是整數類型的字面量。
-
只要帶了小數點,那麼就是小數類型的字面量。
-
只要用雙引號引起來的,不管裡面的內容是什麼,不管裡面有沒有內容,都是字元串類型的字面量。
-
字元類型的字面量必須用單引號引起來,不管內容是什麼,但是個數有且只能有一個。
-
字元類型的字面量只有兩個值,true、false。
-
空類型的字面量只有一個值,null。
4、vscode中java錯誤 :編碼GBK的不可映射字元。
-
使用javac編譯的時候編譯程式首先會獲取當前操作系統預設的編碼格式GBK,然後JDK就把Java源文件從GBK編碼格式轉換為Java內部預設的unicode編碼格式放入電腦記憶體中,再然後javac會把轉換格式後的文件進行編譯成class文件,最後將unicode編碼格式的class文件從記憶體寫入到磁碟當中。
-
因vscode預設是utf-8編碼格式,而編譯的時候認為文件是GBK編碼格式,所以出現了錯誤。
-
解決方法:編譯的時候使用帶參數的編譯指令:
javac -encoding utf-8 Test.java
; 或者修改vscode上的編碼方式為:GBK 。
5、變數: 在程式的執行過程中,其值有可能發生改變的量(數據)。 變數就是在程式中臨時存儲數據的容器。但是這個容器中只能存一個值。
變數的定義格式:
-
數據類型 變數名 = 數據值;
變數的註意事項:
只能存一個值
變數名不允許重覆
一條語句可以定義多個變數
變數在使用之前必須要賦值
變數的作用域範圍
6、電腦的存儲規則
-
電腦中任意數據都是以二進位的形式來存儲的。
-
不同進位在代碼中的表現形式:二進位(以0b開頭),十進位,八進位(以0開頭),十六進位(以0x開頭)。
-
不同的字元編碼規則,將數據按照其中某種規則(查詢碼表)轉換成對應的二進位編碼進行存儲。即text文本中數字(直接轉二進位存儲)、字母和漢字(皆是查詢碼表)。
-
圖片數據分為:黑白圖、灰度圖和彩色圖。顯示器;解析度、像素和三原色。電腦採用光學三原色:紅綠藍RGB,範圍是0~255。圖片數據存儲是通過每一個像素點的RGB三原色來存儲的。
-
聲音數據存儲是對聲音的波形圖進行採樣再對數據二進位存儲。
7、JAVA 數據類型分為:基本數據類型(int等)和引用數據類型(類、介面、數組、String等)。
註意基本數據類型和引用數據類型區別:
- 基本數據類型包括整數、浮點數、布爾和字元類型;而引用數據類型是除了基本數據類型外的其它所有類型。
- 基本數據類型在棧記憶體中存儲的是真實的數據;而引用數據類型在棧記憶體中存儲的是地址值,即引用是使用了其它空間中的數據。
基本數據類型有四類八種:
數據類型 | 關鍵字 | 記憶體占用 | 取值範圍 |
---|---|---|---|
整數 | byte | 1 | 負的2的7次方 ~ 2的7次方-1(-128~127) |
short | 2 | 負的2的15次方 ~ 2的15次方-1(-32768~32767) | |
int | 4 | 負的2的31次方 ~ 2的31次方-1 | |
long | 8 | 負的2的63次方 ~ 2的63次方-1 | |
浮點數 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
字元 | char | 2 | 0-65535 |
布爾 | boolean | 1 | true,false |
基本數據類型註意事項:
-
byte類型的取值範圍: -128 ~ 127
-
int類型的大概取值範圍: -21億多 ~ 21億多
整數類型和小數類型的取值範圍大小關係:double > float > long > int > short > byte
如果要定義一個long類型的變數,那麼在數據值的後面需要加上L尾碼。(大小寫都可以,建議大寫。)
如果要定義一個float類型的變數,那麼在數據值的後面需要加上F尾碼。(大小寫都可以)
8、標識符:給類、方法、變數等起的名字。
標識符命名規則————硬性要求:
-
必須由數字、字母、下劃線_、美元符號$組成。
-
不能以數字開頭。
-
不能是關鍵字(關鍵字都是小寫),如Class可以而class不行。
-
區分大小寫的。
標識符命名規則————軟性要求:
-
小駝峰命名法(適用於變數名和方法名)
-
大駝峰命名法(適用於類名)
-
不管起什麼名字,都要做到見名知意。
-
規範細節:儘量不要用拼音。但是一些國際通用的拼音可視為英文單詞。
-
規範細節:平時在給變數名、方法名、類名起名字的時候,不要使用下劃線或美元符號。
9、鍵盤錄入: 關於接收鍵盤輸入的內容,使用JAVA寫好的類Scanner。步驟:導包、創建對象、接收數據。
三、運算符
1、運算符和表達式
-
運算符:就是對常量或者變數進行操作的符號。
-
表達式:用運算符把常量或者變數連接起來的,符合Java語法的式子就是表達式。
2、運算符分類:算術運算符、自增自減運算符、賦值運算符、關係運算符、邏輯運算符、三元運算符、其它運算符
-
算術運算符:+ - * / %
註意:(1)代碼中如果有小數直接參与計算,計算結果有可能是不精確的。 (2)整數相除結果只能得到整除,如果結果想要是小數,必須要有小數參數。 (3)取模、取餘,做的也是除法運算,只不過獲取的是餘數。其應用場景有判斷整除、奇偶性等。 (4)當連續進行+操作時,從左到右逐個執行的。 (5)字元串的+操作:當+操作中出現字元串時,此時就是字元串的連接符,會將前後的數據進行拼接,並產生一個新的字元串。 (6)字元的+操作:當+操作中出現了字元,會拿著字元到電腦內置的ASCII碼表中去查對應的數字,然後再進行計算。 (7)字元串只有+操作,沒有其他操作。
-
自增自減運算符:++(自增運算符)、--(自減運算符)
註意:(1)用方式:放在變數的前面,我們叫做先++。比如:++a。 放在變數的後面,我們叫做後++。比如:a++。 (2)不管是先++,還是後++。單獨寫在一行的時候,運算結果是一模一樣的。 (3)a++是先用後加;++a是先加後用。
-
賦值運算符:=、+=、-=、*=、/=、%=(擴展的賦值運算符)
註意:擴展的賦值運算符中隱層還包含了一個強制轉換。 例:a、b為byte,有a += b ;實際上相當於 a = (byte)(a + b);
-
關係運算符(比較運算符):==、!=、>、>=、<、<=
註意:(1)關係運算符最終的結果一定是布爾類型的。要麼是true,要麼是false。 (2)在寫==的時候,千萬不要寫成=。
-
邏輯運算符:&(邏輯與,而且)、|(邏輯或,或者)、^(邏輯異或)、!(邏輯非,取反)、短路邏輯運算符(短路與&&、短路或||)
註意:(1)取反最好只用一個。 (2)短路與&&、短路或||,兩個短路邏輯運算符具有短路效果,即:當左邊的表達式能確定最終的結果,那麼右邊就不會參與運行了.
-
三元運算符(又稱三元表達式或者問號冒號表達式):關係表達式 ? 表達式1 :表達式2 ;
註意:(1)三元運算符的最終結果一定要被使用,要麼賦值給一個變數,要麼直接列印出來。 (2)計算關係表達式的值,如果關係表達式的值為真,那麼執行表達式1;否則執行表達式2。
-
其它運算符:& |(數值中的邏輯與和或)、<<(左移)、>>(右移)、>>>(無符號右移)
3、運算符的優先順序:
-
小括弧優先於所有。
4、類型轉換:
隱式轉換(自動類型提升):就是把一個取值範圍小的數據或者變數,賦值給另一個取值範圍大的變數。此時不需要我們額外寫代碼單獨實現,是程式自動幫我們完成的。
兩種提升規則:
-
取值範圍小的,和取值範圍大的進行運算,小的會先提升為大的,再進行運算。
-
byte、short、char三種類型的數據在運算的時候,都會直接先提升為int,然後再進行運算。
強制轉換:如果要把一個取值範圍大的數據或者變數賦值給另一個取值範圍小的變數。是不允許直接操作。如果一定要這麼乾,就需要加入強制轉換。
-
強制轉換的書寫格式:目標數據類型 變數名 = (目標數據類型)被強轉的數據;
-
強制轉換有可能會導致數據發生錯誤。(數據的精度丟失)
5、原碼、補碼、反碼
-
電腦中的存儲和計算都是以補碼的形式進行的。
-
因為補碼的定義關係,一個位元組的範圍是-128~+127。
-
原碼:十進位數據的二進位表現形式,最左邊是符號位,0為整,1為負。
-
產生補碼和反碼的原因是原碼計算中的弊端:利用原碼進行負數計算時,結果會出錯,即實際運算方向跟正確的運算方向是相反的。
-
反碼:正數的反碼不變,但負數的反碼在原碼的基礎上,符號位不變,數值取反,0變1,1變0。
-
反碼出現目的是為解決原碼中不能計算負數的問題而出現的。反碼的弊端是在負數計算時,結果跨0時,跟實際結果會有1的偏差。
-
補碼:正數的補碼不變,負數的補碼在反碼的基礎上+1。另外因為+1的原因,補碼還能多記錄一個特殊的值-128,該數據在1位元組範圍內,但該數值沒有原碼和反碼。
-
補碼出現目的是為瞭解決負數計算時跨0的問題而出現的。
-
強制轉換中數值轉換出錯的原因就是因為強制轉換位數,將多位刪除到少位,造成錯誤。
四、判斷和迴圈
1、流程式控制制語句分類:順序結構、分支結構(判斷和選擇結構,if、switch)、迴圈結構(for, while, do…while)。
-
分支結構中判斷語句——if語句:單條件、雙條件以及多條件判斷
//其語句格式1:
if (關係表達式) {
語句體;
}
/* 註意:
1. 如果我們要對一個布爾類型的變數進行判斷,不要寫==,直接把變數寫在小括弧中即可。
2. 如果大括弧中的語句體只有一條,那麼大括弧可以省略不寫。
如果大括弧省略了,那麼if只能控制距離他最近的那一條語句。
建議自己不要去寫,如果別人這麼寫了,你要能看懂即可。
註意: int a = 1; 這行代碼包含定義變數a和給其賦值兩句語句。
3. 大括弧的開頭可以另起一行書寫。
*/
//其語句格式2:
if (關係表達式) {
語句體1;
} else {
語句體2;
}
//其語句格式3:
if (關係表達式1) {
語句體1;
} else if (關係表達式2) {
語句體2;
}
…
else {
語句體n+1;
}
-
分支結構中選擇語句——switch語句:
//switch語句格式:
switch (表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
/* 註意:
1. 表達式:(將要匹配的值)取值為byte、short、int、char。JDK5以後可以是枚舉,JDK7以後可以是String。
2. case:後面跟的是要和表達式進行比較的值(被匹配的值)。
3. break:表示中斷,結束的意思,用來結束switch語句。
4. default: 表示所有情況都不匹配的時候,就執行該處的內容,和if語句的else相似。
5. case後面的值只能是字面量,不能是變數。
6. case給出的值不允許重覆。
*/
//switch在JDK12中的新特性:
switch (表達式) {
case 值1 -> { 語句體1; }
case 值2 -> { 語句體2; }
...
default -> { 語句體n+1; }
}
註意switch中有:1)default可以放在任意位置,也可以省略。 2)語句中不寫break會引發case穿透現象。使用場景:如果多個case的語句體重覆了,考慮利用case穿透來簡化代碼。 3)如果switch中匹配成功的case生成結果,可以在switch前寫上變數=來接收這個結果。
註意:1)switch和if第三種格式各自的使用場景:當我們需要對一個範圍進行判斷的時候,用if的第三種格式。當我們把有限個數據列舉出來,選擇其中一個執行的時候,用switch語句。
-
迴圈結構——for語句:
//for迴圈格式:
for (初始化語句;條件判斷語句;條件控制語句) {
迴圈體語句;
}
-
迴圈結構——while語句:
//while迴圈格式:
初始化語句;
while(條件判斷語句){
迴圈體;
條件控制語句;
}
註意:1)迴圈是重覆的做某事,具有明確的開始和停止標記。 2)for 和 while 的區別:for迴圈中,知道迴圈次數或者迴圈的範圍。而while迴圈中,不知道迴圈的次數和範圍,只知道迴圈的結束條件。
-
迴圈結構——do...while迴圈
//do...while迴圈格式:
初始化語句;
do{
迴圈體;
條件控制語句;
}while(條件判斷語句);
//do...while迴圈特點:先執行,再判斷。
2、無限迴圈(死迴圈):迴圈一直停不下來。
//for迴圈
for(;;){
System.out.println("迴圈執行一直在列印內容");
}
//while迴圈(最常用)
while(true){
System.out.println("迴圈執行一直在列印內容");
}
//do...while迴圈
do{
System.out.println("迴圈執行一直在列印內容");
}while(true);
//註意:無限迴圈下麵不能再寫其他代碼了,因為永遠執行不到。
3、跳轉控制語句
——(條件控制語句):在迴圈的過程中,跳到其他語句上執行。
break:不能單獨存在的,可以用在switch和迴圈中。表示結束,跳出的意思,用來結束整個迴圈,跳轉到迴圈後的語句上執行。break是指跳出單層迴圈/內迴圈。
continue:不能單獨存在的,只能存在於迴圈當中。表示跳過本次迴圈,繼續執行下次迴圈,指跳轉到迴圈的條件控制語句上執行。
五、數組
1、數組:指的是一種容器,可以同來存儲同種數據類型的多個值。但是數組容器在存儲數據的時候,需要結合隱式轉換考慮。
2、數組的定義:
-
格式一:數據類型 [] 數組名。比如:int [] array。(常用)
-
格式二:數據類型 數組名 []。比如:int array []。
3、數組的靜態初始化:
-
完整格式:數據類型[] 數組名 = new 數據類型[]{元素1,元素2,元素3,元素4...}; 比如:int[] arr = new int[]{11,22,33};
-
簡化格式:數據類型[] 數組名 = {元素1,元素2,元素3,元素4...}; 比如:int[] array = {1,2,3,4,5};
-
註意點:等號前後的數據類型必須保持一致。數組一旦創建之後,長度不能發生變化。
4、數組的地址值:表示數組在記憶體中的位置。
-
輸出的地址值表示含義,以[I@6d03e736為例: [:表示現在列印的是一個數組。 I:表示現在列印的數組是int類型的。 @:僅僅是一個間隔符號而已。 6d03e736:就是數組在記憶體中真正的地址值。(十六進位的)
5、數組元素訪問的格式:數組名[索引];
-
數組元素訪問的作用:獲取或修改數組中對應索引上的值。
-
索引:也叫角標、下標,就是數組容器中每一個小格子對應的編號。索引的特點:索引一定是從0開始的,連續不間斷,且逐個+1增長。
-
獲取數組中數據的方式。
6、數組的遍歷:就是把數組裡面所有的內容一個一個全部取出來。
-
遍歷指的是取出數據的過程。遍歷後可以執行列印、求和、判斷等操作。
-
數組的長度:數組名.length;
7、數組的動態初始化:
-
格式:數據類型[] 數組名 = new 數據類型[數組的長度];
-
特點:在創建的時候,由我們指定數組的長度,但由虛擬機給出預設的初始化值。
-
數組的預設初始化值:整數類型是 0;小數類型是 0.0;布爾類型是 false;字元類型是 '\u0000'(即空格);引用類型是 null。
註意:數組兩種初始化方式的區別。靜態初始化:手動指定數組的元素,系統會根據元素的個數,計算出數組的長度。動態初始化:手動指定數組長度,由系統給出預設初始化值。
8、數組常見問題
當訪問了數組中不存在的索引,就會引發索引越界異常。
9、如何在數組中添加數據?
-
可以在已初始化的有未賦值的空間數組中直接對索引元素賦值添加數據。
-
是否可以對數組空間進行擴容來添加更多的數據?
10、數組的記憶體圖:
-
變數存儲的是真實的數據,而數組存儲的是數據存儲在記憶體中的地址值。
-
兩個數組指向同一個空間的記憶體圖。
-
當兩個數組指向同一個小空間時,其中一個數組對小空間中的值進行修改,那麼其它數組再次訪問的則是已經改變的結果。
註意:Java的記憶體分配
-
Java的記憶體分配由JVM管理,JVM內包含 棧、堆、方法區(改進為 元空間)、本地方法棧以及寄存器這個部分。
-
棧:方法運行時使用的記憶體,比如main方法運行,進入方法棧中執行。
-
堆:存儲對象或者數組,new來創建的,都存儲在堆記憶體。
-
方法區:存儲可以運行的class文件。
-
本地方法棧:JVM在使用操作系統功能的時候使用。
-
寄存器:給GPU使用。
-
對於棧,main等方法在開始執行時會進棧,代碼等方法執行完畢後會出棧。對於堆,new出來的對象或數組等,在這塊記憶體中會開闢出空間並產生地址。
六、方法
1、方法(method):是程式中最小的執行單元。
-
方法定義:把一些代碼打包在一起,該過程稱為方法定義。
-
同一方法中的代碼要麼一起執行,要麼都不執行。
-
方法的用處:是將一整個(一些)功能代碼打包在一起作為方法,方便進行整體調用,使代碼編寫進行簡化。
-
方法的優點:提高代碼的復用性;提高代碼的可維護性。
-
實際開發中,什麼時候用到方法? 重覆的代碼、具有獨立功能的代碼可以抽取到方法中。
註意,方法定義和方法調用的比較: 方法必須先創建才可以使用,該過程成為方法定義。 方法創建後並不是直接可以運行的,需要手動使用後,才執行,該過程成為方法調用。
2、方法的定義格式:
//下麵參數為形參
public static 返回值類型 方法名(參數) {
方法體;
return 返回值;
}
方法的定義格式可以分為 最簡單的(無參數的)、帶參數的 和帶返回值 的方法定義。
-
1)最簡單(無參數)的方法定義和調用
//定義格式:
public static void 方法名(){
方法體(就是打包起來的代碼);
}
//調用格式:
方法名();
//註意:方法必須先定義後調用,否則程式將報錯。 -
2)帶參數的方法定義和調用
參數:由數據類型和變數名組成 --
數據類型 變數名
。參數範例:int a。//定義格式:
//下麵參數為形參
//單參數
public static void 方法名 (參數1) {
方法體;
}
//多參數
public static void 方法名 (參數1, 參數2, 參數3...) {
方法體;
}
//註意:方法定義時,參數中的數據類型與變數名都不能缺少,缺少任意一個程式將報錯。方法定義時,多個參數之間使用逗號( ,)分隔。
//調用格式:
//下麵參數為實參
方法名(參數);
方法名(參數1,參數2);
//註意:方法調用時,參數的數量與類型必須與方法定義中的設置相匹配(即形參和實參必須一一對應),否則程式將報錯。
註意:形參和實參: 形參:方法定義中的參數。等同於變數定義格式,例如:int number 實參:方法調用中的參數。等同於使用變數或常量,例如: 10 number
-
3)帶返回值方法定義和調用
在調用出處要根據方法的結果,區編寫另外一段代碼的時候,需要用到有返回值的方法。
//定義格式:
//下麵參數為形參
public static 數據類型 方法名 ( 參數 ) {
方法體 ;
return 數據 ;
}
//註意:方法定義時return後面的返回值與方法定義上的數據類型要匹配,否則程式將報錯。
//調用格式:
////下麵參數為實參
方法名 ( 參數 ) ; //直接調用
數據類型 變數名 = 方法名 ( 參數 ) ; //賦值調用
System.out.println( 方法名 ( 參數 ) ); //輸出調用
//註意:方法的返回值通常會使用變數接收,否則該返回值將無意義。
3、方法的註意事項:
方法不調用就不執行。
方法與方法之間是平級關係,不能互相嵌套定義。
方法的編寫順序與執行順序無關。
方法中有返回值,就必須要寫return關鍵字,其表示結束方法和返回結果。
方法中void返回值類型表示無返回值,可以省略return;也可以單獨的書寫
return;
,後面不加數據,表示結束方法。return語句下麵,不能編寫代碼,因為其永遠執行不到,屬於無效的代碼。
4、方法的重載:
-
概念——方法重載指同一個類中定義的多個方法之間的關係,滿足下列條件的多個方法相互構成重載:多個方法在同一個類中;多個方法具有相同的方法名;多個方法的參數不相同,即參數的數量、類型或者順序不同。
-
形式參數的順序不同可以構成方法的重載,但是不建議。
-
重載僅對應方法的定義,與方法的調用無關,調用方式參照標準格式。
-
重載僅針對同一個類中方法的名稱與參數進行識別,與返回值無關,換句話說不能通過返回值來判定兩個方法是否相互構成重載。
5、方法的記憶體:
-
1.方法調用的基本記憶體原理
棧內方法的運行過程:先進後出。
-
2.方法傳遞基本數據類型的記憶體原理
註意:傳遞基本數據類型時,傳遞的是真實的數據,形參的改變,不影響實際參數的值。
-
3.方法傳遞引用數據類型的記憶體原理
註意:傳遞引用數據類型時,傳遞的是地址值,形參的改變,影響實際參數的值。
七、綜合練習
1、練習:雙色球
代碼示例:
package com.itheima.test;
import java.util.Random;
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
//1.生成中獎號碼
int[] arr = createNumber(); // 123456 7
System.out.println("==================