Java 從入門到進階之路(二)
阿新 • • 發佈:2019-08-23
之前的文章我們介紹了一下用 IDEA 編輯器建立一個 Java 專案並輸出 HelloWorld,本章我們來看一下 Java 中的變數和基本資料型別。
在這之前我們先來看一下 Java 中的關鍵字,這些關鍵字不能被用作變數名稱。
類別 | 關鍵字 | 說明 |
---|---|---|
訪問控制 | private | 私有的 |
protected | 受保護的 | |
public | 公共的 | |
類、方法和變數修飾符 | abstract | 宣告抽象 |
class | 類 | |
extends | 擴充,繼承 | |
final | 最終值,不可改變的 | |
implements | 實現(介面) | |
interface | 介面 | |
native | 本地,原生方法(非 Java 實現) | |
new | 新,建立 | |
static | 靜態 | |
strictfp | 嚴格,精準 | |
synchronized | 執行緒,同步 | |
transient | 短暫 | |
volatile | 易失 | |
程式控制語句 | break | 跳出迴圈 |
case | 定義一個值以供 switch 選擇 | |
continue | 繼續 | |
default | 預設 | |
do | 執行 | |
else | 否則 | |
for | 迴圈 | |
if | 如果 | |
instanceof | 例項 | |
return | 返回 | |
switch | 根據值選擇執行 | |
while | 迴圈 | |
錯誤處理 | assert | 斷言表示式是否為真 |
catch | 捕捉異常 | |
finally | 有沒有異常都執行 | |
throw | 丟擲一個異常物件 | |
throws | 宣告一個異常可能被丟擲 | |
try | 捕獲異常 | |
包相關 | import | 引入 |
package | 包 | |
基本型別 | boolean | 布林型 |
byte | 位元組型 | |
char | 字元型 | |
double | 雙精度浮點 | |
float | 單精度浮點 | |
int | 整型 | |
long | 長整型 | |
short | 短整型 | |
變數引用 | super | 父類,超類 |
this | 本類 | |
void | 無返回值 | |
保留關鍵字 | goto | 是關鍵字,但不能使用 |
const | 是關鍵字,但不能使用 | |
null | 空 |
Java註釋
類似於 C/C++、Java 也支援單行以及多行註釋。註釋中的字元將被 Java 編譯器忽略。
1 package com.demo; 2 /** 這是第一個Java程式 3 * 這是一個多行註釋的示例 4 */ 5 public class HelloWorld { 6 public static void main(String[] args) { 7 // 這是單行註釋的示例 8 /* 這個也是單行註釋的示例 */ 9 System.out.println("Hello World"); 10 } 11 }
Java 基本資料型別
Java語言提供了八種基本型別。六種數字型別(四個整數型,兩個浮點型),一種字元型別,還有一種布林型。
int
int 資料型別是32位、有符號的以二進位制補碼錶示的整數,佔4個位元組;
- 最小值 -2,147,483,648(-2^31),
- 最大值 2,147,483,647(2^31 - 1),
- 整數直接量預設為 int 型,不能超範圍,否則會編譯錯誤,
- 兩個整數相除,結果還是整數,小數位無條件捨棄,
- 運算時超出範圍會發生溢位
1 package com.demo; 2 3 public class HelloWorld { 4 public static void main(String[] args) { 5 // int a = "123"; 編譯錯誤 6 // int a = 123.123; 編譯錯誤 7 // int a = 2147483648; 編譯錯誤,超出最大值 2147483647 8 // int a = -2147483649; //編譯錯誤,超出最大值 -2147483648 9 int a = 1; // 宣告變數 a 為整數 1 10 int b = 2147483647; 11 int c; 12 c = 1 + b; 13 System.out.println(c); // -2147483648,運算超出範圍發生溢位 14 c = 2 + b; 15 System.out.println(c); // -2147483647,運算超出範圍發生溢位 16 } 17 }
long
long 資料型別是 64 位、有符號的以二進位制補碼錶示的整數,8個位元組;
- 最小值是 -9,223,372,036,854,775,808(-2^63)
- 最大值是 9,223,372,036,854,775,807(2^63 -1)
- 長整型直接biang為在數字後面加 l 或 L
- 算數運算時有可能超範圍,建議在第一個數字後加 l 或 L
- System.currentTimeMillis( ) 用於獲取自 1970.1.1 零時至此時此刻所經歷的毫秒數,用 long 儲存。
1 public class HelloWorld { 2 public static void main(String[] args) { 3 // long a = "123"; 編譯錯誤 4 // long a = 123.123; 編譯錯誤 5 // long a = 9223372036854775808L; //編譯錯誤,超出最大值 9223372036854775807 6 // long a = -9223372036854775809L; //編譯錯誤,超出最大值 -9223372036854775808 7 long a = 100L; // 宣告變數 a 為長整數 100 8 long b = 9223372036854775807L; 9 long c; 10 c = 1 + b; 11 System.out.println(c); // -9223372036854775808,運算超出範圍發生溢位 12 c = 2 + b; 13 System.out.println(c); // -9223372036854775807,運算超出範圍發生溢位 14 long d = System.currentTimeMillis(); 15 System.out.println(d); // 當前時間毫秒數 1558516383355 16 } 17 }
byte
byte 資料型別是8位、有符號的,以二進位制補碼錶示的整數;佔1個位元組
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1);
- 預設值是 0;
- byte 型別用在大型陣列中節約空間,主要代替整數,因為 byte 變數佔用的空間只有 int 型別的四分之一;
- byte型別運算的時候自動轉換為int型別
1 public class HelloWorld { 2 public static void main(String[] args) { 3 // byte a = "123"; 編譯錯誤 4 // byte a = 123.123; 編譯錯誤 5 // byte a = 128; 編譯錯誤,超出最大值 127 6 // byte a = -129; //編譯錯誤,超出最大值 -128 7 byte a = 1; // 宣告變數 a 為byte 1 8 byte b = 127; 9 // b = 1 + b; 10 // System.out.println(b); // 編譯錯誤,byte 參與運算自動轉為 int 11 12 // 可以轉換為 byte 型資料 13 b = (byte) (1 + b); 14 System.out.println(b); // -128,超出運算範圍發生溢位 15 } 16 }
short
short 資料型別是 16 位、有符號的以二進位制補碼錶示的整數,佔2個位元組
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- 預設值是 0
- short 資料型別也可以像 byte 那樣節省空間。一個 short 變數是int型變數所佔空間的二分之一;
- short 型別運算的時候自動轉換為int型別
1 public class HelloWorld { 2 public static void main(String[] args) { 3 // short a = "123"; 編譯錯誤 4 // short a = 123.123; 編譯錯誤 5 // short a = 32768; 編譯錯誤,超出最大值 32767 6 // short a = -32769; //編譯錯誤,超出最大值 -32768 7 short a = 1; // 宣告變數 a 為short 1 8 short b = 32767; 9 // b = 1 + b; 10 // System.out.println(b); // 編譯錯誤,short 參與運算自動轉為 int 11 12 // 可以轉換為 short 型資料 13 b = (short) (1 + b); 14 System.out.println(b); // -32768,超出運算範圍發生溢位 15 } 16 }
double,float
double 浮點型資料,資料型別是雙精度、64 位
float 浮點型資料,資料型別是單精度、32位
- 浮點數的預設型別為 double 型別;
- 表示 float 型資料的直接量需要加 f 或 F 字尾。
- double 型別的精度值是 float 型別的兩倍
- 大多數場合使用 double 表示浮點型
- float 在儲存大型浮點陣列的時候可節省記憶體空間
- 浮點數運算時,可能會發生攝入誤差
- 浮點數不能用來表示精確的值,如貨幣
1 public class HelloWorld { 2 public static void main(String[] args) { 3 // float a = "123"; 編譯錯誤 4 // double a = "123"; 編譯錯誤 5 float a = 5.0F; 6 a = a - 4.3F; 7 System.out.println(a); // 0.6999998 8 9 double b = 5.0; 10 b = b - 4.3; 11 System.out.println(b); // 0.7000000000000002 12 }
boolean
布林型,只能取值為 true 或 false,佔一個位元組,預設為 false
1 public class HelloWorld { 2 public static void main(String[] args) { 3 // boolean a = "111"; // 編譯錯誤 4 boolean a = true; 5 System.out.println(a); // true 6 boolean b = false; 7 System.out.println(b); // false 8 } 9 }
char
char型別是一個單一的 16 位 Unicode 字元;
- 最小值是 \u0000(即為0);
- 最大值是 \uffff(即為65,535);
- char 資料型別可以儲存任何字元;
- 任意單字元需加單引號 ' '
1 public class HelloWorld { 2 public static void main(String[] args) { 3 // char a = "123"; 編譯錯誤 4 // char a = 123.123; 編譯錯誤 5 // char a = 65536; 編譯錯誤,超出最大值 65535 6 // char a = -1; //編譯錯誤,超出最小值 0 7 // char a = '197'; //編譯錯誤 因為有單引號,表示是字元,只允許放單個字元。 8 // char a = 'a' + b; //編譯錯誤 因為b是一個賦值的變數。 9 // char a = '中' + '國' + '國' + '國'; //報錯 int轉char有損失。因為結果已經超出char型別的範圍。 10 // char a = '中' + "國"; //報編譯錯誤 String無法轉換為char。 11 char a='1'; //任意單個字元,加單引號。 12 char a='中'; //任意單箇中文字,加單引號。 13 char a = 'a' + 'b'; //Ã char型別相加,提升為int型別,輸出對應的字元。 14 int a = 'a' + 'b'; //195 195沒有超出int範圍,直接輸出195。 15 char a = 197; //Ã 輸出字元編碼表中對應的字元。 16 char a = 'a' + 1; //b 提升為int,計算結果98對應的字元是b。 17 char a = '中' + '國';//42282。 18 int a = '中' + '國' + '國' + '國'; //86820 19 char a = '中' + 1; //丮 //1是int,結果提升為int,輸出對應的字元。 20 21 System.out.println('中' + "國"); //中國 沒有變數附值的過程。String與任何字元用“+”相連,轉換為String。 22 } 23 }
不同的基本型別可以直接相互轉換
- 自動轉換(隱式轉換):從小型別到到型別可以自動完成,型別的大小關係:byte -> short -> int -> long -> float -> double,其中 char -> int 單獨。
- 強行轉換:從大型別到小型別需要強制轉換符:(需要轉換的型別)變數。但這樣轉換可能會造成精度損失或者溢位。
在上面的示例程式碼中已經演示過強轉了,這裡就不在舉例了。
隱含強制型別轉換
-
1. 整數的預設型別是 int。
-
2. 浮點型不存在這種情況,因為在定義 float 型別時必須在數字後面跟上 F 或者 f。
&n