萌新的java學習之路——第一週
第一週的學習
這是我學習Java的第一週,寫這個博客更多的時爲了總結自己這一週的學習情況,如果有人看到我寫的博客,有什麼問題的話,可以問我。雖然我也是一個小白,但我會盡力回答你。
1.Java的一些基礎知識
1.1 java特徵
跨平臺
Windows
.exe
Linux
.out
macOs
.out
UNIX
.out
面向對象
Java因爲擁有JVM,能夠幫助Java程序可以支持不同的平臺。
Java ==> .class字節碼文件 ==> JVM在不同的平臺之上給予不同解釋,可以滿足很多地方同時運行
1.2 Java執行機制
計算機執行機制
編譯執行和解釋執行
編譯執行是直譯性語言
C C++
編譯的結果直接交給我們的CPU運作執行,效率較高,但是不能跨平臺
解釋執行是解釋性語言
Java
編譯結果需要通過解釋器解釋之後在交給CPU執行,效率較低
Java藉助於JIT技術,現在的執行效率已經可以接近於C++。
Java語言是 先編譯,再解釋
1.3 電腦運行Java必備條件
安裝JDK
儘量從官網獲取對應的安裝包
- 安裝軟件不能安裝到C盤,防止系統崩潰沒有任何的挽回餘地。
- 安裝路徑中不能出現任何的中文,防止因爲國外軟件對於支持不友好的情況出現。
JDK安裝路徑
bin
binary 二進制目錄
都是二進制可以執行文件,包含.exe文件
java.exe
javac.exe
javap.exe
javadoc.exe
db
JDK自帶的小型數據庫
include
系統接口目錄!!!
jre
Java運行環境 Java Runtime Environment
lib
資源庫目錄,存在一些.jar文件 Jar包
src.zip(要想成爲合格的程序員,一定要看)
源文件代碼
Java的完整源代碼
作爲參考的標準,學習的參照物
環境變量配置
Windows + E 我的電腦
我的電腦空白處 ==> 屬性 ==> 高級系統設置 ==> 環境變量 ==>
系統變量修改:
新建:
變量名:JAVA_HOME
變量值:D:\Program Files\Java\jdk1.8.0_211
新建:
變量名:CLASS_PATH
變量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
修改:
變量名:path
添加內容:
;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
1.4 DOS命令
因爲我現在都是在cmd中試驗java代碼的,所以dos命令比較需要。
開啓命令提示符
Windows + R 彈出對話框 輸入cmd
dir
查看當前工作目錄的所有文件和文件夾
cd
切換工作目錄
格式 cd 路徑
路徑【小重點】
相對路徑
我在你隔壁,隔離老劉
. 當前工作目錄
… 當前工作目錄的父目錄
絕對路徑
xx省xx市xx縣xx路xx號 唯一性
mkdir
創建文件夾
格式 mkdir 文件夾名
例如: mkdir test
mkdir a b c d 同時創建四個文件夾
rd
刪除文件夾
【注意事項】
- 慎用 粉碎性刪除
- 無法刪除非空文件夾
echo [瞭解]
格式 echo 123>1.txt
文件拓展名 文件後綴名 【重點】
.exe .doc .ppt .pdf .java .php .py .mp4 .avi .rmvb
.txt .htm .html
涉及到文件操作,一定要帶有文件後綴名,沒有文件後綴名的文件可以認爲不是一個文件
del
刪除普通文件
操作的過程中必須帶有文件後綴名!!!
【注意事項】
- 慎用,刪除文件是直接抹掉數據不是放入回收站
方向鍵上下
查看之前的命令
cls
清理屏幕
exit
退出終端
裝 後期操作某些軟件爲了防止不必要的麻煩
1.5 常識知識
Java之父是誰?
詹姆斯.高斯林(原諒我這個渣渣沒找到點點在哪兒)
Java由來
1995年推出的面向對象的編程語言。
jdk的版本變更懶得打了,感興趣的去看看。
JVM(Java virtual machine) 虛擬機
使用軟件在不同的操作系統中模擬相同的環境
JRE(Java runtime environment) 運行環境
包含JVM和解釋器,完整的Java運行環境
JDK(Java devolepment kit)開發環境
包含 JRE+類庫+開發工具包(編譯器+調試工具)
2. Java第一行代碼
準備工作和基礎常識瞭解完後,我們就可以來嘗試寫第一句代碼了。
2.1 Notepad++準備
首先準備編寫代碼的工具,我這裏推薦的是Notepad++
下載安裝完成後
a. 設置 --> 首選項 --> 新建
環境選擇 windows
編碼集 ANSI
b. 設置 --> 首選項 --> 自動完成
全部反選
2.2 代碼示例和規範
在學習初期,我們就要養成良好的代碼編寫習慣。
class FirstJava {
public static void main(String[] args) {
System.out.println("武漢加油,中國加油!");
}
}
這是代碼在Notepad++中的情況,注意紅筆標記的地方,注意規範。
2.3 編譯執行
javac 編譯工具
javac 源文件名.java
例如:
javac FirstJava.java
編譯之後會生成一個 FirstJava.class文件,.class字節碼文件,二進制文件,需要藉助於JVM執行解釋給 CPU
java 執行工具
java 類名
例如:
java FirstJava
終端:
武漢加油,中國加油!
2.4 代碼規範【重點】
參考AJCG 阿里巴巴Java開發規約來完成的
2.4.1 AJCG【重點】
-
標識符可以使用的字符範圍,英文字母(A ~ Z a ~ z) 數字(0 ~ 9) 唯一可以使用的標點符號 _
-
標識符要求必須英文字母開頭
-
標識符嚴格區分大小寫,大寫A和小寫a完全不一樣!
-
標識符沒有嚴格的長度限制,但是會根據實際需求來限制標識符的長度
-
標識符組需要做到見名知意,動賓結構!!!
規範格式
studentAge studentScore 見名知意
getStudentAge setStudentAge 動賓結構
title logo banner
payTime不允許格式:
int a, b, c, d, e, f, g;
img0 img1 img2 img3 img4 img5
payBeizhu 不允許
tsgly 圖書管理員!!! 不允許 -
推薦使用駝峯命名法和下劃線命名法
小駝峯命名法:【適用於 變量名,方法名】
標識符首字母小寫,之後的每一個單詞首字母大寫
studentAge studentScore 見名知意
getStudentAge setStudentAge 動賓結構
iPhone iMac iTouch
大駝峯命名法:【適用於 類名,接口名】
標識符所有的單詞首字母全部大寫
FirstJava String
下劃線命名法:
所有的字母都是大寫的情況下,爲了區分單詞直接的間隔,使用下劃線命名法
JAVA_HOME CLASS_PATH
DEFAULT_CAPACITY -
已經被Java使用的關鍵字和保留字不得用於自定義標識符使用
變色的不能使用,大寫開頭的不能使用
3 變量【重點】
程序可以正常運行後,說明你的運行環境已經沒有什麼問題了。接下來我們來了解一下變量。
3.1 基本定義
a. 變量是定義在計算機內存中
1. 明確的數據類型
2. 明確的變量名
3. 明確的對應數據
b. 基本的定義格式
1. 數據類型 變量名;
變量名 = 對應數據類型的值; = 賦值
2.數據類型 變量名 = 對應數據類型的值;
c. 變量分類
1. 基本數據類型
八大基本數據類型
整數
小數
布爾
字符
2. 引用數據類型
字符串
數組
3.2 基本數據類型
整型 | 佔用內存空間大小 | 取值範圍 |
---|---|---|
byte | 1字節 | -128~127 |
short | 2字節 | -(2^15) ~ (2^15)-1 |
int | 4字節 | -(2^31) ~ (2^31)-1 |
long | 8字節 | -(2^63) ~ (2^63)-1 |
浮點型 | 佔用內存空間大小 | 取值範圍 |
---|---|---|
float | 4字節 | 10^38 |
double | 8字節 | 10^308 |
布爾類型 | 佔用內存空間大小 | 取值範圍 |
---|---|---|
boolean | 1字節 | true/false |
字符型 | 佔用內存空間大小 | 取值範圍 |
---|---|---|
char | 2字節 | 能夠保存中文 |
3.3 定義變量的第一行代碼
class VariableTest {
public static void main(String[] args) {
/* 整型變量 */
byte byteNumber = 10;
short shortNumber = 20;
int intNumber = 30;
long longNumber = 40L;
/* 整型變量展示 */
System.out.println(byteNumber);
System.out.println(shortNumber);
System.out.println(intNumber);
System.out.println(longNumber);
/* 浮點型變量 */
float floatNumber = 3.14F;
double doubleNumber = 0.618;
/* 浮點型變量展示 */
System.out.println(floatNumber);
System.out.println(doubleNumber);
/*
字符型變量
字符常量:
單引號包含的單個元素 'a'
*/
char ch1 = 'A';
char ch2 = '中';
/* 字符型變量展示 */
System.out.println(ch1);
System.out.println(ch2);
/* 布爾類型 */
boolean ret1 = true;
boolean ret2 = false;
/* 布爾類型變量展示 */
System.out.println(ret1);
System.out.println(ret2);
// int num;
// System.out.println(num);
// num = 10;
}
}
3.4 定義變量的問題總結
3.4.1 數據類型不兼容問題
VariableTest.java:16: 錯誤: 不兼容的類型: 從double轉換到float可能會有損失
float floatNumber = 3.14;
^
1 個錯誤
//計算機爲了保證數據的精度,同時爲了數據後期的延展性,會默認把所有的小數都認爲是double類型,double佔用的內存空間是8字節,而float是4字節,會報錯。這裏需要告訴計算機3.14是一個float類型,在小數之後加上一個大寫F
修改:
float floatNumber = 3.14F;
3.4.2 long類型變量賦值操作要求
【要求】
給予long類型的數據需要在常量之後加上一個大寫L,明確告知計算機這裏使用的是一個long類型數據
修改:
long longNumber = 40L;
3.4.3 Java中變量未賦值不能使用
VariableTest.java:44: 錯誤: 可能尚未初始化變量num
System.out.println(num);
^
1 個錯誤
//Java中規定,一個變量在沒有被賦值的情況下,不能參與除賦值之外的其他任何操作。避免了沒有必要的野值問題。
3.4.4 未定義不能使用
VariableTest.java:46: 錯誤: 找不到符號
num = 10;
^
符號: 變量 num
位置: 類 VariableTest
1 個錯誤
//Java中規定,變量未定義不能使用,必須先定義,後使用
4 字符
4.1 字符常量基本概念
英文單引號包含的單個元素
4.2 轉義字符
\ 轉義字符標記
將帶有特定含義字符轉換爲無意義字符
或者把無意義字符,轉換成帶有一定含義字符
常用:
’
"
\n 回車
\t tab鍵 製表符
轉義字符有且只能處理一個字符
\ 表示一個反斜槓
\\ 表示兩個反斜槓
4.3 字符常量使用要求
有且只允許使用字符本身!!!
不推薦使用ASC表。
‘A’ ‘a’
優勢:
1. 閱讀性好
2. 保證數據類型一致化
3. 減少了沒有必要的歧義
4.4 字符串
字符串數據類型
字符和字符串什麼關係?
羊肉和羊肉串關係就可以認爲是字符和字符串的關係
字符串特定標記
“” 英文雙引號包含的所有內容都是字符串本身,並且是一個常量,不可以修改
String字符串數據類型
5 類型轉換【瞭解】
5.1 自動類型轉換
小數據類型轉換到大數據類型
5.2 強制類型轉換
強制類型轉換,是從大數據類型到小數據類型的轉換過程。
double類型數據保存到int類型,這裏需要強制類型轉換。
格式:
double num1 = 3.5;
int num2 = (int) num1; //這裏存在數據精度丟失,並且是不可以逆
【個人建議】
對於基本數據類型的強制類型轉換,個人不建議使用,這裏會導致數據精度的丟失,並且有可能導致其他問題。
強制類型轉換在面向對象開發中,可以用來操作對象直接的關係
6 運算符
6.1 算術運算符
+ - * / % ()
- 從左至右計算
- 先乘除後加減
- 有括號先處理括號裏面的內容
- 除數不能爲0
%
7 ÷ 3 = 2 …… 1
2 相除的結果
1 是餘數
優先級問題:
簡單粗暴加括號
= 賦值號
作用是將賦值號右側的數據,賦值給左側的【變量】
算術運算符優化
+=, -=, *=, /=, %=
例如:
int num1 = 10;
int num2 = 20;
num2 = num1 + num2; ==> num2 += num1;
6.2 關係運算符
> < >= <= == !=
關係運算符的結果有且只有 true or false
用於在開發中的條件判斷使用
6.3 邏輯運算符
&&
與,並且
同真爲真,有假【即】假
||
或,或者
有真【即】真,同假爲假
!
非,取反
強牛 犟,假變真來,真變假
邏輯運算符:
一般用於組合條件的判斷,條件過濾,多情況分析。
斷路原則
【補充知識點 邏輯運算符斷路原則問題】
class Demo4 {
public static void main(String[] args) {
int num = 10;
boolean ret = 10 > 15 && num++ >= 10;
/*
斷路原則問題:
邏輯與斷路元素問題
10 > 15 該表達式結果爲false,已經決定了當前整個
邏輯與表達式的結果爲false,計算機爲了提高效率,
從邏輯與false條件開始,之後的表達式不再運行。
*/
System.out.println("num : " + num);
System.out.println("ret : " + ret);
int num1 = 10;
boolean ret1 = 10 > 5 || ++num1 > 5;
/*
斷路原則問題
邏輯或斷路原則問題
在邏輯或表達式中,出現了第一個爲true條件,整個
表達式結果已經明確爲true,不需要在進行之後的判
斷,節約計算機資源,提供效率。
*/
System.out.println("num1 : " + num1);
System.out.println("ret1 : " + ret1);
}
}
6.4 自增自減運算符
【注意事項】
-
自增自減運算符有且只能操作變量!!!
-
自增自減運算符獨立存在!!!單獨成行,減少代碼中的歧義!!!
-
【個人建議】
使用 += 1 和 -= 1 替代自增自減運算符
Swift取消了 自增自減運算符
++:
在變量之後,首先執行變量所在行語句,再執行自增1操作
在變量之前,首先執行變量自增1操作,再執行所在行語句
–:
在變量之後,首先執行變量所在行語句,再執行自減1操作
在變量之前,首先執行變量自減1操作,再執行所在行語句
6.5 條件運算符/三目運算符
格式:
條件判斷 ? true處理方式 : false處理方式;
條件運算符/三目運算符使用侷限性較大,類似於if - else結構。
7 從鍵盤上獲取用戶錄入的數據[CV大法]
學習初期不着急記這個,可以暫時用CV大法。
-
導包,點技能點
import java.util.Scanner;
class Demo1 {} -
獲取Scanner的變量, 掃描器的一個變量
Scanner sc = new Scanner(System.in); -
使用Scanner其中的方法
獲取int類型數據 sc.nextInt();
獲取double類型數據 sc.nextDouble();
獲取String類型字符串數據 sc.next(); sc.nextLine();
獲取一個char類型字符數據 sc.next().charAt(0);
sc.nextLine().charAt(0);
// 導包
import java.util.Scanner;
class Demo8 {
public static void main(String[] args) {
int score = 0;
// Scanner掃描器變量
Scanner sc = new Scanner(System.in);
System.out.println("請輸入學生的成績:");
score = sc.nextInt();
// 用戶輸入數據合法性判斷問題
if (score < 0 || score > 100) {
System.out.println("親,您輸入的數據不對哦~~~秋咪~~~");
// 程序退出
System.exit(0);
}
// if - else if
if (score >= 90) {
System.out.println("秀兒");
} else if (score >= 80) {
System.out.println("良兒");
} else if (score >= 70) {
System.out.println("中兒");
} else if (score >= 60) {
System.out.println("過兒");
} else {
System.out.println("讓你爹穿着拖鞋來學校一趟!!!");
}
}
}
8 分支結構
8.1 if分支結構
if (/* 布爾類型的表達式 true or false */) {
// 語句體
}
// 後續代碼
/*
執行流程
首先判斷布爾類型的表達式 true還是false
true 執行語句體
false 執行後續代碼
*/
8.2 if - else分支結構
if (/* 布爾類型的表達式 true or false */) {
// true語句體
} else {
// false語句體
}
/*
執行流程:
首先判斷if之後小括號裏面的布爾類型數據到底是什麼
如果爲true,執行true語句體
如果爲false,執行false語句體
世界上最遙遠的距離是,我在if裏,你在else裏
*/
8.3 if - else if分支結構
/*
學生的成績劃分:
>= 90 優秀
>= 80 良好
>= 70 中等
>= 60 及格
< 60 不及格
*/
if (/* 布爾條件1 */) {
// 處理方式1
} else if (/* 布爾條件2*/) {
// 處理方式2
} else if (/* 布爾條件3 */) {
// 處理方式3
} else {
// 無匹配項處理方式
}
/*
執行流程
使用已有條件匹配if之後的布爾條件
匹配到任何一個布爾條件,指定對應的處理結果,結束if - else if結構,執行後續代碼
如果沒有任何一個條件匹配,執行 else裏面語句,然後在執行後續代碼
注意
else可以省略!!!
8.4 【補充知識點 用於輸入數據的合法性判斷問題】
在實際開發中,存在生活中數據的合法性和程序運行的語法要求衝突問題。
在程序的運行過程中,我們需要用戶輸入的數據進行合法性判斷,如果用戶輸入的數據不是合法範圍以內的,需要給予用戶提示,並且不可以進入正常的代碼運行過程中。
學生的成績 0 ~ 100, 超出0~100都是不合法的!!!
- 不能大於100 score > 100
- 不能小於0 score < 0
- 滿足任何一個條件都是非法情況!!!
score > 100 || score < 0 - if 判斷
8.5 switch - case結構
switch (/* 變量|表達式 */) {
case 值1:
// 處理方式1;
break;
case 值2:
// 處理方式2;
break;
default:
// 最終處理方式
break;
}
/*
執行流程:
取出switch小括號裏面的數據匹配對應的case選擇
如果存在case匹配,執行對應的處理方式
如果沒有任何的一個case匹配。執行default處理方式
switch case使用注意事項
1. break關鍵字作用是用於跳出對應的case選項
2. break省略之後,執行對應的case選擇,會繼續運行到下一個break或者大括號結尾終止switch - case運行
3. 在case選項中不允許出現相同的選擇,語法錯誤!!!
4. 在switch case語句體中,能夠執行的代碼有且只能是case之後或者default之後的代碼,其他代碼都不可以執行!!!
5. default可以省略,按照自己的業務邏輯需要考慮是否省略default選擇,default可以處理用戶在輸入過程中超出case選項的一些特殊情況。
8.6 分支結構嵌套
class Demo11 {
public static void main(String[] args) {
int score = 89;
if (score >= 90) {
if (score >= 95) {
System.out.println("A+");
} else {
System.out.println("A-");
}
} else {
System.out.println("A--");
}
}
}
8.7 局部變量
存在於代碼塊中的變量!!!
- 局部變量有且只能在當前所處的代碼塊中使用,超出當前代碼塊範圍無效!!!【作用域問題】
- 在作用域範圍以內,任何的地方可以直接使用對應的變量
- 在一個變量的作用域範圍以內,不能重定義同名變量,報錯!
- 局部變量未賦值不能使用
9 循環結構
9.1 爲什麼使用循環
開發中我們會使用一些功能代碼多次,如果使用CV大法,治標不治本!!!會出現一下一些問題:
1. 代碼過於臃腫!!!AJCG要求一個方法代碼行數最多80行!!!
2. 代碼閱讀性極差!!!
3. 代碼維護性極差!!!
9.2 while循環
while (/* 循環條件判斷 */) {
// 循環體
// (循環條件變更)
}
/*
執行流程:
首先判斷while之後小括號裏面的內容結果如何
如果爲true,執行循環體,回到循環條件判斷
如果爲false,終止循環!!!
注意事項:
1. 學會循環過程推理,避免死循環
2. 如果出現了死循環,Ctrl + C 終止循環
*/
9.3 do - while循環
do {
// 循環體
// (循環條件變更)
} while (/* 循環條件判斷 */);
/*
執行流程:
首先do - while循環結構會執行一次循環體,然後再來判斷while之後的條件
如果循環條件爲true,循環繼續運行
如果循環條件爲false,終止循環!!!
*/
9.4 【補充知識點 while和do-while對比】
while循環每一次執行的循環體,都是在可控範圍以內的!每一次循環的執行都是在循環條件的控制之下來完成的。
do while循環中第一次執行循環體是沒有進行任何的條件判斷,這裏存在一定的隱患。
【個人建議】
1. 能使用while完成的,儘量少用do while結構
2. do while循環結構可以用於一些特定場景。
9.5 for循環
for (/* 循環條件初始化 */; /* 循環條件判斷 */; /* 循環條件變更 */) {
// 循環體
}
/*
for循環優勢
for循環小括號裏面的條件可以簡要的推出當前循環的執行次數和結束條件,後期使用到數組,算法中非常常見。
*/
9.6 關鍵字
9.6.1 break關鍵字
字面含義: 打破!!!
在switch - case功能中,跳出case選擇或者是default選擇。
break在循環中使用是用於跳出循環!!!
9.6.2 continue關鍵字
字面含義:
繼續!
功能:
結束本次循環,直接進入下一次循環!!!
使用注意事項:
1. 在while循環和do - while循環使用,需要注意continue關鍵字和循環條件變更之間的位置關係,防止出現死循環情況!
2. for循環中使用continue關鍵字沒有太多的顧慮。
9.7 循環使用總結
- 學會找出代碼中運行的規律,完成對於循環的實現。
數組,集合,數據遍歷,算法… - 時時刻刻要注意循環中的一個坑
死循環,continue… - 學會循環變量的變量推理過程
for循環循環次數,循環終止條件… - 學會使用嵌套循環
- 模塊化處理的思想
- 普適性代碼,已經代碼延展性的考慮
10 方法
10.1 爲什麼要使用方法
使用循環解決了一部分代碼複用的問題,但是治標不治本。代碼依然會出現一下問題
1. 代碼過於臃腫!!!
2. 閱讀性極差!!!
3. 維護性極差!!!
10.2 用main方法做榜樣
public static void main(String[] args) {
// 方法體
}
/*
public static :不要問!!!這個比較複雜,後邊細說。
void: 返回值類型,這裏void表示沒有返回值
main: 方法名,需要符合小駝峯命名法,見名知意,動賓結構
(String[] args): 形式參數列表
{
方法體
}
方法的模版:
public static ReturnType MethodName(Arguments) {
Method Body
}
方法定義的位置,是在class大括號以內,其他方法之外
*/
10.3 無參數無返回值方法
/*
需求
展示一個烤羊排~~~,sout
方法分析
public static 固定格式,不要問
返回值類型: void
方法名: bbq
形式參數列表: ()
方法聲明:
public static void bbq()
*/
/**
* 打印烤羊排~~~
*/
public static void bbq() {
System.out.println("烤羊排!!!");
}
10.4 有參數無返回值方法
10.4.1 一個參數
/*
什麼是參數
當前方法執行所需的外部數據
例如: 登陸時需要的賬號和密碼,取現金時銀行卡和密碼
需求
展示一個int類型數據
方法分析:
public static 固定格式,不要問
返回值類型:
void 沒有返回值,Sysout不是一個返回值,是一個展示數據的方式,是一種
反饋
方法名:
printIntNumber 見名知意,動賓結構,小駝峯命名法
形式參數列表:
這裏需要打印int類型數據
(int num)
方法聲明:
public static void printIntNumber(int num);
*/
/**
* 展示一個int類型數據
*
* @param num 要求用戶傳入一個int類型數據
*/
public static void printIntNumber(int num) {
System.out.println("用戶提供的int類型數據爲:" + num);
}
10.4.2 兩個或多個參數
/*
需求
打印兩個int類型數據之和
方法分析:
public static 固定格式,不要問
返回值類型:
功能是展示數據,打印數據,這裏不需要返回值。
方法名:
printSumOfTwoNumber 見名知意,動賓結構,小駝峯命名法
形式參數列表:
這裏需要兩個int類型數據
(int num1, int num2)
方法聲明:
public static void printSumOfTwoNumber(int num1, int num2)
*/
/**
* 打印兩個int類型數據的和
*
* @param num1 需要用戶提供的int類型數據
* @param num2 需要用戶提供的int類型數據
*/
public static void printSumOfTwoNumber(int num1, int num2) {
System.out.println("Sum : " + (num1 + num2));
}
10.5 調用時注意事項
調用時注意事項:
1. 帶有參數的方法一定要提供對應的數據類型,實際參數
2. 調用調用帶有參數的方法,給予實際參數時,數據類型一致化
3. 多參數方法中,需要在調用的過程給予方法對應的參數,個數不允許缺少
4. 多參數方法中,形式參數列表中聲明的參數類型和實際參數類型必須完成一致,一一對應,不允許一鍋亂燉
method(int num1, float num2, char ch, double num3);
10 ‘a’ 3.5F 5.5
method(10, 3.5F, ‘a’, 5.5) √
10.6 無參數有返回值方法
return關鍵字
1. 結束當前方法的運行
方法運行到return之後,方法運行結束,return之後的代碼不再執行。
2. 可以返回到方法之外數據
在return關鍵字之後的數據,可以返回到方法之外,利用返回值。
什麼是返回值:
返回值是當前方法對於方法之外提供的數據和表現。
這裏需要對應返回的數據,聲明對應的返回值類型。
【注意】
方法中如果需要返回值,必有有一個明確的return
1. 方法需要返回值,沒有retrun報錯
2. 方法需要返回值,return存在於一個非必須執行代碼中,會報錯。
方法中返回值類型是void,那麼可以使用return作爲方法的結束,return之後不能有任何數據。
/*
需求:
give Me Five
需要返回一個int類型數據5
方法分析:
public static 固定格式,不要問
返回值類型:
這裏需要返回的數值爲5,是一個int類型
int
方法名:
giveMeFive
形式參數列表:
不需要參數
()
方法聲明:
public static int giveMeFive()
*/
/**
* 返回一個int類型數據5
*
* @return 返回值爲int類型數據5
*/
public static int giveMeFive() {
// return之後的數據會被返回到方法之外
return 5;
}
10.6 有參數有返回值方法
/*
需求:
計算兩個int類型數據之和,返回結果
方法分析:
public static: 固定格式,不要問
返回值類型:
int完全夠用
方法名:
getSumOfTwoNumber √
returnSumOfTwoNumber 見名知意,動賓結構,小駝峯命名法
形式參數列表:
需要兩個int類型數據
(int num1, int num2)
方法聲明:
public static int getSumOfTwoNumber(int num1, int num2);
*/
/**
* 計算兩個int類型數據,並且通過返回值返回
*
* @param num1 int類型數據
* @param num2 int類型數據
* @return 兩個int類型數據的之後,返回值類型爲int類型
*/
public static int getSumOfTwoNumber(int num1, int num2) {
return num1 + num2;
}
10.7 方法總結
10.7.1 方法的三要素
返回值
方法名
形式參數列表
10.7.2 返回值類型
【個人建議】
儘量減少黑盒方法的使用。
-
返回值類型需要考慮對應的含義。
計算結果,狀態監控,判斷情況… -
選擇合適的返回值類型
a. 不要答非所問!!!
b. 要考慮數據的延展性!!! -
一個方法有且只能有一個返回值類型。
-
目前的建議:
當下不要考慮使用數組作爲返回值類型。
10.7.3 方法名
- 見名知意,動賓結構,小駝峯命名法!!!
- 希望大家的代碼是一個好的代碼。
- 不允許簡拼,不允許出現拼音
- 全英文,不會的查詞典。
不允許打開有道詞典劃屏取詞和鼠標取詞
10.7.4 形式參數列表
- 整個方法運行過程中,需要的必要外來數據!
- 調用方式時,形式參數列表和實際參數列表數據類型是完全一致!順序也是一致的!
- 考慮好對應的數據類型。
10.7.5 方法的封裝過程
需求分析
1. 分析需求的作用是什麼?
2. 考慮方法的名字,見名知意,動賓結構,小駝峯命名法
3. 形式參數列表
4. 返回值類型的選擇和對應含義解釋
分步驟完成
可以註釋完成每一步需要做的事情
實現代碼
不要認爲自己的代碼一定是對的
驗證過程
1. 正確情況下代碼運行是否OK
2. 使用錯誤的情況,驗證代碼的健壯性是否OK
10.7.6 方法封裝小技巧
- 功能單一化!!!
考慮後期的複用性,可移植性,模塊化… - 減少代碼中return的使用,提高代碼閱讀性
- 找出特定的情況優化代碼,提高效率
10.7.7 方法文檔註釋規範
/**
* 對於當前方法的整體解釋,可以把方法的分析過程,利害關係全部寫上
*
* @param argumentName參數名字 對於當前參數的功能解釋,提一些要求. 有多少個參
* 數就需要完成多少@param
* @return 返回值解釋,數據類型,返回值的含義,狀態,要求。
*/
11 練習題
1. 判斷用戶輸入的字符是不是英文字符,如果是輸出yes,不是輸出no
2. 判斷用戶輸入的工資是不是在5000以上,如果是,輸出需要繳稅,如果不是,輸出不需要繳稅
3. 用戶輸入一個年份,判斷這個年份是不是一個閏年。
4. 輸入兩個整數,打印兩數之差的絕對值。
5. 輸入一個數, 判斷是否是偶數,如果是偶數,輸出YES,如果是奇數.輸出NO
6. 輸入一個人的年份, 檢測這個是否是80後,如果是輸出YES,如果不是輸出NO(1980-1989年)
7. 展示0 ~ 100以內的所有偶數
8. 展示0 ~ 100以內的所有奇數
9. 計算1 - 150 的和
10. 逢7過!!!
11. 多種方法打印26個小寫字母
12. 例如:
輸入 5 8;
計算 5 + 6 + 7 + 8;
輸出 26.
13. 整數逆序輸出, 例如輸入一個整數12345,輸出5 4 3 2 1
14.
*****
*****
*****
*****
*****
15.
*
**
***
****
*****
16.
*
***
*****
*******
*********
17.
*
***
*****
*******
*********
*******
*****
***
*
18.
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A
19.
###*###
##*#*##
#*###*#
*#####*
#*###*#
##*#*##
###*###
20.
自己完成一個愛心~~~~❥(^_-) ❥(^_-)❥(^_-)
21. 完成一個9*9乘法表
22. 將一個正整數進行分解質因數操作 例如: 輸入90 結果 2*3*3*5
23. 使用循環完成30位以內的斐波那契數列
1 1 2 3 5 8 13 21...
24. 利用循環完成15的階乘
25. 使用do - while循環和switch - case 完成點菜功能
要求:
a. 展示菜單
b. 自動計算總價
c. 用戶選擇下單後退出循環
最好把這些代碼用方法封裝起來,練習方法的使用。
結尾
好了,這就是第一週的學習情況。千里之行,始於足下,忍住枯燥,反覆練習,纔有可能成功。