#
編程語言的基本要素
## 標識符和關鍵字
在編程過程中出現的單詞統稱為標識符。
標識符出現的位置包括:包的命名、類文件的命名、變量的命名、方法的命名......
關鍵字:Java 保留的一些單詞。
標識符的命名規范:
* 只能出現Unicode字符(建議用英文的大小寫字母)、下劃線\_、美元符$、數字
* 數字不能作為開頭字符
* 自定義的標識符不能出現關鍵字
demo1、demo\_1、~~demo-1~~、~~1demo~~、$1demo、~~class~~
**分隔符**
* 花括號 {}:定義代碼塊,邏輯上是一個整體,包含有類的主體、方法主體、靜態代碼塊的主體、條件/循環結構的執行體。
* 分號 ;:語句的結束,在 Java 中必須要用 ; 號表示語句的結束。可以出現在一行或者多行。
* 方括號 \[\] :用于數組中。
* 圓括號 \(\) :在方法中聲明形式參數,在調用方法時傳入實際的參數,用于在表達式運算時的優先級。
* 空格:在編寫 Java 代碼的過程中,一般只會出現3類空格的情況:單個空格、Tab制表位、回車換行。
* 圓點:用于對象或者類與其成員之間的分隔,表示調用類/對象的屬性或者方法。
> 在 Java 中,只要看到首字母大寫的單詞,這個單詞所表現的就是 類,在變量或者方法的命名中,一般采用駝峰命名法則,Java 大小寫敏感。
## 注釋
注釋是編寫代碼非常非常重要的環境,一般好的程序,注釋寫的代碼量都會比程序多。
> 注釋是不會被程序執行的語句。
注釋可能出現的位置:
* 類、方法、屬性的上部分(一般采用文檔注釋)
* 方法體內的業務邏輯操作(一般性注釋)
單行注釋、多行注釋、文檔注釋
```java
/**
* 這是一個定義圓的類
* 此處是文檔注釋
**/
public class Circle {
/**
* 定義圓的半徑
*/
double r;
/**
* 定義圓的周長
*/
void zc(int k) {
// 從控制臺打印輸出圓的周長值,此處是單行注釋
System.out.println("該圓的周長是:" + (2 * 3.14 * r));
}
void mj() {
/*
從控制臺打印輸出圓的面積
作者:xxx
此處是多行注釋
*/
System.out.println("該圓的面積是:" + (3.14 * r * r));
}
public static void main(String[] args) {
Circle c1 = new Circle();
c1.r = 2.0;
c1.zc();
c1.mj();
}
}
```
> 查看 [JDK 幫助文檔](http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4),借助 JDK 中 src.zip 中的 Java 源碼學習。
## 變量
向內存中寫入數據,在內存中標注其存儲的位置。
**定義變量的語法:**
```
[修飾符] 數據類型 變量名;
```
**變量賦值:**
```
變量名 = 值;
```
**合并在一起:**
```
數據類型 變量名 = 值;
```
> 在一個 Java 文件中,能定義多個類,但是只能一定一個 public 修飾的類。
```java
public class Demo1 {
public static void main(String[] args) {
// 定義變量
int x;
x = 10;
double y = 3.14;
// int x = 10;
System.out.println(x);
System.out.println(y);
String s1 = "Tom";
String s2 = "Helen";
String s3 = "Tom";
String s4 = "Hello World";
String s5 = "Hello ";
String s6 = "World";
String s7 = "Hello " + "World";
Student tom = new Student();
tom.name = "tom";
tom.age = 20;
tom.sex = true;
tom.school = "南通大學";
tom.listen();
}
}
class Student {
String name;
int age;
boolean sex;
String school;
void listen(){
System.out.println(name + "在上課。");
}
}
```
## 數據類型
**在 Java 中一共有 8 種基本數據類型**
數值型
* 整型:byte\(-128-127\)、short\(15次方\)、**int**\(31次方\)、long\(63次方\)
* 浮點型:float\(38次方\)、**double**\(308次方\)
字符類型:表示的單個字符(Unicode編碼字符)
* char,用單引號
* 在字符中,除了單個字母外,還可以使用轉義字符
布爾類型:只有兩個值 真和假 true false
* boolean : true/false
> 在實際的開發過程中,我們使用到的基本數據大部分情況下,整數型使用 int 類型,浮點型使用 double 類型。
**引用數據類型**
類類型和數組,在后續學習面向對象介紹。
## 運算符
### 算術運算符
```
有:+ - * / % ++ --
++:自增
--:自減
```
實例
```java
int i = 10;
int j = 20;
System.out.println(i + j); // 30
System.out.println(i++); // 10
System.out.println(i); // 11
System.out.println(++i); // 12
```
### 賦值運算符
```
有:= += -+ *= /= %=
```
實例
```java
int i = 10;
int j = 20;
i = j + 5; // 25
i += 5; // i = i + 5; 30
System.out.println(i); // 11
```
### 比較運算符
```
有:> < >= <= == !=
```
> 比較運算符連接的表達式返回的結果是:boolean
### 邏輯運算符
```
有:與 && 或 || 非 !
```
與:只要有一個為假,那么整個表達式就是假;
或:只要有一個是真,那么整個表達式就是真;
### 三目運算符
```
expression ? true-值 : false-值
```
實例
```java
int age = 10;
String ageStr = age > 18 ? "成年" : "未成年";
```
### 運算符的優先級

> 如果不了解優先級,可以使用\(\)強制優先級。
>
> 賦值運算符優先級是最低的。
## 流程控制
在 Java 甚至在絕大多數的編程語言中,流程控制語句就以下三類:
* 順序結構
* 分支選擇結構(判斷)
* 循環結構
### 分支選擇結構
**if 結構**
語法:
```
if (logic expression) {
true : statement;
}
```
```java
public static void main(String[] args) {
int age = Integer.valueOf(args[0]);
if (age > 18) {
System.out.println("我已經成年了。");
}
}
```
**if-else 結構**
語法:
```
if (logic expression) {
true : statement;
} else {
false : statement;
}
```
**if-else if 結構**
```java
if (age > 0 && age <= 18) {
System.out.println("我是少年。");
} else if (age <= 30) {
System.out.println("我是青年。");
} else if (age <= 50) {
System.out.println("我是中年。");
} else{
System.out.println("我是老年。");
}
```
**switch 結構**
> 多個離散值的分支選擇結構
```java
public static void main(String[] args) {
int color = Integer.valueOf(args[0]);
switch(color) {
case 1 : {
System.out.println("赤");
break;
}
case 2 : {
System.out.println("橙");
break;
}
case 3 : {
System.out.println("紅");
break;
}
case 4 : {
System.out.println("綠");
break;
}
case 5 : {
System.out.println("青");
break;
}
case 6 : {
System.out.println("藍");
break;
}
case 7 : {
System.out.println("紫");
break;
}
default: {
System.out.println("沒有找到顏色");
break;
}
}
}
```
> 在 JDK1.7 之后,switch后面的分支表達式是可以輸入 字符串 的,之前只支持基本數據類型中的整型和字符型。
>
> **在 case 語句中,最后一句務必寫上 break;**
>
> 在實際開發過程,switch 使用頻率是比較小的,一般都會使用 if-else 結構替代。
### 循環結構
循環結構可以在滿足特定循環條件的情況下,反復的執行某一段代碼。
循環結構中可能包含的內容有:
* 初始化語句(init\_statement) :一條或者多條語句構成,用于做一些循環之前的初始化工作。
* 循環條件(test\_expression):是一個 boolean 類型的表達式,用于控制循環是否可以被執行或者結束。
* 循環體(body\_statement) :如果條件允許,循環體會被反復執行。
* 迭代語句(Iteration\_statement):在一次循環體結束完成之后,對循環條件進行求值,通常用于控制循環條件中的變量,使得循環在合適的時候結束。
**while 結構**
語法:
```
[init_statement];
while (test_expression) {
body_statement;
iteration_statement;
}
```
實例
```java
int i = 1;
int sum = 0;
while (i <= 10) {
sum = sum + i;
i = i + 1;
// sum += i++;
}
System.out.println(sum);
```
**do-while 結構**
```
do {
body_statement;
iteration_statement;
} while (test_xepression)
```
> 在一般的開發過程中,不會使用 do-while 循環的。
**for 結構**
語法
```
for (init_statement; test_exprssion; iterator_statement) {
body_statement;
}
```
實例
```java
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum = sum + i;
}
System.out.println(sum);
```
> for 循環一般用在 迭代次數 是固定的循環中