本篇我們開始進入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語言基礎中的運算符及類型轉換。