從Hello Word入手
public class HelloWorld { /* 第一個Java程序 */ public static void main(String[] args) { System.out.println("Hello World"); // 打印 Hello World } }
public class HelloWorld 一個文件中只能有一個 public 修飾類(class)。
public static void main(String[] args) main:程序的入口 String[] args :要傳遞的參數列表。
System.out.println("Hello World"); System.out System類中的 "標准" 輸出流。
注意:類名要與文件名相同。
Java區分大小寫。
知識點:
public:訪問權限修飾符。
class:類修飾符。
HelloWorld:自定義類名。
訪問修飾符:
1. private :(私有的)只能在所修飾的類中訪問。
2.(默認的):能在本包中訪問。
3. protect :(受保護的)本包和外包子類中都可以直接訪問。
4.public :(公共的)項目下所有包都可以訪問。。
標識(zhi)符:
java中所有要求自己命名的都是標識符
規則:
- 由26個英文字母大小寫,0-9 ,_或 $ 組成
- 數字不可以開頭。
- 不可以使用關鍵字和保留字,但能包含關鍵字和保留字。
- Java中嚴格區分大小寫,長度無限制。
- 標識符不能包含空格。
規范:
1.見名知意即可,不要過長;2.駝峰原則
3.包的命名 : 全部小寫 ,多級包用 . 隔開 例如:com.java
4.類 或者 接口 : (大駝峰原則)每個單詞的首字母大寫 例如:MyJava
5.方法 或者 變量 :(小駝峰原則) 首字母小寫,第二個單詞開始,每個單詞首字母大寫 例如:myJava
6.常量 : 全部大寫, 每個單詞之間使用 _ 進行分割 。例如:MY_JAVA
關鍵字與保留字
關鍵字
定義:被Java語言賦予了特殊含義,用做專門用途的字符串(單詞)
特點:關鍵字中所有字母都為小寫
static 關鍵字:
1)表示static修飾的成員,屬於靜態成員,所有對象共享一份,它存放在方法區里;
2)用static聲明的方法是靜態方法,在調用該方法時,不會將對象的引用傳遞給它,所以在static 方法中不可訪問非static的成員;(靜態方法不再是針對於某個對象調用,所以不能訪問非靜態成員)
靜態方法在類加載時就被初始化了;
在沒有任何對象產生下,靜態方法不能調用非靜態成員;
靜態方法可以調用靜態成員;
3)Static修飾的成員,屬於類級別的,可以用類名直接調用;
4)也可以用對象名調用,但建議用類名調用;
5)如果某個對象修改了static靜態變量的值,其他對象共享改變;
6)Static的作用:
1、在堆里,每個對象都會有一個相同的空間,浪費內存;
2、如果修改值,需要每一個對象一個個的改;
this 關鍵字:
1)在普通方法中,this指向調用該方法的對象;
2)在構造方法中,this指向正要初始化的對象;
3)This不能用於static方法中;
4)區別成員變量和局部變量;當在一個方法內時,局部變量與成員變量重名時,為了區分,成員變量要加this ; 如果沒有重名的情況,this可以省略(加上也可以);
5)使用this來調用方法;方法沒有重名時,this可以省略;
6)This可以調用構造方法:(語法要求:必須是第一句, this())
7)This在內存中的表示:
This是一個引用變量,指向的是當前對象自身;
每個對象都有一個this變量,this成員變量;
super關鍵字 :
1)作用:
執行當前對象的父類對象,每一對象都有一個supser屬性,創建對象時分配空間;
2)使用:
1、修飾父類的成員變量:super.屬性名;
2、修飾父類的成員方法:super.方法名;
3、修飾父類的構造方法:super.構造器;<在子類的構造器中,調用父類的構造器,要求:必須是第一句>
3)注意:
This和super不能同時出現在子類的構造器中;
1、this和super都必須是構造方法中的第一條語句,如果存在,誰是第二條語句都是錯誤;
2、繼承條件下,對象的構建順序:子類會調用父類的構造器;
A ) 子類構造方法,默認會調用父類無參構造方法;
B)如果在子類構造方法中,顯示指定了父類的構造方法時,就調用指定的父類構造方法;
3、父類使用private修飾的成員,子類可以繼承,但是無法訪問;如果訪問,在父類中設置set方法,在子類中通過super.set方法來調用;
4)構建子類對象時的內存圖:
Dog dog = new Dog();
創建一個Dog子類對象,會自上而下分別創建Object、Animal、Dog三個對象,每個對象除了具有自身的成員變量外,還分配this和super兩個屬性空間,this指向當前對象自身,super指向當前對象的直接父類對象;
Object、Animal、Dog三個對象是依賴於super關鍵詞聯系起來的,最后,將Dog子類的內存起始位置賦給dog引用變量;
注意:分配內存時,父類對象Animal的color, age屬性並不會在Dog子類中分配空間。
子類對象要比父類對象大,因為子類對象包含了父類對象;
保留字(reserved word)
Java保留字:現有Java版本尚未使用,但以后版本可能會作為關鍵字使用。自己命名標記符時要避免使用這些保留字 byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const;
注釋:
1. 單行注釋 : // ...(java特有)
格式:/**
* @author 指定java程序的作者
*@version 指定源文件的版本
*@param 方法的參數說明信息
*/
1)正確的注釋和注釋風格:
使用文檔注釋來注釋整個類或整個方法。
如果注釋方法中的某一個步驟,使用單行或多行注釋。
正確的縮進和空白
使用一次tab操作,實現縮進
運算符兩邊習慣性各加一個空格。比如:2 + 4 * 5。
變量:
變量的概念:
- 內存中的一個存儲區域;
- 該區域的數據可以在同一類型范圍內不斷變化;
- 該區域有自己的名稱(變量名)和類型(數據類型);
變量的作用:
用於在內存中保存數據;
使用變量注意:
Java中每個變量必須先聲明,后使用
變量的作用域:一對{ }之間有效
初始化值
使用變量名來訪問這塊區域的數據
聲明變量:
語法:<數據類型> <變量名稱>
例如:int var;
變量的賦值:
語法:<變量名稱> = <值>
例如:var = 10;
聲明和賦值變量:
語法: <數據類型> <變量名> = <初始化值>
例如:int var = 10;
常量:
數據類型:

Java各整數類型有固定的表數范圍和字段長度,不受具體OS的影響,以保證java程序的可移植性。
java的整型常量默認為 int 型,聲明long型常量須后加‘l’或‘L’
java程序中變量常聲明為int型,除非不足以表示大數,才使用long
bit: 計算機中的最小存儲單位。byte:計算機中基本存儲單元。
Java 的浮點型常量默認為double型,聲明float型常量,須后加‘f’或‘F’。
char 型數據用來表示通常意義上“字符”(2字節);
注意:為了將字符存儲到計算機中,需要引入一個字符編碼集,將字符先通過字符編碼集解析成對應的二進制,然后進行存儲;
字符型常量的三種表現形式:
1)字符常量是用單引號(‘ ’)括起來的單個字符,涵蓋世界上所有書面語的字符。例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
2)Java中還允許使用轉義字符‘\’來將其后的字符轉變為特殊字符型常量。例如:char c3 = ‘\n’; // '\n'表示換行符;
3)直接使用 Unicode 值來表示字符型常量:‘\uXXXX’。其中,XXXX代表一個十六進制整數。如:\u000a 表示 \n。
char類型是可以進行運算的。因為它都對應有Unicode碼。
布爾類型:boolean:
boolean 類型適於邏輯運算,一般用於程序流程控制:
- if條件控制語句;
- while循環控制語句;
- do-while循環控制語句;
- for循環控制語句;
boolean類型數據只允許取值true和false,無null。
不可以0或非 0 的整數替代false和true,這點和C語言不同。
類型轉換:
1)自動類型轉換:
容量小的類型自動轉換為容量大的數據類型。數據類型按容量大小排序為:
(1)有多種類型的數據混合運算時,系統首先自動將所有數據轉換成容量最大的那種數據類型,然后再進行計算。
(2)byte,short,char之間不會相互轉換,他們三者在計算時首先轉換為int類型。
(3)當把任何基本類型的值和字符串(String)進行連接運算時(+),基本類型的值將自動轉化為字符串類型。
2)強制類型轉換:
自動類型轉換的逆過程,將容量大的數據類型轉換為容量小的數據類型。使用時要加上強制轉換符(()),但可能造成精度降低或溢出,格外要注意。
通常,字符串不能直接轉換為基本類型,但通過基本類型對應的包裝類則可以實現把字符串轉換成基本類型。
如: String a = “43”;
int i = Integer.parseInt(a);
boolean類型不可以轉換為其它的數據類型。
3)隱式類型轉換:
在三元運算符中。
運算符:
運算符是一種特殊的符號,用以表示數據的運算、賦值和比較等。包含有:
1)算術運算符
算術運算符的注意問題:
如果對負數取模,可以把模數負號忽略不記,如:5%-2=1。 但被模數是負數則不可忽略。此外,取模運算的結果不一定總是整數。
對於除號“/”,它的整數除和小數除是有區別的:整數之間做除法時,只保留整數部分而舍棄小數部分。 例如:int x=3510;x=x/1000*1000; x的結果是?
“+”除字符串相加功能外,還能把非字符串轉換成字符串.例如:System.out.println("5+5="+5+5); //打印結果是?
2)賦值運算符
1)符號:=
當“=”兩側數據類型不一致時,可以使用自動類型轉換或使用強制類型轉換原則進行處理。支持連續賦值。
2)擴展賦值運算符(復合運算符): +=, -=, *=, /=, %=
注意:運算的結果不會改變原變量的數據類型(在復合運算符中,隱藏了強制轉換,會自動轉換成前面的操作數的類型);
3)比較運算符(關系運算符)
1)關系運算符用來進行比較運算,操作數與關系運算符組成關系運算表達式;
2)關系運算符的結果時布爾值;
3)> < >= <= :操作數數值類型,包含整型,浮點型,字符型;
4)== != :基本類型和引用類型都可以;
比較運算符的結果都是boolean型,也就是要么是true,要么是false。
比較運算符“==”不能誤寫成“=” 。
4)邏輯運算符
1)邏輯運算符與布爾操作數一起使用,組成邏輯表達式,所以,操作數要求是boolean值,運算結果也是Boolean值;邏輯運算符用於連接布爾型表達式,例:a>90&&b<100&&c>80;
注意:在Java中不可以寫成3<x<6,應該寫成x>3 & x<6 。
& :邏輯與,作為邏輯運算符時,兩個操作數都是真時,為真,任意一個為假,則為假
| :邏輯或,有一個為真,就為真;
^ :邏輯異或,相同為假,不同為真;
! :邏輯反/邏輯非,非真即假;
&& :短路與;
|| :短路或;
2) & | 與 && || 的區別:
(1)運算規則相同;
(2) && || 只判斷第一個操作數;
& 無論任務情況,它的兩邊的表達式都會參與計算;
&& 當它的左邊為false時,則將不會計算其右邊的表達式;即左false則false;
| 與 || 類似;
單&時,左邊無論真假,右邊都進行運算;
雙&時,如果左邊為真,右邊參與運算,如果左邊為假,那么右邊不參與運算。
“|”和“||”的區別同理,||表示:當左邊為真,右邊不參與運算。
異或( ^ )與或( | )的不同之處是:當左右都為true時,結果為false。
理解:異或,追求的是“異”!
邏輯運算符的優先級:! > & > ^ > |
5)位運算符
位運算符先將十進制數轉成對應的二進制的補碼形式進行運算,並且最高位參與運算;
6)三元運算符
1)語法格式:
操作數為3個,語法格式:x ? y : z
2)執行過程:
其中x為boolean類型表達式,先計算x的值,若為true,則整個三目運算的結果為表達式y的值,否則整個運算結果為表達式z的值。
3)作用:經常用來代替簡單的if else判斷:
4)三元運算符與if-else的聯系與區別:
1)三元運算符可簡化if-else語句
2)三元運算符要求必須返回一個結果。
3)if后的代碼塊可有多個語句
運算符的優先級:
小括號>自增、自減>算術運算 > 位運算> 關系運算 > 邏輯運算 > 條件運算 > 賦值運算
運算符有不同的優先級,所謂優先級就是表達式運算中的運算順序。如右表,上一行運算符總優先於下一行。
只有單目運算符、三元運算符、賦值運算符是從右向左運算的。
編碼集介紹:
ASCII 碼:
在計算機內部,所有數據都使用二進制表示。每一個二進制位(bit)有 0 和 1 兩種狀態,因此 8 個二進制位就可以組合出 256 種狀態,這被稱為一個字節(byte)。
ASCII碼:上個世紀60年代,美國制定了一套字符編碼,對英語字符與二進制位之間的關系,做了統一規定。這被稱為ASCII碼。ASCII碼一共規定了128個字符的編碼,比如空格“SPACE”是32(二進制00100000),大寫的字母A是65(二進制01000001)。這128個符號(包括32個不能打印出來的控制符號),只占用了一個字節的后面7位,最前面的1位統一規定為0。
缺點:
不能表示所有字符。
相同的編碼表示的字符不一樣:比如,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母Gimel (ג)
Unicode 編碼:
Unicode碼:可以包含世界上所有的字符,但固定的長度,有些浪費存儲空間,Unicode 編碼表中的字符占兩個字節;
亂碼:世界上存在着多種編碼方式,同一個二進制數字可以被解釋成不同的符號。因此,要想打開一個文本文件,就必須知道它的編碼方式,否則用錯誤的編碼方式解讀,就會出現亂碼。
Unicode:一種編碼,將世界上所有的符號都納入其中。每一個符號都給予一個獨一無二的編碼,使用 Unicode 沒有亂碼的問題。
Unicode 的缺點:Unicode 只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲:無法區別 Unicode 和 ASCII:計算機無法區分三個字節表示一個符號還是分別表示三個符號。另外,我們知道,英文字母只用一個字節表示就夠了,如果unicode統一規定,每個符號用三個或四個字節表示,那么每個英文字母前都必然有二到三個字節是0,這對於存儲空間來說是極大的浪費。
UTF-8:
UTF-8 :對Unicode的優化,可以包含世界上所有字符,字母占1個字節,漢字占3個字節;
UTF-8 是在互聯網上使用最廣的一種 Unicode 的實現方式。
UTF-8 是一種變長的編碼方式。它可以使用 1-6 個字節表示一個符號,根據不同的符號而變化字節長度。
UTF-8的編碼規則:
1)對於單字節的UTF-8編碼,該字節的最高位為0,其余7位用來對字符進行編碼(等同於ASCII碼)。
2)對於多字節的UTF-8編碼,如果編碼包含 n 個字節,那么第一個字節的前 n 位為1,第一個字節的第 n+1 位為0,該字節的剩余各位用來對字符進行編碼。在第一個字節之后的所有的字節,都是最高兩位為"10",其余6位用來對字符進行編碼。
程序流程控制:
順序結構:程序從上到下逐行地執行,中間沒有任何判斷和跳轉。
分支結構:根據條件,選擇性地執行某段代碼。有if…else和switch-case兩種分支語句。
循環結構:根據循環條件,重復性的執行某段代碼。有while、do…while、for三種循環語句。
注:JDK1.5提供了foreach循環,方便的遍歷集合、數組元素。
循環的好處:
1、提高代碼的重用性,代碼更加簡潔
2、提高代碼的維護性,使代碼擴展性更強!
循環語句 : 在某些條件滿足的情況下,反復執行特定代碼的功能;
循環四要素:
1)循環變量初始化(循環變量賦初值);
2)循環條件:滿足該條件,將進入循環體執行操作(循環終止條件);
3)循環操作:反復執行的代碼(循環語句);
4)循環變量更新(讓循環趨向終止的條件,步進、迭代);
循環語句分類:
1)for 循環
2)while 循環
3)do/while 循環
跳轉結構:
break 語句:
在任何循環語句的主體部分,均可用break控制循環的流程,break用於強行退出循環,不執行循環中剩余的語句。(break 只能與switch , 循環中使用,不能單獨使用)
特點:
1)不管是單層還是多層,break是終止本層循環;
2)Break后,不能加執行代碼,因為程序不會往下執行;
continue 語句:
用於在循環語句體中,用於終止某次循環過程,即跳過循環體中尚未執行的語句,接着進行下一次是否執行循環的判定;
特點:
1)不管是單層或多層,continue是終止本次循環;
2)Continue后,不能加執行代碼,因為程序不會往下執行;
return 語句:
return:並非專門用於結束循環的,它的功能是結束一個方法。當一個方法執行到一個return語句時,這個方法將被結束。
與break和continue不同的是,return直接結束整個方法,不管這個return處於多少層循環之內;
Java學習