本篇我們開始進入Java的學習,首先在學習如何編寫Java語言前要先瞭解Java程式的基本結構。 一、Java程式的基本結構 一個Java程式的基本結構大體可以分為包、類、main()主方法、標識符、關鍵字、語句和註釋等,如下: 我們來逐一分析一下每一條語句,過多的概念我就不詳述了,只說最基本的。 ...
本篇我們開始進入Java的學習,首先在學習如何編寫Java語言前要先瞭解Java程式的基本結構。
一、Java程式的基本結構
一個Java程式的基本結構大體可以分為包、類、main()主方法、標識符、關鍵字、語句和註釋等,如下:
1 package hello; // 定義包 2 3 public class Structure { // 創建類 4 5 static int num = 1; // 定義類的成員變數 6 7 public static void main(String[] args) { // 定義主方法 8 9 String str = "http://www.cnblogs.com/adamjwh/"; // 定義局部變數 10 11 System.out.println(num); // 輸出成員變數的值 12 13 System.out.println(str); // 輸出局部變數的值 14 15 } 16 17 }
我們來逐一分析一下每一條語句,過多的概念我就不詳述了,只說最基本的。
第一條語句“package hello;”定義了Java程式中類所在的包是hello,hello是一個標識符,由程式員自己定義,package是關鍵字。註意:標識符和關鍵字區分大小寫。
第二條語句“public class Structure”用於創建一個名為Structure的類,類名由程式員自己定義,其中public及class是關鍵字,關於public和static的用法會在後續篇章中提到。
第三條語句“static int num = 1;”定義了類的成員變數,static和int都是關鍵字,而num是一個標識符,由程式員自己定義。
第四條語句“public static void main(String[] args)”是類的主方法,Java程式從這裡開始執行,除了可以將“String[] args”改為“String args[]”外,不可改變本條語句的任何部分。
第五條語句“String str = "http://www.cnblogs.com/adamjwh”是在主方法中定義了一個局部變數,String是一個類,用於創建字元串對象(說簡單點就是說,如果你想創建一條字元串,就使用String類),str是局部變數的名稱,為程式員自己定義的一個標識符,而後面引號中的網址是局部變數str的值,“=”為賦值運算符。
第六條語句“System.out.println(num);”是輸出語句,這是輸出語句的固定寫法,註意區分大小寫,輸出換行為println,不換行為print。
第七條語句同樣為輸出語句,執行將輸出str的值,即http://www.cnblogs.com/adamjwh。
二、標識符和關鍵字
那麼說了這麼多是不是覺得好複雜啊,標識符、關鍵字都是什麼。其實標識符可以簡單理解為一個名字,用來標識類名、變數名、方法名、數組名、文件名的有效字元序列。
例如,定義一個變數i並賦值為100,那麼我們可以寫出如下代碼: int i = 100;
這就是一個典型的賦值語句,其中int是定義一個整型數,i就是標識符,由程式員自己起名,但有一定的規則,簡單點來說就是由字母、數字、下劃線和美元符號組成,第一個字元不能為數字,並且區分大小寫,不能為關鍵字或保留字。
我們可以舉幾個例子看看,合法標識符如name、user、_u8080、tc_bvt等等,非法標識符如5work、7fix等等。
上面提到的關鍵字和保留字,是Java語言中已經被賦予特定意義的一組單詞,不可作為標識符使用,比如上面代碼中的int就是關鍵字,至於java的關鍵字有哪些我就不過多的描述了,畢竟網上有很多很詳細的介紹,我們還是主要從代碼入手。
三、基本數據類型
瞭解了上面的Java程式的基本結構後是不是對Java有一定的感覺了呢,那麼編寫程式肯定要用到許許多多數據,那Java中的數據又是如何分類及編寫的呢?
在Java中有8種數據類型,其中6種是數值類型,另外兩種分別是字元類型和布爾類型,如下:
1 public class Type { 2 3 /* 整數類型 */ 4 byte myByte = 45; // byte型變數,占一個位元組,取值範圍-128~127 5 short myShort = 100; // short型變數,也即短整型,占兩個位元組,取值範圍-32768~32767 6 int myInt = 450; // int型變數,也即整型,占四個位元組,取值範圍-2147483648~2147483647 7 long myLong = 45261636L; // long型變數,也即長整型,占八個位元組,取值範圍-9223372036854775808~9223372036854775807 8 9 /* 浮點類型 */ 10 float myFloat = 15.621F; // 單精度浮點型,占四個位元組,結尾必須加'F'或'f',如果不加自動定義為double型變數,取值範圍1.4E-45~3.4028235E-38 11 double myDouble = 15.621D; // 雙精度浮點型,占八個位元組,結尾可以加'D'或'd',也可不加,取值範圍4.9E-324~1.7976931348623157E-308 12 13 /* 字元類型 */ 14 char myChar = 'a'; // 字元類型變數,用於存儲單個字元,占兩個位元組,需用單引號括起來 15 16 /* 布爾類型 */ 17 boolean myBoolean = true; // 布爾類型又稱邏輯類型,只有true和false兩個值,分別代表“真”和“假” 18 }
當我們要定義一個變數的時候,先判斷變數的數據類型,再從上方8種類型中選擇合適的類型使用即可,定義方法就如上方代碼,以“[數據類型] [變數名] = [值]”的形式即可,其中變數名需自起名,滿足上面提到的標識符的幾個條件。
在字元類型中還有一種特殊的字元,以反斜線“\”開頭,後跟一個或多個字元,具有特定的含義,叫做轉義字元。
轉義字元 | 含義 |
\ddd | 1~3位八進位數據所表示的字元,如\456 |
\dxxxx | 4位十六進位所表示的字元,如\0051 |
\' | 單引號字元 |
\\ | 反斜杠字元 |
\t | 垂直製表符,將游標移到下一個製表符的位置 |
\r | 回車 |
\n | 換行 |
\b | 退格 |
\f | 換頁 |
轉義字元一般多用於輸出,比如“\n”回車換行,“\t”移到下一製表位,如果想要輸出單引號、雙引號、下劃線等字元時,也需要用轉義字元進行輸出。
四、變數與常量
剛剛我們提到了變數,接下來就說一下什麼是變數和常量。在程式執行過程中,其值不能改變的稱為常量,其值能改變的稱為變數。變數與常量的聲明都必須使用合法的標識符,所有變數與常量只有在聲明之後才能使用。下麵舉一個聲明變數的例子:
int age; // 聲明int型變數 char c = 'J' // 聲明char型變數並賦值
既然叫變數那肯定是能改變的,現在我們對變數進行一下改變試試:
1 public class Variable { 2 3 public static void main(String[] args) { 4 int num = 10; // 定義一個變數num,並賦給初值10 5 System.out.println("num的初值為:"+num); // 輸出當前變數num的值為10 6 7 num = 100; // 將100賦給num 8 System.out.println("num現在的值為:"+num); // 輸出現在變數num的值為100 9 } 10 11 }
上方是一段測試代碼,我們首先定義一個變數,起名為num,然後對它賦一個初值10,再對這個變數賦值為100,看兩次值的變化,運行結果如下所示:
由此可以看出變數是在運行過程中其值可以改變。
而常量在整個程式中只能被賦值一次,需通過final關鍵字進行限定,如 final double PI = 3.1415926; ,為定義一個常量,名為PI(圓周率),我們如果單獨定義一個變數是“double PI = 3.1415926;”,現在定義一個常量就是在double前加一個final關鍵字進行限定即可。
看到這裡,是不是對Java的聲明及定義有一些瞭解了呢?也許在之前大家也都見到了有些變數前有static這個關鍵字,它有什麼用呢?這裡就要說的變數的有效範圍了。
變數的有效範圍是指程式代碼能夠訪問該變數的區域,若超出變數所在區域訪問變數則編譯時會出現錯誤。可分為“成員變數”和“局部變數”。
在類體中定義的變數被稱為成員變數,成員變數在整個類中都有效,分為靜態變數和實例變數兩種。
class var { int x = 45; // 定義實例變數 static int y = 90; // 定義靜態變數
}
其中x是實例變數,y是靜態變數。如果成員變數的類型前面加上static,就被稱為靜態變數,靜態變數的有效範圍可以跨類,甚至可達到整個應用程式之內,也可用“類名.靜態變數”的方式在其它類中使用(具體會在今後的篇幅中出現,想瞭解的可先行查閱資料)。
而在類的方法體中定義的變數(即“{”與“}”之間的聲明變數)稱之為局部變數。只在當前代碼塊中有效,簡單點來說就是只在其所定義的大括弧中有效。下麵舉一個例子:
1 public class Val { 2 3 static int times = 3; // 定義成員變數times 4 public static void main(String[] args) { 5 int times = 4; // 定義局部變數times 6 7 System.out.println("times的值為:" + times); // 將times輸出 8 System.out.println("靜態變數times的值為:" + Val.times); // 輸出靜態變數 9 } 10 11 }
輸出結果為:
從這段代碼可以看出,首先在main方法外定義了一個成員變數times,並且是一個靜態變數,而在main方法內又定義了一個局部變數times。這裡有人就會問了,變數名不是不能相同嗎?註意,這裡第一個times是成員變數,作用範圍是針對於整個類而言,而第二個times是局部變數,只在main方法內有效,所以兩個重名並不衝突。但如果我們直接輸出times,如第一個輸出,輸出結果為4,是局部變數起了作用,因為當局部變數與成員變數名字相同時,此時成員變數將被隱藏,即這個成員變數在此方法中暫時失效。如果我們想調用成員變數,需要使用“類名.靜態變數”調用,如第二個輸出,類名為Val,靜態變數名為times,用“Val.times”即可調用靜態變數的值為3。
五、代碼註釋
註釋可以提高程式的可讀性,註釋包含的文字不會對程式產生任何影響,在Java中,代碼註釋主要有以下幾種:
1. 單行註釋
“//”為單行註釋標記,從“//”開始到換行為止的所有內容均被註釋而被編譯器忽略。
// 這是一條單行註釋
2. 多行註釋
“/* */”為多行註釋標記,符號“/*”與“*/”之間的所有內容均為註釋內容,可以換行。
/* 註釋內容1 註釋內容2 ...... */
在多行註釋中可以嵌套單行註釋,比如下麵的用法是正確的:
/* 名稱:博客園 // 時間:2018-1-20 */
但在多行註釋中不能嵌套多行註釋。
3. 文檔註釋
“/** */”為文檔註釋標記。符號“/**”與“*/”之間的內容均為文檔註釋內容。當文檔註釋出現在任何聲明之前時,會被Javadoc文檔工具讀取作為Javadoc文檔內容。格式與多行註釋相同。
1 /** 2 * name: Hello World 3 * time: 2018-1-20 4 * author: Adam 5 **/
下一篇將繼續介紹Java語言基礎中的運算符及類型轉換。