web網(wǎng)站開發(fā)基本流程圖黃岡網(wǎng)站seo
引言
Java作為一門廣泛應用于企業(yè)級開發(fā)的編程語言,對初學者來說可能會感到有些復雜。然而,通過適當?shù)膶W習方法和資源,即使是小白也可以輕松掌握Java的基礎知識。本文將提供一些有用的建議和資源,幫助小白自學Java基礎。
學習步驟
1、理解基本概念
在開始學習Java之前,了解一些基本概念是非常重要的。理解面向?qū)ο缶幊?#xff08;OOP)的概念、變量、數(shù)據(jù)類型、流程控制語句以及函數(shù)等基礎知識,將有助于你更好地理解Java編程語言。
2. 學習Java語法
掌握Java的語法是學習Java編程的關鍵。學習Java核心概念,如類、對象、繼承、多態(tài)等。同時,學習掌握Java中的常用語法元素,如變量聲明、運算符、條件語句、循環(huán)語句以及異常處理。
3. 編寫簡單程序
為了加深對Java語法的理解,從簡單的程序開始編寫。例如,編寫一個打印"Hello, World!"的程序或者計算兩個數(shù)字之和的程序。通過實踐來鞏固所學的知識。
4. 閱讀相關教程和文檔
借助豐富的在線資源,如CSDN上的Java教程、博客和文檔,加深對Java的理解。這些教程通常會提供示例代碼和詳細解釋,幫助你更好地學習和掌握Java的各個方面。
5. 參與編程社區(qū)
加入一些活躍的Java編程社區(qū),例如CSDN論壇或Stack Overflow,可以向經(jīng)驗豐富的開發(fā)者尋求幫助和建議。在這些社區(qū)上與其他學習者互動,分享問題和解決方案,相互學習和進步。
6. 實踐項目
參與一些簡單的實踐項目,將所學的知識應用到實際中。嘗試解決一些問題,編寫小型應用程序,并逐漸增加難度。通過實踐來提高自己的編程能力和理解深度。
自學知識點
如下圖:
?1.Java語言概述
Java語言版本迭代概述:
1991年 Green項目,開發(fā)語言最初命名為Oak (橡樹)
1994年,開發(fā)組意識到Oak 非常適合于互聯(lián)網(wǎng)
1996年,發(fā)布JDK 1.0,約8.3萬個網(wǎng)頁應用Java技術來制作
1997年,發(fā)布JDK 1.1,JavaOne會議召開,創(chuàng)當時全球同類會議規(guī)模之最
1998年,發(fā)布JDK 1.2,同年發(fā)布企業(yè)平臺J2EE
1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技術誕生
2004年,發(fā)布里程碑式版本:JDK 1.5,為突出此版本的重要性,更名為JDK 5.0
2005年,J2SE -> JavaSE,J2EE -> JavaEE,J2ME -> JavaME
2009年,Oracle公司收購SUN,交易價格74億美元
2011年,發(fā)布JDK 7.0
2014年,發(fā)布JDK 8.0,是繼JDK 5.0以來變化最大的版本
2017年,發(fā)布JDK 9.0,最大限度實現(xiàn)模塊化
2018年3月,發(fā)布JDK 10.0,版本號也稱為18.3
2018年9月,發(fā)布JDK 11.0,版本號也稱為18.9
Java語言應用的領域:
>Java Web開發(fā):后臺開發(fā)
>大數(shù)據(jù)開發(fā):
>Android應用程序開發(fā):客戶端開發(fā)
Java語言的特點
> 面向?qū)ο笮?#xff1a;
兩個要素:類、對象
三個特征:封裝、繼承、多態(tài)
> 健壯性:① 去除了C語言中的指針 ②自動的垃圾回收機制 -->仍然會出現(xiàn)內(nèi)存溢出、內(nèi)存泄漏
> 跨平臺型:write once,run anywhere:一次編譯,到處運行
功勞歸功于:JVM
2.開發(fā)環(huán)境搭建?(重點)
JDK、JRE、JVM的關系
JDK的下載、安裝
下載:Oracle | Cloud Applications and Cloud Platform
安裝:傻瓜式安裝:JDK 、JRE
? ?注意問題:安裝軟件的路徑中不能包含中文、空格。?
path環(huán)境變量的配置
path環(huán)境變量:windows操作系統(tǒng)執(zhí)行命令時所要搜尋的路徑
為什么要配置path:希望java的開發(fā)工具(javac.exe,java.exe)在任何的文件路徑下都可以執(zhí)行成功。
如何配置?
?3.Java程序——HelloWorld
?需要先創(chuàng)建一個txt文件,命名為HelloWorld
?進入txt文件寫入代碼:
class HelloWorld{public static void main(String[] args){System.out.println("Hello,World!");}
}
輸入完成后進行修改后綴:
最后按Win+R輸入cmd回車進入命令窗口輸入DOS命令進入Java文件目錄
常用的DOS命令:
進入根目錄首先編譯:
javac HelloWorld.java
編譯完成后進行運行:
java HelloWorld
常見問題
?總結
1.java程序編寫-編譯-運行的過程
編寫:我們將編寫的java代碼保存在以".java"結尾的源文件中
編譯:使用javac.exe命令編譯我們的java源文件。格式:javac 源文件名.java
運行:使用java.exe命令解釋運行我們的字節(jié)碼文件。 格式:java 類名
2.在一個java源文件中可以聲明多個class。但是,只能最多有一個類聲明為public的。
而且要求聲明為public的類的類名必須與源文件名相同。
3. 程序的入口是main()方法。格式是固定的。
4. 輸出語句:
System.out.println():先輸出數(shù)據(jù),然后換行
System.out.print():只輸出數(shù)據(jù)
5.每一行執(zhí)行語句都以";"結束。
6.編譯的過程:編譯以后,會生成一個或多個字節(jié)碼文件。字節(jié)碼文件的文件名與java源文件中的類名相同。
4.注釋與API文檔等
1.注釋:Comment
分類:
單行注釋://
多行注釋:/* ? ?*/
文檔注釋:/** ? ?*/
作用:
① 對所寫的程序進行解釋說明,增強可讀性。方便自己,方便別人
② 調(diào)試所寫的代碼
特點:
①單行注釋和多行注釋,注釋了的內(nèi)容不參與編譯。
? 換句話說,編譯以后生成的.class結尾的字節(jié)碼文件中不包含注釋掉的信息
② 注釋內(nèi)容可以被JDK提供的工具 javadoc 所解析,生成一套以網(wǎng)頁文件形式體現(xiàn)的該程序的說明文檔。
③ 多行注釋不可以嵌套使用
2.Java API 文檔:
API:application programming interface。習慣上:將語言提供的類庫,都稱為api.
API文檔:針對于提供的類庫如何使用,給的一個說明書。類似于《新華字典》
3.良好的編程風格
5.關鍵字與標識符
1.java關鍵字的使用
定義:被Java語言賦予了特殊含義,用做專門用途的字符串(單詞)
特點:關鍵字中所字母都為小寫
具體哪些關鍵字如下圖:
?2.保留字:現(xiàn)Java版本尚未使用,但以后版本可能會作為關鍵字使用。
具體哪些保留字:goto 、const
注意:自己命名標識符時要避免使用這些保留字
?3.標識符的使用
定義:凡是自己可以起名字的地方都叫標識符。
涉及到的結構:
包名、類名、接口名、變量名、方法名、常量名
規(guī)則:(必須要遵守。否則,編譯不通過)
?規(guī)范:(可以不遵守,不影響編譯和運行。但是要求大家遵守)
?注意點:?
在起名字時,為了提高閱讀性,要盡量意義,“見名知意”。
6.變量的使用(重點)
1.變量的分類
1.1 按數(shù)據(jù)類型分類
詳細說明:
1. 整型:byte(1字節(jié)=8bit) \ short(2字節(jié)) \ int(4字節(jié)) \ long(8字節(jié))
? ? ① byte范圍:-128 ~ 127
? ? ② 聲明long型變量,必須以"l"或"L"結尾
? ? ③ 通常,定義整型變量時,使用int型。
? ? ④整型的常量,默認類型是:int型
2. 浮點型:float(4字節(jié)) \ double(8字節(jié))
? ? ① 浮點型,表示帶小數(shù)點的數(shù)值
?? ?② float表示數(shù)值的范圍比long還大
?? ?③ 定義float類型變量時,變量要以"f"或"F"結尾
?? ?④ 通常,定義浮點型變量時,使用double型。
?? ?⑤ 浮點型的常量,默認類型為:double
3. 字符型:char (1字符=2字節(jié))
?? ?① 定義char型變量,通常使用一對'',內(nèi)部只能寫一個字符
?? ?② 表示方式:1.聲明一個字符 2.轉(zhuǎn)義字符 3.直接使用 Unicode 值來表示字符型常量
4.布爾型:boolean
?? ?① 只能取兩個值之一:true 、 false
?? ?② 常常在條件判斷、循環(huán)結構中使用?
1.2 按聲明的位置分類(了解)
?2.定義變量的格式:
數(shù)據(jù)類型 ?變量名 = 變量值;
或
數(shù)據(jù)類型 ?變量名;
變量名 = 變量值;
3.變量使用的注意點:
? ?① 變量必須先聲明,后使用
? ?② 變量都定義在其作用域內(nèi)。在作用域內(nèi),它是有效的。換句話說,出了作用域,就失效了
? ?③ 同一個作用域內(nèi),不可以聲明兩個同名的變量
4.基本數(shù)據(jù)類型變量間運算規(guī)則
4.1 涉及到的基本數(shù)據(jù)類型:除了boolean之外的其他7種
4.2 自動類型轉(zhuǎn)換(只涉及7種基本數(shù)據(jù)類型)
結論:當容量小的數(shù)據(jù)類型的變量與容量大的數(shù)據(jù)類型的變量做運算時,結果自動提升為容量大的數(shù)據(jù)類型。
?? ?byte 、char 、short --> int --> long --> float --> double?
?? ?特別的:當byte、char、short三種類型的變量做運算時,結果為int型
說明:此時的容量大小指的是,表示數(shù)的范圍的大和小。比如:float容量要大于long的容量
4.3 強制類型轉(zhuǎn)換(只涉及7種基本數(shù)據(jù)類型):自動類型提升運算的逆運算。
1.需要使用強轉(zhuǎn)符:()
2.注意點:強制類型轉(zhuǎn)換,可能導致精度損失。
4.4 String與8種基本數(shù)據(jù)類型間的運算
1. String屬于引用數(shù)據(jù)類型,翻譯為:字符串
2. 聲明String類型變量時,使用一對""
3. String可以和8種基本數(shù)據(jù)類型變量做運算,且運算只能是連接運算:+
4. 運算的結果仍然是String類型
避免:
String s = 123;//編譯錯誤
String s1 = "123";
int i = (int)s1;//編譯錯誤
7.運算符
1.算術運算符: + - + - * / % (前)++ (后)++ (前)-- (后)-- +?
【典型代碼】
?? ??? ?//除號:/int num1 = 12;int num2 = 5;int result1 = num1 / num2;System.out.println(result1);//2
?? ??? ?// %:取余運算//結果的符號與被模數(shù)的符號相同//開發(fā)中,經(jīng)常使用%來判斷能否被除盡的情況。int m1 = 12;int n1 = 5;System.out.println("m1 % n1 = " + m1 % n1);int m2 = -12;int n2 = 5;System.out.println("m2 % n2 = " + m2 % n2);int m3 = 12;int n3 = -5;System.out.println("m3 % n3 = " + m3 % n3);int m4 = -12;int n4 = -5;System.out.println("m4 % n4 = " + m4 % n4);
//(前)++ :先自增1,后運算//(后)++ :先運算,后自增1int a1 = 10;int b1 = ++a1;System.out.println("a1 = " + a1 + ",b1 = " + b1);int a2 = 10;int b2 = a2++;System.out.println("a2 = " + a2 + ",b2 = " + b2);int a3 = 10;++a3;//a3++;int b3 = a3;
//(前)-- :先自減1,后運算//(后)-- :先運算,后自減1int a4 = 10;int b4 = a4--;//int b4 = --a4;System.out.println("a4 = " + a4 + ",b4 = " + b4);
【特別說明的】
1.//(前)++ :先自增1,后運算
?//(后)++ :先運算,后自增1
2.//(前)-- :先自減1,后運算
? //(后)-- :先運算,后自減1
3.連接符:+:只能使用在String與其他數(shù)據(jù)類型變量之間使用。
2.賦值運算符:= ?+= ?-= ?*= ?/= ?%=?
【典型代碼】
?? ??? ?int i2,j2;//連續(xù)賦值i2 = j2 = 10;//***************int i3 = 10,j3 = 20;int num1 = 10;num1 += 2;//num1 = num1 + 2;System.out.println(num1);//12int num2 = 12;num2 %= 5;//num2 = num2 % 5;System.out.println(num2);short s1 = 10;//s1 = s1 + 2;//編譯失敗s1 += 2;//結論:不會改變變量本身的數(shù)據(jù)類型System.out.println(s1);
【特別說明的】
1.運算的結果不會改變變量本身的數(shù)據(jù)類型
2.
? ? ? 開發(fā)中,如果希望變量實現(xiàn)+2的操作,有幾種方法?(前提:int num = 10;)
? ? ? 方式一:num = num + 2;
? ? ? 方式二:num += 2; (推薦)
?? ??? ?
? ? ? 開發(fā)中,如果希望變量實現(xiàn)+1的操作,有幾種方法?(前提:int num = 10;)
? ? ? 方式一:num = num + 1;
? ? ? 方式二:num += 1;?
? ? ? 方式三:num++; (推薦)
3.比較運算符(關系運算符): == != > ?< ?>= ?<= ?instanceof
【典型代碼】
?? ??? ?int i = 10;int j = 20;System.out.println(i == j);//falseSystem.out.println(i = j);//20boolean b1 = true;boolean b2 = false;System.out.println(b2 == b1);//falseSystem.out.println(b2 = b1);//true
【特別說明的】
1.比較運算符的結果是boolean類型
2.> ?< ?>= ?<= :只能使用在數(shù)值類型的數(shù)據(jù)之間。
3. == 和 !=: 不僅可以使用在數(shù)值類型數(shù)據(jù)之間,還可以使用在其他引用類型變量之間。
Account acct1 = new Account(1000);
Account acct2 = new Account(1000);
boolean b1 = (acct1 == acct2);//比較兩個Account是否是同一個賬戶。
boolean b2 = (acct1 != acct2);//
4.邏輯運算符:& && ?| ?|| ! ?^
【典型代碼】
?? ??? ?//區(qū)分& 與 &&//相同點1:& 與 ?&& 的運算結果相同//相同點2:當符號左邊是true時,二者都會執(zhí)行符號右邊的運算//不同點:當符號左邊是false時,&繼續(xù)執(zhí)行符號右邊的運算。&&不再執(zhí)行符號右邊的運算。//開發(fā)中,推薦使用&&boolean b1 = true;b1 = false;int num1 = 10;if(b1 & (num1++ > 0)){System.out.println("我現(xiàn)在在北京");}else{System.out.println("我現(xiàn)在在南京");}System.out.println("num1 = " + num1);boolean b2 = true;b2 = false;int num2 = 10;if(b2 && (num2++ > 0)){System.out.println("我現(xiàn)在在北京");}else{System.out.println("我現(xiàn)在在南京");}System.out.println("num2 = " + num2);
?? ???
?// 區(qū)分:| 與 ||?//相同點1:| 與 ?|| 的運算結果相同//相同點2:當符號左邊是false時,二者都會執(zhí)行符號右邊的運算//不同點3:當符號左邊是true時,|繼續(xù)執(zhí)行符號右邊的運算,而||不再執(zhí)行符號右邊的運算//開發(fā)中,推薦使用||boolean b3 = false;b3 = true;int num3 = 10;if(b3 | (num3++ > 0)){System.out.println("我現(xiàn)在在北京");}else{System.out.println("我現(xiàn)在在南京");}System.out.println("num3 = " + num3);boolean b4 = false;b4 = true;int num4 = 10;if(b4 || (num4++ > 0)){System.out.println("我現(xiàn)在在北京");}else{System.out.println("我現(xiàn)在在南京");}System.out.println("num4 = " + num4);
【特別說明的】
1.邏輯運算符操作的都是boolean類型的變量。而且結果也是boolean類型
5.位運算符:<< ?>> >>> & ?| ?^ ?~
【典型代碼】
?? ??? ?int i = 21;i = -21;System.out.println("i << 2 :" + (i << 2));System.out.println("i << 3 :" + (i << 3));System.out.println("i << 27 :" + (i << 27));int m = 12;int n = 5;System.out.println("m & n :" + (m & n));System.out.println("m | n :" + (m | n));System.out.println("m ^ n :" + (m ^ n));
【面試題】 你能否寫出最高效的2 * 8的實現(xiàn)方式??
答案:2 << 3 ?或 ?8 << 1
【特別說明的】
1. 位運算符操作的都是整型的數(shù)據(jù)
2. << :在一定范圍內(nèi),每向左移1位,相當于 * 2
? ?>> :在一定范圍內(nèi),每向右移1位,相當于 / 2
典型題目:
1.交換兩個變量的值。
2.實現(xiàn)60的二進制到十六進制的轉(zhuǎn)換
6.三元運算符:(條件表達式)? 表達式1 : 表達式2
【典型代碼】
1.獲取兩個整數(shù)的較大值
int num1 = 10;
int num2 = 20;int max = (num1 > num2) ? num1 : num2;
System.out.println("較大值是:" + max);
說明:在上面的代碼中,我們首先聲明了兩個整數(shù)變量num1
和num2
,然后使用三元表達式來比較這兩個變量的大小。如果num1
大于num2
,則將num1
賦值給max
變量;否則,將num2
賦值給max
變量。最后,我們通過打印語句輸出較大值。
你可以根據(jù)實際情況更改num1
和num2
的值,并進行測試。
2.獲取三個數(shù)的最大值
int max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
說明:上述代碼假設有三個整數(shù)變量a,b和c,并將最大值存儲在變量max中。它通過比較a和b的大小,然后再比較結果與c的大小,從而確定最大值。
這是一個簡單的示例,如果要使用更多的數(shù)字進行比較,則需要根據(jù)需要擴展表達式。
【特別說明的】
1. 說明
① 條件表達式的結果為boolean類型
② 根據(jù)條件表達式真或假,決定執(zhí)行表達式1,還是表達式2.
? 如果表達式為true,則執(zhí)行表達式1。
? 如果表達式為false,則執(zhí)行表達式2。
③ 表達式1 和表達式2要求是一致的。
④ 三元運算符可以嵌套使用
2.?
凡是可以使用三元運算符的地方,都可以改寫為if-else
反之,不成立。
3. 如果程序既可以使用三元運算符,又可以使用if-else結構,那么優(yōu)先選擇三元運算符。原因:簡潔、執(zhí)行效率高。