1. 程式人生 > 其它 >第二章 Java基本語法

第二章 Java基本語法

基本語法

註釋

分類

  1. 單行註釋

    //,單行註釋:不參與編譯; 註釋就是說明性文字, 不參與程式的任何執行, 編譯器javac 在編譯這個原始檔時, 會直接丟棄所有註釋

    如下的main方法是程式入口

    main的格式是固定的

  2. 多行註釋

    /*

    多行註釋有開始, 有結束, 便於找到它的範圍 我也是註釋... 用多註釋可以幫助我們更清晰的閱讀程式 多行註釋不可以巢狀

    */

    3.文件註釋

    /**

     

    */

    單行註釋和多行註釋作用
    1. 對所寫的程式進行進行解釋說明,增強可讀性,方便自己,方便別人

    2. 除錯所寫程式碼

    特點

    單行註釋和多行註釋,註釋了的內容不參與編譯。

    換句話說,編譯以後生成的.class結尾的位元組碼檔案中不包含註釋掉的資訊

    文件註釋

    特點:註釋內容可以被JDK提供的工具 javadoc 所解析,生成一套以網頁檔案形式體現的該程式的的說明文件。

主類、非主類 公共類、非公共類

/*
public : 公共的, 是形容詞, 用於修飾類, 也可以修飾方法或屬性, 稱為修飾符
class : 類的意思, 用於定義一個類
Hello : 是類的名稱, 隨便寫的.
類名後面的一對{} 表示一個範圍, 這是類的定義的實體範圍 稱為類體 (body)
類 = 類頭(類簽名,是類的說明) + 類體(類的主體);
類是java程式的最基本單位. 一個程式至少是需要一個類的.

主類 : 包含了主方法的類.
非主類 : 不包含主方法的類.

公共類 : 有public修飾的類. 公共類的類名必須要和檔名一致, 所以一個原始檔中, 最多隻能有一個公共類.
非公共類 : 沒有public修飾的類. 類名可以隨便
*/
public class Hello {




/*
方法(method) : 是java程式中的一個獨立的功能單位, 可以多次使用.
方法隸屬於類, 決不可以把方法放在類的外面, 方法不可以巢狀方法
public static 是修飾符, 表示這是一個公共的靜態的方法.
引數後面的一對{} 表示的是方法的主體 (方法體 )
方法 = 方法頭(方法簽名, 是方法的說明) + 方法體;
下面的方法稱為主方法, 主方法也稱為入口方法, 主方法寫法固定, 必須 記死
*/
public static void main(String[] args) {
// 語句(statement) : 是java程式的最小執行單位. 真正執行的程式碼, 必須要以;結尾
// 語句會編譯成指令, 由JVM執行的指令.
// 語句必須隸屬於方法, 不可以寫在方法外面.
System.out.println("這是字串, 這裡可以隨便寫, 這是我的第一個java程式, 準備受死吧");
System.out.println("我又是一行2");
System.out.println("我又是一行3");
//System.out.println("我又是一行4");
//System.out.println("我又是一行5");
}

public static void test() {
System.out.println("test()...");
}

/* 一個類中方法不能重複定義.
public static void main(String[] args) {
System.out.println("Hello main2...");
}
*/

}

// 非主類
// 非公共類
class Hello2 {

public static void test2() {
System.out.println("Hello2 test2()...");
}

}

// 主類
// 非公共類
class Hello3 {

public static void main(String[] args) { // 這是可以的, 因為這個主方法隸屬於Hello3
System.out.println("Hello3 main()...");
}
}

class class2 {

}

 

關鍵字:

有特殊用途和含義的單詞

保留字:

目前不是關鍵字, 將來有可能是關鍵字

寫類名, 避免使用以上的.

識別符號:

識別符號:凡是自己可以起名字的地方都叫識別符號 比如:類名、變數名、方法名、介面名、包名...

命名規則:必須遵守

1)組成: 52個字母, 0~9數字字元. _和$(不建議使用), -- 漢字更不建議使用. 比如 : A9, a9

2)數字不可以開頭, 5c 不對

3)大小寫不一樣,長度無限制(65535)

4)不可以直接使用關鍵字和保留 字, 但是可以包含

5)不可以包含空格

命名規範:建議遵守

1)包名:全部小寫;例 : atguigu.javase

2)類名、介面名:首字母大寫,後面的其他單詞首字母大寫;例 MyClassNameSample 駝峰命名法

3)變數名:首字母小寫,後面的其他單詞首字母大寫

4)常量名:全部大寫,單詞間用_隔開;例 : MY_FINAL_VARIABLE

多熟悉名字含義

變數:

記憶體中的一塊被命名的並且要有特定資料型別約束的空間, 裡面可以儲存複合資料型別的一個數據 ,資料也可以隨意在資料型別的範圍內變化

資料型別的作用

決定空間大小

決定空間中能儲存什麼資料

決定空間中的資料可以做什麼

變數使用注意事項

變數的概念:

記憶體中的一個儲存區域

該區域有自己的名稱(變數名)和型別(資料型別)

Java中每個變數必須先宣告,後使用

該區域的資料可以在同一類型範圍內不斷變化

使用變數注意:

變數的作用域:一對{ }之間有效

初始化值:變數必須初始化才能使用

初始化:剛出生時賦的值

普通賦值:初始化後再被賦值

所以,變數最好這樣使用 例:int n5 = 200;

定義變數的格式:

格式:資料型別 變數名;

變數是通過使用變數名來訪問這塊區域的

public class VariableAttention {

public static void main(String[] args) {
// 宣告(declare) : 佔地方, 宣告.

// 1) 必須要有資料型別和變數名;
// n3; 沒有資料型別
// int; 沒有變數名
int n1;
n1 = 200;
//System.out.println(n2);
// 2)n2必須應該先聲明瞭, 再使用. 因為只有聲明瞭變數才有記憶體空間.
int n2;

byte b1;
//b1 = 300; // 3) 空間中儲存的資料只能在資料類型範圍內!!!

// 4) 變數有其作用範圍, 由其宣告語句所隸屬的一對{}決定
{
int a1; // a1只能在19行的{}內有效
a1 = 100;
//short a1;
}
//System.out.println(a1); // 超出了a1的使用範圍
// 5) 同一個範圍內, 變數不能重複宣告
//double n1; // 重婚罪
short a1; // 因為它和麵的a1不在同一個範圍內

int n4;
// 6) 變數必須要初始化才能使用, 初始化 : 剛出生時賦的值
//System.out.println(n4);
n4 = 30; // 初始化 , 變數宣告完後的第一次賦值
System.out.println(n4);
n4 = 40; // 普通賦值

// 變數最好這樣使用
int n5 = 200;

}
}

分類

數值型

整數 :

byte 1位元組 -128~127

short 2位元組 -32768~32767

int 4位元組 -20多億~20多億

long 8位元組 -900多億億~900多億億

浮點型

布林型

字元型

字元型char 是存一個字元變數的型別,字元變數用' '概括表示,中間填入任意一個字元(也叫符號),例如'a' 'b' 'c' 之類。 多個字元可以拼接成一個字串string,例如"hello world"。 以上兩個都是字元,是符號,僅顯示用,不能同數學一樣參與計算,字元可以剪下或者貼上到一個字串中,可以判斷是否一樣的邏輯。

空間有限, 儘量用有限空間做成我們需要的資料

變數的宣告:

格式:資料型別 變數名;

public class VariableTest {

public static void main(String[] args) {
// 變數 : 記憶體中的一塊被命名有資料型別約空間, 可以儲存一個數據, 此空間中的資料也可以變化.
// 變數宣告 : 資料型別 變數名;
int n1; // 在記憶體中開闢4位元組的空間, 並用n1符號 和這個空間 對映起來.
n1 = 20; // 把右面的20這個即時資料直接寫入 n1符號 對映的記憶體空間中. 這個空間中就一直儲存這個資料, 直到改變為止.
System.out.println(n1); // 列印n1符號對映的空間中的資料值. 是一個讀資料 操作

int n2 = n1; // 暗含操作 : 1) 宣告變數,在記憶體中開闢空間, 用n2符號對映此空間, 2) 根據右面n1符號 複製記憶體中的值20,
// 3)把這個20資料再寫入n2符號對映的記憶體空間中.
//System.out.println(n2); // 20

// 賦值操作 : 把右面的值寫入左面的變數符號 代表 的記憶體空間中.
// 賦值操作的最大特點 是反人類, 從右向左. 如果右面的值不確定, 絕對不可以向左走. 只有把右面全搞定 , 才能向左走.
n1 = n1 + n2;
// 先處理右面, 把n1符號引用的記憶體空間中的資料 複製出來 20 , 再把n2符號引用 的對映的空間中的資料 複製出來 20
// 20 + 20 => 40
// 把40這個確定的值真的寫入 左面的n1符號所對映的記憶體空間中, 之前的資料直接被抹殺了.
System.out.println(n1);

System.out.println(n2);

System.out.println(n1);

}
}

n1 = 20 讀法:n1被賦值20


 

變數按資料型別來分:

  1. 基本資料型別(primitive):記憶體空間中儲存的就是資料本身(itself)

型別 分類 型別 佔用儲存空間 資料範圍 位元
數值型 整數 byte 1(byte) -128~127 8bit
    short 2 -32768~32767 16bit
    int 4 -20多億~20多億 32bit
    long 8 -900多億億~900多億億 64bit
  浮點型 float 4 -10的38次方~10的38次方 32bit
    double 8 -10的308次方~10的308次方 64bit
布林型   Boolean 1 true,false 8bit
字元型   char 2 * 16bit

資料型別的選取原則: 不要浪費空間, 不要空間不夠

 

  1. 引用資料型別(reference):記憶體空間中儲存的是別的資料的地址(address)

變數 :

記憶體中的一塊空間, 可以儲存一個數據

變數宣告 :

資料型別 變數名;

變數使用注意事項 :

1) 必須要有資料型別和變數名

 

數值型之間的處理

// 結論 : 如果右面的量值的資料型別的範圍小於或等於左面的變數的資料型別的範圍, 是可以直接完成 // 結論 : 如果右面的量值的資料型別的範圍大於左面的變數的資料型別的範圍, 不可以直接完成, 必須要加上強制型別轉換 // 相容性從小到大 : byte < short < int < long < float < double // 浮點數字面量預設使用的8個位元組double型來儲存 // 整數字面量預設使用4個位元組int型來儲存

class DataTypeTest2 {

// 結論 : 只要是非long整數作運算, 至少要有一個變數參與, 結果一定是int型, 因為底層的指令只有iXXX.
// 如果有多種不同型別的變數的混合運算時, 結果的型別是參與的變數中的範圍最大的那個型別
public static void main(String[] args) {
byte b1 = 10;
short s1 = 20;
//s1 = b1 + s1; // iadd
s1 = (short)(b1 + s1); // iadd

byte b2 = 5 + 8; // 這個雖然有運算, 但是沒有變數參與, 所以可以直接完成
int i1 = 30;

b1 = (byte)(b1 + i1);

long l1 = 40L;
//i1 = l1 + i1;
i1 = (int)(l1 + i1); // long 強轉為 int
i1 = (int)l1 + i1; //

float f1 = 3.2f;
double d1 = 5.7;

//l1 = f1 + l1; 右面的結果是float型
l1 = (long)(f1 + l1);

d1 = d1 + l1; // ?
}
}

public class DataTypeTest {
// 結論 : 如果右面的量值的資料型別的範圍小於或等於左面的變數的資料型別的範圍, 是可以直接完成
// 結論 : 如果右面的量值的資料型別的範圍大於左面的變數的資料型別的範圍, 不可以直接完成, 必須要加上強制型別轉換
// 相容性從小到大 : byte < short < int < long < float < double
// 浮點數字面量預設使用的8個位元組double型來儲存
// 整數字面量預設使用4個位元組int型來儲存
public static void main(String[] args) {
// b1和s1在底層其實就是int型, 如果在程式碼中特別指定了其他型別, 編譯時需要注意一下
byte b1 = 10; // 10是int型, 因為10是常量, 永不改變. 這個值也正好可以被byte相容, 這個操作編譯器認為是可以的.
// 如果這個值不可以被byte相容, 編譯出錯!!
short s1 = 20;
int i1 = 30;
long l1 = 40_0000_0000L; // 40億, 字尾L的作用就是一個提醒, 提醒編譯器這個整數字面量使用8位元組的long型空間來儲存

//b1 = s1; // 這個有錯, 編譯器認為這是變數, 不靠譜, 所以不可以直接賦值

byte b2 = b1;