狂神说笔记——Java SE基础01
計算機預科
1.打開CMD的方式
2.管理員身份運行方式
- 選擇以管理員方式運行。
3.常見的Dos命令
盤符切換
C:\Users\subei>D 'D' 不是內部或外部命令,也不是可運行的程序 或批處理文件。C:\Users\subei>D:D:\>C:C:\Users\subei>F:F:\>查看當前盤符目錄下的全部目錄:dir
F:\>dir驅動器 F 中的卷是 工作臺卷的序列號是 1714-20F6F:\ 的目錄2021/05/17 16:15 <DIR> BaiduNetdiskDownload 2021/05/15 19:50 <DIR> CloudMusic 2021/05/14 21:19 <DIR> Dev-Cpp 2021/05/14 16:56 <DIR> DTL8Folder 2021/05/14 22:35 <DIR> HBuilderX 2021/05/14 22:36 <DIR> java 2021/05/14 17:00 <DIR> MyDrivers 2021/05/14 22:47 <DIR> Notepad++ 2021/05/14 22:29 <DIR> Sublime Text 3 2021/05/14 18:56 <DIR> Typora 2021/05/17 17:53 <DIR> VCW 2021/05/14 21:25 <DIR> VS2017 2021/05/14 21:47 <DIR> Windows Kits0 個文件 0 字節13 個目錄 663,783,088,128 可用字節F:\>E:E:\>dir驅動器 E 中的卷是 數據卷的序列號是 3F12-1129E:\ 的目錄2020/06/04 07:47 610,571,366 AI教程超級合輯.zip 2021/05/14 13:44 <DIR> java 2021/05/14 21:47 <DIR> NUT 2021/05/14 13:45 <DIR> Office Tool 2021/05/05 15:18 69,730,999 Office-Tool-with-runtime-v8.1.zip 2021/05/11 17:26 <DIR> 作業 2021/05/14 23:15 <DIR> 工具 2021/05/14 13:38 <DIR> 論文 2020/10/21 21:58 1,000,218 狂神說Java全棧學習路線.jpg3 個文件 681,302,583 字節6 個目錄 605,834,113,024 可用字節E:\>切換目錄:cd change directory
E:\>cd /d d:d:\>cd /d d:\levend:\LEVEN>cd ..d:\>返回上一級:cd …
清理屏幕: cls
退出終端:exit
查看電腦IP信息:ipconfig
打開計算機:calc
打開畫圖:mspaint
打開記事本:notepad
ping命令:ping 網址
文件操作
C:\Users\subei\Desktop>md testC:\Users\subei\Desktop>cd testC:\Users\subei\Desktop\test>cd>a.txtC:\Users\subei\Desktop\test>刪除文件
C:\Users\subei\Desktop\test>del a.txtC:\Users\subei\Desktop\test>cd ..C:\Users\subei\Desktop>rd testC:\Users\subei\Desktop>基礎
1.Java簡介
-
java的特性和優勢
- 簡單性
- 面向對象
- 可移植性
- 高性能
- 分布式
- 動態性
- 多線程
- 安全性
- 健壯性
-
Java的三大版本
- JavaSE:標準版(桌面程序,控制臺開發……)
- JavaME:嵌入式開發(手機、小家電……)
- JavaEE:E企業級開發(Web端、服務器開發……)
-
Java安裝與卸載開發環境
- 卸載JDK
- 刪除Java安裝目錄;
- 刪除JAVA_HOME;
- 刪除path下關于java的目錄;
- java -version驗證。
- 下載路徑:地址
- 安裝教程:傳送門
- 官網下載JDK8(選擇JDK8,比較穩定);
- 安裝JDK,步驟如上傳送門。
- 卸載JDK
2.Hello World
-
Hello World
-
隨便新建一個文件夾,存放代碼。
-
新建一個Java文件
- 文件后綴名為.java
- Hello.java
- 注意:系統可能沒有文件的后綴名,需手動打開顯示文件后綴名。
-
編寫代碼
public class Hello {public static void main(String[] args) {System.out.println("Hello World!Java!");}} -
編譯javac.java文件,會生成一個class文件!
-
運行class文件,java class文件。
-
可能會遇到的問題
- 每個單詞的大小不能出現問題,Java是大小寫敏感的;
- 盡量使用英文;
- 文件名和類名必須保證一致,并且首字母大寫;
- 符號使用的了中文。
-
Java運行機制
- 編譯型
- 解釋型
-
IDEA2020.2安裝
- 傳送門
-
Java中的注釋有三種:
- 單行注釋:只能注釋一行文字
- 多行注釋:可以注釋一段文字
- 文檔注釋
3.標識符與關鍵字
- 標識符
- 所有的標識符都應該以字母(A-Z 或者 a-z),美元符($),或者下劃線(_)開始;
- 首字符之后可以是字母(A-Z 或者 a-z)美元符($)、下劃線()或數字的任何字符組合;
- 不能使用關鍵字作為變量名或方法名;
- 標識符是大小寫敏感的;
- 可以使用中文命名,但是一般不建議這樣去使用,也不建議使用拼音。
- 關鍵字
| catch | char | const | class | continue |
| default | do | double | else | extends |
| final | finally | float | for | goto |
| if | implements | import | instanceof | int |
| interface | long | native | new | package |
| private | protected | public | return | short |
| static | strictfp | super | switch | this |
| throw | throws | transient | try | void |
| volatile | while | synchronized |
4.數據類型
- 強類型語言
- 要求變量的使用要嚴格符合規定,所有變量都必須先定義后才能使用。
- 弱類型語言
- 數據類型基本分類
- 基本類型
- 數值類型
- 整數類型
- 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字節
- double占8字節
- 字符類型:char占2字節
- 整數類型
- boolean類型:占1位其值只有tue和fase兩個。
- 數值類型
- 引用類型
- 類
- 接口
- 數組
- 基本類型
- 什么是字節
- 位(bit):是計算機內部數據儲存的最小單位,11001100是一個八位二進制數。
- 字節(byte):是計算機中數據處理的基本單位,習慣上用大寫B來表示,1B(byte字節)=8bit(位)。
- 字符:是指計算機中使用的字母、數字、字和符號。
- 1bit表示1位
- 1Byte表示一個字節1B=8b
- 1024B=1KB
- 1024KB=1M
- 1024M=1G
數據類型擴展及面試題
/*** @author subeiLY* @create 2021-05-25 9:17*/ public class Demo03 {public static void main(String[] args) {// 整數拓展: 進制 二進制0b 十進制 八進制0 十六進制0xint i=10;int i2 = 010; // 八進制0int i3 = 0x10; // 十六進制0xSystem.out.println(i); // 10System.out.println(i2); // 8System.out.println(i3); // 16System.out.println("-------------------------------------");//************************************************// 浮點數拓展// BigDecimal 數據工具類// float 有限 離散 舍入誤差 大約 接近但不等于// 最好完全使用浮點數進行比較float f = 0.1f; // 0.1double d = 1.0/10; // 0.1System.out.println(f==d); // falsefloat d1 = 2425444564215654564f;float d2 = d1 + 1;System.out.println(d1==d2); // trueSystem.out.println("-------------------------------------");//************************************************// 字符拓展char c1 = 'a';char c2 = '中';System.out.println(c1);System.out.println((int)c1); // 強制轉換System.out.println(c2);System.out.println((int)c2); // 強制轉換// 所有字符的本質還是數字// 編碼 Unicode 2字節 0 - 65536 Excelchar c3 = '\u0061';System.out.println(c3); // a// 轉義字符// \t 制表符// \n 換行// ......System.out.println("hello\tworld!");System.out.println("hello\nworld!");System.out.println("-------------------------------------");//String sa = new String("hello world");String sb = new String("hello world");System.out.println(sa==sb); // falseString sc = "hello world";String sd = "hello world";System.out.println(sc==sd); // true// 布爾值擴展boolean flag = true;if(flag==true){} // 新手if(flag){} // 老油條// 代碼要精簡易讀} }5.類型轉換
-
由于Java是強類型語言,所以要進行有些運算的時候的,需要用到類型轉換。
低 ------------------------------------------------> 高 byte -> short -> char -> int -> long -> float -> double -
運算中,不同類型的數據先轉化為同一類型,然后進行運算。
- 常見問題
6.變量與常量
- 變量:可以變化的量。
- Java是一種強類型語言,每個變量都必須聲明其類型。
- Java變量是程序中最基本的存儲單元,其要素包括變量名,變量類型和作用域。
- 每個變量都有類型,類型可以是基本類型,也可以是引用類型;
- 變量名必須是合法的標識符;
- 變量聲明是一條完整的語句,因此每一個聲明都必須以分號結束。
- 常量( Constant):初始化( initialize)后不能再改變值!不會變動的值;
- 所謂常量可以理解成一種特殊的變量,它的值被設定后,在程序運行過程中不允許被改變。
- 常量名一般使用大寫字符。
- 變量的命名規范
- 所有變量、方法、類名:見名知意;
- 類成員變量:首字母小和駝峰原則:monthSalary;
- 局部變量:首字母小寫和駝峰原則;
- 常量:大寫字母和下劃線:MAX_VALUE;
- 類名:首字母大寫和駝峰原則:Man, GoodMan;
- 方法名:首字母小寫和駝峰原則:run(),runRun()。
7.基本運算符
Java語言支持如下運算符:
- 算術運算符:+,-,*,/,%,++,–
- 賦值運算符: =
- 關系運算符:>,≤,>=,<=,==,!=, instanceof
- 邏輯運算符:&&,‖,!
- 位運算符:&,|,A,~,>>,<<,>>>(了解!!!)
- 條件運算符: ?:
- 擴展賦值運算符:+=,-=,*=,/=
8.自增自減運算符、初識Math類
package github.demo01;/*** @author subeiLY* @create 2021-05-25 20:00*/ public class Demo04 {public static void main(String[] args) {// ++ -- 自增,自減 一元運算符int a = 3;int b = a++; // 執行完這一行代碼后,先給b賦值,再自增System.out.println(a);int c = ++a; // 執行完這一行代碼前,先自增,再給c賦值System.out.println(a);System.out.println(b);System.out.println(c);// 冪運算 2^3double pow = Math.pow(2,3);System.out.println(pow);} }9.邏輯運算符、位運算符
package github.demo01;/*** @author subeiLY* @create 2021-05-25 20:10*/ public class Demo05 {// 邏輯運算符public static void main(String[] args) {// 與(and) 或(or) 非(取反)boolean a = true;boolean b = false;System.out.println("a && b:" + (a && b)); // 邏輯與:兩個變量都為真,結果才為trueSystem.out.println("a || b:" + (a || b)); // 邏輯或:兩個變量有一個為真,則結果才為trueSystem.out.println("!(a && b):" + !(a && b)); // 取反:如果是真,則變為假;如果是假,則變為真// 短路運算int c = 5;boolean d = (c<4)&&(c++<4);System.out.println(d);System.out.println(c);} } package github.demo01;/*** @author subeiLY* @create 2021-05-26 9:11*/ public class Demo06 {public static void main(String[] args) {/*A = 0011 1100B = 0000 1101 ----------------------------------A&B = 0000 1100A|B = 0011 1101A^B = 0011 0001~B = 1111 00102*8 = 16<< *2>> /2*/System.out.println(2<<3);} }10.三元運算符
package github.demo01;/*** @author subeiLY* @create 2021-05-26 9:39*/ public class Demo07 {public static void main(String[] args) {int a = 10;int b = 20;a += b; // a = a+ba -= b; // a = a-bSystem.out.println(a);// 字符串連接System.out.println(""+a+b);System.out.println(a+b+"");} } package github.demo01;/*** @author subeiLY* @create 2021-05-26 9:43*/ public class Demo08 {public static void main(String[] args) {// 三元運算符// x ? y : z// 如果x==true,則結果為y,否則結果為zint score = 80;String type = score < 60 ? "不及格" : "及格";System.out.println(type);} }11.包機制
- 為了更好地組織類,Java提供了包機制,用于區別類名的命名空間。
- 包語句的語法格式為:
- 一般利用公司域名倒置作為包名;
- 為了能夠使用某一個包的成員,我們需要在Java程序中明確導入該包。使用" import"語句可完成此功能。
12.JavaDoc
- javadoc命令是用來生成自己API文檔的。
- 參數信息
- @ author作者名
- @ version版本號
- @ since指明需要最早使用的jdk版本
- @ paran參數名
- @ return返回值情況
- @ throws異常拋出情況
流程控制
1.用戶交互 Scanner
-
之前我們學的基本語法中我們并沒有實現程序和人的交互,但是Java給我們提供了這樣一個工具類,我們可以獲取用戶的輸入。 java. util. Scanner是Java5的新特征,我們可以通過Scanner類來獲取用戶的輸入。
-
基本語法
Scanner s = new Scanner(System.in); -
通過 Scanner類的next()與 nextLine()方法獲取輸入的字符串,在讀取前我們一般需要使用 hasNext()與 hasNextLine()判斷是否還有輸入的數據。
- next():
- 1、一定要讀取到有效字符后才可以結束輸入。
- 2、對輸入有效字符之前遇到的空白,next()方法會自動將其去掉。
- 3、只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結束符。
- 4、next()不能得到帶有空格的字符串。
- nextLine():
- 1、以 Enter為結束符也就是說 nextLine()方法返回的是輸入回車之前的所有字符。
- 2、可以獲得空白。
2.順序結構
- JAVA的基本結構就是順序結構,除非特別指明,否則就按照順序一句一句執行。
- 順序結構是最簡單的算法結構。
- 語句與語句之間,框與框之間是按從上到下的順序進行的,它是由若干個依次執行的處理步驟組成的,它是任何一個算法都離不開的一種基本算法結構。
3.選擇結構
-
if單選擇結構
- 我們很多時候需要去判斷一個東西是否可行,然后我們才去執行,這樣一個過程在程序中用if語句來表示。
-
if雙選擇結構
if(布爾表達式){// 如果布爾表達式為true }else{// 如果布爾表達式值為false } package github.struct;import java.util.Scanner;/*** @author subeiLY* @create 2021-05-26 14:36*/ public class IFDemo02 {public static void main(String[] args) {// 考試分數大于60就是及格,小于60則為不及格Scanner scanner = new Scanner(System.in);System.out.println("請輸入成績:");int score = scanner.nextInt();if(score>60){System.out.println("及格");}else {System.out.println("不及格");}scanner.close();} } -
if多選擇結構
-
嵌套的f結構
if(布爾表達式1){// 如果布爾表達式1為true執行代碼if(布爾表達式2){// 如果布爾表達式2為true執行代碼} } -
switch多選擇結構
- 多選擇結構還有一個實現方式就是 switch case語句。
- switch case語句判斷一個變量與一系列值中某個值是否相等,每個值稱為一個分支。
4.循環結構
-
while循環
while(布爾表達式){// 循環內容 }- 只要布爾表達式為true,循環就會一直執行下去。
- 我們大多數情況是會讓循環停止下來的,我們需要一個讓表達式失效的方式來結束循環。
- 少部分情況需要循環一直執行,比如服務器的請求響應監聽等。
- 循環條件一直為true就會造成無限循環【死循環】,我們正常的業務編程中應該盡量避免死循環。會影響程序性能或者造成程序卡死奔潰!
-
do……while循環
do{// 代碼語句 }while(布爾表達式);- do……while循環和 while循環相似,不同的是,do…while循環至少會執行一次。
- While和do- While的區別:
- while先判斷后執行。 do……while是先執行后判斷!
- Do……while總是保證循環體會被至少執行一次!這是他們的主要差別。
-
for循環
- for循環語句是支持迭代的一種通用結構,是最有效、最靈活的循環結構。
- for循環執行的次數是在執行前就確定的。語法格式如下:
- 關于for循環有以下幾點說明:
- 最先執行初始化步驟。可以聲明一種類型,但可初始化一個或多個循環控制變量,也可以是空語句。
- 然后,檢測布爾表達式的值。如果為true,循環體被執行。如果為false,循環終止,開始執行循環體后面的語句。
- 執行一次循環后,更新循環控制變量(迭代因子控制循環變量的增減)。
- 再次檢測布爾表達式,執行上面的過程。
5.break& continue
- break在任何循環語句的主體部分,均可用 break控制循環的流程。 break用于強行退出循環,不執行循環中剩余的語句。( break語句也在 switch語句中使用)。
- continue語句用在循環語句體中,用于終止某次循環過程,即跳過循環體中尚未執行的語句,接著進行下一次是否執行循環的判定。
- 關于goto關鍵字
- goto關鍵字很早就在程序設計語言中出現。盡管goto仍是Java的一個保留字,但并未在語言中得到正式使用;Java沒有goto。然而,在 breaki和 continue這兩個關鍵字的身上,我們仍然能看出一些goto的影子—帶標簽的 break和continue。
- “標簽”是指后面跟一個冒號的標識符,例如:label;
- 對Java來說唯一用到標簽的地方是在循環語句之前。而在循環之前設置標簽的唯一理由是:我們希望在其中嵌套另一個循環,由于 break和 continue關鍵字通常只中斷當前循環,但若隨同標簽使用,它們就會中斷到存在標簽的地方。
方法
1.何謂方法
- Java方法是語句的集合,它們在一起執行一個功能。
- 方法是解決一類問題的步驟的有序組合;
- 方法包含于類或對象中;
- 方法在程序中被創建,在其他地方被引用。
- 設計方法的原則:方法的本意是功能塊,就是實現某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性,就是一個方法只完成1個功能,這樣利于我們后期的擴展。
2.方法的定義及調用
-
Java的方法類似于其它語言的函數,是一段用來完成特定功能的代碼片段,一般情況下,定義一個方法包含以下語法:
-
方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:
- 修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的訪問類型。
- 返回值類型:方法可能會返回值。 returnValueType是方法返回值的數據類型。有些方法執行所需的操作,但沒有返回值。在這種情況下, returnValueType是關鍵字void。
- 方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
- 參數類型:參數像是一個占位符。當方法被調用時,傳遞值給參數。這個值被稱為實參或變量。參數列表是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。
- 形式參數:在方法被調用時用于接收外界輸入的數據。
- 實參:調用方法時實際傳給方法的數據。
- 方法體:方法體包含具體的語句,定義該方法的功能。
-
調用方法:對象名.方法名(實參列表)
-
Java支持兩種調用方法的方式,根據方法是否返回值來選擇,當方法返回一個值的時候,方法調用通常被當做一個值。例如:
- 如果方法返回值是void,方法調用一定是一條語句。
- 案例
課后作業:值傳遞和引用傳遞
- 方法可以修改傳遞引用所對應的變量值,而不能修改傳遞值調用所對應的變量值,這句話相當重要,這是按值調用與引用調用的根本區別,以下為分析:
- 按值調用(call by value)表示方法接受的時調用者提供的值。
分析:
- 1)value被初始化為x值的一個拷貝(也就是10)
- 2)value被乘以3后等于30,但注意此時x的值仍為10!
- 3)這個方法結束后,參數變量value不再使用,被回收。
**結論:**當傳遞方法參數類型為基本數據類型(數字以及布爾值)時,一個方法是不可能修改一個基本數據類型的參數。
- 按引用調用(call by reference)
- 按引用調用則表示方法接收的是調用者提供的變量地址(如果是C語言的話來說就是指針啦,當然java并沒有指針的概念)
- 當然java中除了基本數據類型還有引用數據類型,也就是對象引用,那么對于這種數據類型又是怎么樣的情況呢?我們還是一樣先來看一個例子:
先聲明一個User對象類型:
- 執行class
- 分析一下這個過程:
分析:
- 1)student變量被初始化為user值的拷貝,這里是一個對象的引用。
- 2)調用student變量的set方法作用在這個引用對象上,user和student同時引用的User對象內部值被修改。
- 3)方法結束后,student變量不再使用,被釋放,而user還是沒有變,依然指向User對象。
**結論:**顯然,User的值被改變了,但是這是將最開始所對應得值改變了,把User的本身屬性改變了,才會進行值得變化,雖然看似是按引用傳遞值,但是實際上是將值改變了。
- 到這里估計不少人都蒙逼了,下面我們通過一個反例來說明。
- 通過程序,會發現user和stu的值并沒有發生變化,也就是方法并沒有改變存儲在變量user和stu中的對象引用。swap方法的參數x和y被初始化為兩個對象引用的拷貝,這個方法交換的是這兩個拷貝的值而已,最終,所做的事都是白費力氣罷了。在方法結束后x,y將被丟棄,而原來的變量user和stu仍然引用這個方法調用之前所引用的對象。
- 這個過程也充分說明了java程序設計語言對對象采用的不是引用調用,實際上是對象引用進行的是值傳遞,當然在這里我們可以簡單理解為這就是按值調用和引用調用的區別,而且必須明白即使java函數在傳遞引用數據類型時,也只是拷貝了引用的值罷了,之所以能修改引用數據是因為它們同時指向了一個對象,但這仍然是按值調用而不是引用調用。
- 總結
- 一個方法不能修改一個基本數據類型的參數(數值型和布爾型)。
- 一個方法可以修改一個引用所指向的對象狀態,但這仍然是按值調用而非引用調用。
- 上面兩種傳遞都進行了值拷貝的過程。
以上分析借鑒了zejian_的博文
3.方法重載
- 重載就是在一個類中,有相同的函數名稱,但形參不同的函數。
- 方法的重載的規則
- 方法名稱必須相同。
- 參數列表必須不同(個數不同、或類型不同、參數排列順序不同等)
方法的返回類型可以相同也可以不相同。 - 僅僅返回類型不同不足以成為方法的重載。
- 實現理論:
- 方法名稱相同時,編譯器會根據調用方法的參數個數、參數類型等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯。
4.命令行傳參
package github.method;/*** @author subeiLY* @create 2021-05-27 10:41*/ public class Demo03 {public static void main(String[] args) {// args.length 數組長度for(int i=0;i < args.length;i++){System.out.println("args[" + i + "]:" + args[i]);}} }5.可變參數
- JDK1.5開始,Java支持傳遞同類型的可變參數給一個方法。
- 在方法聲明中,在指定參數類型后加一個省略號()。
- 一個方法中只能指定一個可變參數,它必須是方法的最后一個參數。任何普通的參數必須在它之前聲明。
6.遞歸
- A方法調用B方法,我們很容易理解!
- 遞歸就是:A方法調用A方法!就是自己調用自己。
- 利用遞歸可以用簡單的程序來解決一些復雜的問題。它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述岀解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。
- 遞歸結構包括兩個部分:
- 遞歸頭:什么時候不調用自身方法。如果沒有頭,將陷入死循環;
- 遞歸體:什么時候需要調用自身方法。
- 寫一個計算器,要求實現加減乘除功能,井且能夠循環接收新的數據,通過用戶交互實現。
總結
以上是生活随笔為你收集整理的狂神说笔记——Java SE基础01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 总要去趟武功山吧
- 下一篇: iOS/Android 微信及浏览器中唤