Java 的基本程序設計結構


從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開發手冊》。

關鍵字與保留字

關鍵字

定義:被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. 單行注釋 :  //   ...
2. 多行注釋 :  /*  ...  */
3. 文檔注釋 :/**  ...   */

(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),大寫的字母A65(二進制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學習


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM