課程地址:https://www.imooc.com/learn/85html
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.htmljava
JAVA_HOME C:\Program Files\Java\jdk-9.0.4
C:\Program Files\Java\jdk-9.0.4\bin
.;C:\Program Files\Java\jdk-9.0.4\lib
(1)記事本開發:編程
public class HelloWorld{ public static void main(String[] args){ System.out.printIn("welcome to imooc!"); } }
public class HelloWorld { public static void main(String[] args) { System.out.println("welcome to imooc!"); } }
運行後多增長了個.class的文件數組
(2)Eclipse工具開發:安全
Eclipse下載地址:https://www.eclipse.org/downloads/oracle
(1)建立java項目dom
(2)建立程序包eclipse
(3)編寫java源程序工具
(4)運行java程序spa
空白地方右擊
自動建立包
項目右擊屬性
導入:
Java 關鍵字是區分大小寫的
public class HelloWorld{ public static void main(String[] args) { String hobby = '慕課網'; System.out.println(hobby); } }
Java 語言是一種強類型語言。通俗點說就是,在 Java 中存儲的數據都是有類型的,並且必須在編譯時就肯定其類型。 Java 中有兩類數據類型:
在 Java 的領域裏,基本數據類型變量存的是數據自己,而引用類型變量存的是保存數據的空間地址。說白了,基本數據類型變量裏存儲的是直接放在抽屜裏的東西,而引用數據類型變量裏存儲的是這個抽屜的鑰匙,鑰匙和抽屜一一對應。
一、Java 中的變量須要先聲明後使用
二、變量使用時,能夠聲明變量的同時進行初始化
也能夠先聲明後賦值
三、變量中每次只能賦一個值,但能夠修改屢次
四、main 方法中定義的變量必須先賦值,而後才能輸出
五、雖然語法中沒有提示錯誤,但在實際開發中,變量名不建議使用中文,容易產生安全隱患,譬如後期跨平臺操做時出現亂碼等等
在 Java 程序中,不一樣的基本數據類型的數據之間常常須要進行相互轉換。例如:
代碼中 int 型變量 score1 能夠直接爲 double 型變量 score2 完成賦值操做,運行結果爲: 82.0
這種轉換稱爲自動類型轉換。
固然自動類型轉換是須要知足特定的條件的:
1. 目標類型能與源類型兼容,如 double 型兼容 int 型,可是 char 型不能兼容 int 型
2. 目標類型大於源類型,如 double 類型長度爲 8 字節, int 類型爲 4 字節,所以 double 類型的變量裏直接能夠存放 int 類型的數據,但反過來就不能夠了
語法:( 數據類型 ) 數值
運行結果:
能夠看到,經過強制類型轉換將 75.8 賦值給 int 型變量後,結果爲 75,數值上並未進行四捨五入,而是直接將小數位截斷。
所謂常量,咱們能夠理解爲是一種特殊的變量,它的值被設定後,在程序運行過程當中不容許改變。
語法:final 常量名 = 值;
程序中使用常量能夠提升代碼的可維護性。例如,在項目開發時,咱們須要指定用戶的性別,此時能夠定義一個常量 SEX,賦值爲 "男",在須要指定用戶性別的地方直接調用此常量便可,避免了因爲用戶的不規範賦值致使程序出錯的狀況。
在編寫程序時,常常須要添加一些註釋,用以描述某段代碼的做用。
通常來講,對於一份規範的程序源代碼而言,註釋應該佔到源代碼的 1/3 以上。所以,註釋是程序源代碼的重要組成部分,必定要加以重視哦!
Java 中註釋有三種類型:單行註釋、多行註釋、文檔註釋
運行結果: Hello Imooc!
看:被註釋的代碼塊在程序運行時是不會被執行的~~
咱們能夠經過 javadoc 命令從文檔註釋中提取內容,生成程序的 API 幫助文檔。
打開首頁,查看下生成的 API 文檔
PS:使用文檔註釋時還可使用 javadoc 標記,生成更詳細的文檔信息:
@author 標明開發該類模塊的做者
@version 標明該類模塊的版本
@see 參考轉向,也就是相關主題
@param 對方法中某參數的說明
@return 對方法返回值的說明
@exception 對方法可能拋出的異常進行說明
Ø 算術運算符
Ø 賦值運算符
Ø 比較運算符
Ø 邏輯運算符
Ø 條件運算符
其中,++ 和 -- 既能夠出如今操做數的左邊,也能夠出如今右邊,但結果是不一樣滴
例1:
運行結果:
例2:
運行結果:
必定要注意哦!自增和自減運算符只能用於操做變量,不能直接用於操做數值或常量!例如 5++ 、 8-- 等寫法都是錯誤滴!
賦值運算符是指爲變量或常量指定數值的符號。如可使用 「=」 將右邊的表達式結果賦給左邊的操做數。
Java 支持的經常使用賦值運算符,以下表所示:
比較運算符用於判斷兩個數據的大小,例如:大於、等於、不等於。比較的結果是一個布爾值( true 或 false )。
Java 中經常使用的比較運算符以下表所示:
注意哦:
一、 > 、 < 、 >= 、 <= 只支持左右兩邊操做數是數值類型
二、 == 、 != 兩邊的操做數既能夠是數值類型,也能夠是引用類型
邏輯運算符主要用於進行邏輯運算。Java 中經常使用的邏輯運算符以下表所示:
咱們能夠從「投票選舉」的角度理解邏輯運算符:
一、 與:要求全部人都投票贊成,才能經過某議題
二、 或:只要求一我的投票贊成就能夠經過某議題
三、 非:某人本來投票贊成,經過非運算符,可使其投票無效
四、 異或:有且只能有一我的投票贊成,才能夠經過某議題
當使用邏輯運算符時,咱們會遇到一種頗有趣的「短路」現象。
譬如:( one > two ) && ( one < three ) 中,若是能肯定左邊 one > two 運行結果爲 false , 則系統就認爲已經沒有必要執行右側的 one < three 啦。
同理,在( one > two ) || ( one < three ) 中,若是能肯定左邊表達式的運行結果爲 true , 則系統也一樣會認爲已經沒有必要再進行右側的 one < three 的執行啦!
條件運算符( ? : )也稱爲 「三元運算符」。
語法形式:布爾表達式 ? 表達式1 :表達式2
運算過程:若是布爾表達式的值爲 true ,則返回 表達式1 的值,不然返回 表達式2 的值
例如:
由於,表達式 8>5 的值爲 true ,因此,返回: 8大於5
所謂優先級,就是在表達式中的運算順序。Java 中經常使用的運算符的優先級以下表所示:
級別爲 1 的優先級最高,級別 11 的優先級最低。譬如,x = 7 + 3 * 2 獲得的結果是 13 「先乘後加」嘛!
PS:你們不必去死記運算符的優先級順序,實際開發中,通常會使用小括號輔助進行優先級管理。例如:
分析:小括號優先級最高,所以
一、 執行 a + 18 ,結果爲 30
二、 執行( a + 18 ) % 4 取模,結果爲 2
三、 執行 a * ( ( a + 18 ) % 4 ),結果爲 24
語法:
執行過程:
如:
注意哦:若是 if 條件成立時的執行語句只有一條,是能夠省略大括號滴!但若是執行語句有多條,那麼大括號就是不可或缺的嘍~~
語法:
執行過程:
如:
語法:
執行過程:
如:
語法:
執行過程:
例如:
運行結果爲: 去室外遊樂場遊玩
語法:
執行過程:當 switch 後表達式的值和 case 語句後的值相同時,從該位置開始向下執行,直到遇到 break 語句或者 switch 語句塊結束;若是沒有匹配的 case 語句則執行 default 塊的代碼。
如:
不得不說的幾點小祕密:
一、 switch 後面小括號中表達式的值必須是整型或字符型
二、 case 後面的值能夠是常量數值,如 一、2;也能夠是一個常量表達式,如 2+2 ;但不能是變量或帶有變量的表達式,如 a * 2
三、 case 匹配後,執行匹配塊裏的程序代碼,若是沒有碰見 break 會繼續執行下一個的 case 塊的內容,直到遇到 break 語句或者 switch 語句塊結束 如
運行結果:
四、 能夠把功能相同的 case 語句合併起來,如
五、 default 塊能夠出如今任意位置,也能夠省略
語法:
執行過程:
< 1 >、 判斷 while 後面的條件是否成立( true / false )
< 2 >、 當條件成立時,執行循環內的操做代碼 ,而後重複執行< 1 >、< 2 >, 直到循環條件不成立爲止
特色:先判斷,後執行
如:
語法:
執行過程:
<1>、 先執行一遍循環操做,而後判斷循環條件是否成立
<2>、 若是條件成立,繼續執行< 1 > 、< 2 >,直到循環條件不成立爲止
特色: 先執行,後判斷
因而可知,do...while 語句保證循環至少被執行一次!
例如,依然輸出 1000 遍「我愛慕課網」,使用 do...while 的實現代碼爲:
語法:
執行過程:
<1>、 執行循環變量初始化部分,設置循環的初始狀態,此部分在整個循環中只執行一次
<2>、 進行循環條件的判斷,若是條件爲 true ,則執行循環體內代碼;若是爲 false ,則直接退出循環
<3>、 執行循環變量變化部分,改變循環變量的值,以便進行下一次條件判斷
<4>、 依次從新執行< 2 >、< 3 >、< 4 >,直到退出循環
特色:相比 while 和 do...while 語句結構更加簡潔易讀
例如,輸出 1000 遍「我愛慕課網」,使用 for 的實現代碼爲:
須要留心的幾個小細節:
一、 for 關鍵字後面括號中的三個表達式必須用 「;」 隔開,三個表達式均可以省略,但 「;」 不能省略。
a. 省略「循環變量初始化」,能夠在 for 語句以前由賦值語句進行變量初始化操做,如:
b. 省略「循環條件」,可能會形成循環將一直執行下去,也就是咱們常說的「死循環」現象,如:
在編程過程當中要避免「死循環」的出現,所以,對於上面的代碼能夠在循環體中使用 break 強制跳出循環(關於 break 的用法會在後面介紹)。
c. 省略「循環變量變化」,能夠在循環體中進行循環變量的變化,如:
二、 for 循環變量初始化和循環變量變化部分,能夠是使用 「,」 同時初始化或改變多個循環變量的值,如:
代碼中,初始化變量部分同時對兩個變量 i 和 j 賦初值,循環變量變化部分也同時對兩個變量進行變化,運行結果:
三、 循環條件部分可使用邏輯運算符組合的表達式,表示複雜判斷條件,但必定注意運算的優先級,如:
代碼中,必須同時知足變量 i 小於 10 ,而且 i 不等於 5 時纔會進行循環,輸出變量 i 的值。
例如,使用循環輸出 1--10的數值,其中,若是數值大於 2 ,而且爲 3 的倍數則中止輸出。
實現代碼:
運行結果:
continue 的做用是跳過循環體中剩餘的語句執行下一次循環。
例如,打印 1--10 之間全部的偶數,使用 continue 語句實現代碼爲:
運行結果:
以下所示:
例如:使用 * 打印長方形:
實現代碼爲:
執行流程:當 i = 1 時,外層循環條件成立,進入內層循環,開始打印第一行內容。此時, j 從 1 開始,循環 8 次,內層循環結束後換行,實現第一行 8 個 * 的輸出。接下來返回外層循環 i 變爲 2 ,準備打印下一行,依此類推,直到完成長方形的打印。
數組能夠理解爲是一個巨大的「盒子」,裏面能夠按順序存放多個類型相同的數據,好比能夠定義 int 型的數組 scores 存儲 4 名學生的成績
數組中的元素均可以經過下標來訪問,下標從 0 開始。例如,能夠經過 scores[0] 獲取數組中的第一個元素 76 ,scores[2] 就能夠取到第三個元素 92 啦!
public class HelloWorld { public static void main(String[] args) { // 定義一個數組,保存五名學生的成績 int[] scores = { 78, 93, 97, 84, 63 }; // 輸出數組中的第二個成績 System.out.println("數組中的第2個成績爲:" + scores[1] ); } }
四個步驟:
一、 聲明數組
語法: 數據類型[ ] 數組名;
或者 數據類型 數組名[ ];
其中,數組名能夠是任意合法的變量名,如:
二、 分配空間
簡單地說,就是指定數組中最多可存儲多少個元素
語法: 數組名 = new 數據類型 [ 數組長度 ];
其中,數組長度就是數組中能存放元素的個數,如:
話說,咱們也能夠將上面的兩個步驟合併,在聲明數組的同時爲它分配空間,如:
三、 賦值
分配空間後就能夠向數組中放數據了,數組中元素都是經過下標來訪問的,例如向 scores 數組中存放學生成績
四、 處理數組中數據
咱們能夠對賦值後的數組進行操做和處理,如獲取並輸出數組中元素的值
在 Java 中還提供了另一種直接建立數組的方式,它將聲明數組、分配空間和賦值合併完成,如
它等價於:
答案:B
實際開發中咱們常用循環控制數組成員的操做。如:
運行結果:
其中, 數組名.length 用於獲取數組的長度
須要注意的「小毛病」:
一、 數組下標從 0 開始。所以 scores[3] ,表示數組中的第 4 個元素,而並不是第 3 個元素
二、 數組下標的範圍是 0 至 數組長度-1 ,若是越界訪問,就會報錯。如:
運行時會報以下錯誤:
上面錯誤信息的意思是數組下標超過範圍,即數組訪問越界。在上面的代碼中建立一個長度爲 2 的數組,所以數組下標範圍是 0 到 1 ,而程序中下標出現了 2 ,即 scores[2] ,超過了範圍,形成數組訪問越界。
Arrays 類是 Java 中提供的一個工具類,在 java.util 包中。該類中包含了一些方法用來直接操做數組,好比可直接實現數組的排序、搜索等(關於類和方法的相關內容在後面的章節中會詳細講解滴~~)。
Arrays 中經常使用的方法:
一、 排序
語法: Arrays.sort(數組名);
可使用 sort( ) 方法實現對數組的排序,只要將數組名放在 sort( ) 方法的括號中,就能夠完成對該數組的排序(按升序排列),如:
運行結果:
二、 將數組轉換爲字符串
語法: Arrays.toString(數組名);
可使用 toString( ) 方法將一個數組轉換成字符串,該方法按順序把多個數組元素鏈接在一塊兒,多個元素之間使用逗號和空格隔開,如:
運行結果爲:
輸出數組nums中的元素:[25,7,126,53,14,86]
foreach 並非 Java 中的關鍵字,是 for 語句的特殊簡化版本,在遍歷數組、集合時, foreach 更簡單便捷。從英文字面意思理解 foreach 也就是「 for 每個」的意思,那麼到底怎麼使用 foreach 語句呢?
語法:
咱們分別使用 for 和 foreach 語句來遍歷數組
運行結果:
看到 foreach 的方便了吧!!
留個思考問題給你們:若是想在 foreach 語句中獲取數組元素的下標,該如何作呢??
所謂二維數組,能夠簡單的理解爲是一種「特殊」的一維數組,它的每一個數組空間中保存的是一個一維數組。
那麼如何使用二維數組呢,步驟以下:
一、 聲明數組並分配空間
或者
如:
二、 賦值
二維數組的賦值,和一維數組相似,能夠經過下標來逐個賦值,注意索引從 0 開始
也能夠在聲明數組的同時爲其賦值
如:
三、 處理數組
二維數組的訪問和輸出同一維數組同樣,只是多了一個下標而已。在循環輸出時,須要裏面再內嵌一個循環,即便用二重循環來輸出二維數組中的每個元素。如:
運行結果:
須要瞭解的:在定義二維數組時也能夠只指定行的個數,而後再爲每一行分別指定列的個數。若是每行的列數不一樣,則建立的是不規則的二維數組,以下所示:
運行結果爲:
所謂方法,就是用來解決一類問題的代碼的有序組合,是一個功能模塊。
通常狀況下,定義一個方法的語法是:
其中:
一、 訪問修飾符:方法容許被訪問的權限範圍, 能夠是 public、protected、private 甚至能夠省略 ,其中 public 表示該方法能夠被其餘任何代碼調用,其餘幾種修飾符的使用在後面章節中會詳細講解滴
二、 返回值類型:方法返回值的類型,若是方法不返回任何值,則返回值類型指定爲 void ;若是方法具備返回值,則須要指定返回值的類型,而且在方法體中使用 return 語句返回值
三、 方法名:定義的方法的名字,必須使用合法的標識符
四、 參數列表:傳遞給方法的參數列表,參數能夠有多個,多個參數間以逗號隔開,每一個參數由參數類型和參數名組成,以空格隔開
根據方法是否帶參、是否帶返回值,可將方法分爲四類:
Ø 無參無返回值方法
Ø 無參帶返回值方法
Ø 帶參無返回值方法
Ø 帶參帶返回值方法
若是方法不包含參數,且沒有返回值,咱們稱爲無參無返回值的方法。
方法的使用分兩步:
第一步,定義方法
例如:下面代碼定義了一個方法名爲 show ,沒有參數,且沒有返回值的方法,執行的操做爲輸出 「 welcome to imooc. 」
注意哦:
一、 方法體放在一對大括號中,實現特定的操做
二、 方法名主要在調用這個方法時使用,須要注意命名的規範,通常採用第一個單詞首字母小寫,其它單詞首字母大寫的形式
第二步,調用方法
當須要調用方法執行某個操做時,能夠先建立類的對象,而後經過 對象名.方法名(); 來實現(關於類和對象的概念在後面章節中會詳細講解滴,先熟悉語法,表着急哦~~)
例如:在下面的代碼中,咱們建立了一個名爲 hello 的對象,而後經過調用該對象的 show( ) 方法輸出信息
運行結果爲: welcome to imooc.
public class HelloWorld { public static void main(String[] args) { // 建立對象,對象名爲hello HelloWorld hello = new HelloWorld(); // 調用方法 hello.showMyLove(); } /* * 定義無參無返回值的方法 */ public void showMyLove() { System.out.println("我愛慕課網!"); } }
若是方法不包含參數,但有返回值,咱們稱爲無參帶返回值的方法。
例如:下面的代碼,定義了一個方法名爲 calSum ,無參數,但返回值爲 int 類型的方法,執行的操做爲計算兩數之和,並返回結果
在 calSum( ) 方法中,返回值類型爲 int 類型,所以在方法體中必須使用 return 返回一個整數值。
調用帶返回值的方法時須要注意,因爲方法執行後會返回一個結果,所以在調用帶返回值方法時通常都會接收其返回值並進行處理。如:
運行結果爲: 兩數之和爲:17
不容忽視的「小陷阱」:
一、 若是方法的返回類型爲 void ,則方法中不能使用 return 返回值!
二、 方法的返回值最多隻能有一個,不能返回多個值
三、 方法返回值的類型必須兼容,例如,若是返回值類型爲 int ,則不能返回 String 型值
有時方法的執行須要依賴於某些條件,換句話說,要想經過方法完成特定的功能,須要爲其提供額外的信息才行。例如,現實生活中電飯鍋能夠實現「煮飯」的功能,但前提是咱們必須提供食材,若是咱們什麼都不提供,那就真是的「巧婦難爲無米之炊」了。咱們能夠經過在方法中加入參數列表接收外部傳入的數據信息,參數能夠是任意的基本類型數據或引用類型數據。
咱們先來看一個帶參數,但沒有返回值的方法:
上面的代碼定義了一個 show 方法,帶有一個參數 name ,實現輸出歡迎消息。
調用帶參方法與調用無參方法的語法相似,但在調用時必須傳入實際的參數值
例如:
運行結果爲: 歡迎您,愛慕課!
不少時候,咱們把定義方法時的參數稱爲形參,目的是用來定義方法須要傳入的參數的個數和類型;把調用方法時的參數稱爲實參,是傳遞給方法真正被處理的值。
必定不可忽視的問題:
一、 調用帶參方法時,必須保證明參的數量、類型、順序與形參一一對應
三、 方法的參數能夠是基本數據類型,如 int、double 等,也能夠是引用數據類型,如 String、數組等
四、 當方法參數有多個時,多個參數間以逗號分隔
若是方法既包含參數,又帶有返回值,咱們稱爲帶參帶返回值的方法。
例如:下面的代碼,定義了一個 show 方法,帶有一個參數 name ,方法執行後返回一個 String 類型的結果
調用帶參帶返回值的方法:
運行結果爲: 歡迎您,愛慕課!
問: 什麼是方法的重載呢?
答: 若是同一個類中包含了兩個或兩個以上方法名相同、方法參數的個數、順序或類型不一樣的方法,則稱爲方法的重載,也可稱該方法被重載了。以下所示 4 個方法名稱都爲 show ,但方法的參數有所不一樣,所以都屬於方法的重載:
問: 如何區分調用的是哪一個重載方法呢?
答: 當調用被重載的方法時, Java 會根據參數的個數和類型來判斷應該調用哪一個重載方法,參數徹底匹配的方法將被執行。如:
運行結果:
判斷方法重載的依據:
一、 必須是在同一個類中
二、 方法名相同
三、 方法參數的個數、順序或類型不一樣
四、 與方法的修飾符或返回值沒有關係
public class HelloWorld { public static void main(String[] args) { // 建立對象 HelloWorld hello = new HelloWorld(); // 調用無參的方法 hello.print(); // 調用帶有一個字符串參數的方法 hello.print("imooc"); // 調用帶有一個整型參數的方法 hello.print(18); } public void print() { System.out.println("無參的print方法"); } public void print(String name) { System.out.println("帶有一個字符串參數的print方法,參數值爲:" + name); } public void print(int age) { System.out.println("帶有一個整型參數的print方法,參數值爲:" + age); } }
編寫一個JAVA程序,建立指定長度的 int 型數組,並生成 100 之內隨機數爲數組中的每一個元素賦值,而後輸出數組
要求:
一、 要求經過定義帶參帶返回值的方法來實現
二、 經過參數傳入數組的長度(例如長度爲 8),方法執行後返回賦值後的數組
三、 經過 (int)(Math.random() * 100) 生成 100 之內的隨機數
注:Math 類是用於進行算術操做的類,Math.random() 生成 0--1 的浮點數。 關於該類的其餘應用在後面章節會有詳細介紹,先熟悉隨機數方法的使用~~
//導入java.util.Arrays; import java.util.Arrays; public class HelloWorld { public static void main(String[] args) { // 建立對象,對象名爲hello HelloWorld hello = new HelloWorld(); // 調用方法並將返回值保存在變量中 int[] nums = hello.getArray(8); // 將數組轉換爲字符串並輸出 System.out.println(Arrays.toString(nums)); } /* * 功能:建立指定長度的int型數組,並生成100之內隨機數爲數組中的每一個元素賦值 * 定義一個帶參帶返回值的方法,經過參數傳入數組的長度,返回賦值後的數組 */ public int[] getArray(int length) { // 定義指定長度的整型數組 int[] nums = new int[length]; // 循環遍歷數組賦值 for (int i=0;i<nums.length;i++ ) { // 產生一個100之內的隨機數,並賦值給數組的每一個成員 nums[i]=(int) (Math.random()*100); } return nums; // 返回賦值後的數組 } }
<=
雙擊
debug
調試視圖