天天看點

Java 基礎入門(未完成持續更新)Java 基礎入門

Java 基礎入門

1. Java 概述

1.1 Java 語言發展史

語言:人與人交流溝通的表達方式

計算機語言:人與計算機之間進行資訊交流溝通的一種特殊語言

1.1.1 Java 語言

Java 語言是美國Sun公司(Stanford University Network)在1995年推出的計算機語言

Java 之父:詹姆斯·高斯林(James Gosling)

Java 基礎入門(未完成持續更新)Java 基礎入門

1.1.2 Java 語言發展史

Java 基礎入門(未完成持續更新)Java 基礎入門

1.2 Java語言跨平台原理

1.2.1 平台

指的是作業系統

  • Windows
  • Mac
  • Linux

1.2.2 跨平台

Java 程式可以在任意作業系統上運作

1.2.3 跨平台原理

圖例:

Java 基礎入門(未完成持續更新)Java 基礎入門

Java 開發工具想要在不同的平台上運作,需要依賴 JVM 充當翻譯功能,進而達到跨平台的效果

總結:在需要運作 Java 應用程式的作業系統上

安裝一個與作業系統相對應的 Java 虛拟機(JVM Java Virtual Machine)即可

1.3 JRE和JDK

1.3.1 JRE (Java Runtime Environment)

作用:

是 Java 程式運作時的環境,包含 JVM 和運作時所需要的核心類庫

我們想要運作一個已有的 Java 程式,那麼隻需要安裝 JRE 即可

1.3.2 JDK(Java Development Kit)

作用:

是 Java 程式開發工具包,包含 JRE 和開發人員使用的工具

其中的開發工具:

編譯工具(javac.exe)和運作工具(java.exe)

我們想要開發一個全新的 Java 程式,那麼就必須安裝 JDK

1.3.3 JDK , JRE 和 JVM 的關系

圖例:

Java 基礎入門(未完成持續更新)Java 基礎入門

1.4 JDK的下載下傳和安裝

1.4.1 JDK 的下載下傳

通過官方網站擷取 JDK

http://www.oracle.com

注意:針對不同的作業系統,下載下傳對應的 JDK
Java 基礎入門(未完成持續更新)Java 基礎入門

1.4.2 JDK 的安裝目錄

目錄名稱 說明
bin 該路徑下存放了 JDK 的各種工具指令,javac 和 java 就放在這個目錄
conf 該路徑下存放了 JDK 的相關配置檔案
include 該路徑下存放了一些平台特定的頭檔案
jmods 該路徑下存放了 JDK 的各種子產品
legal 該路徑下存放了 JDK 各種子產品的授權文檔
lib 該路徑下存放了 JDK 工具的一些補充 JAR 包
其餘檔案為說明性文檔

2. 常用 DOS 指令

2.1 打開指令提示符視窗

  1. 按下 win + R
    Java 基礎入門(未完成持續更新)Java 基礎入門
  2. 輸入 cmd
  3. 按下Enter鍵(enter)
Java 基礎入門(未完成持續更新)Java 基礎入門

2.2 常用指令

操作 說明
盤符名稱 : 盤符切換,E:回車,表示切換到E盤
dir 檢視目前路徑下的内容
cd 目錄 進入單級目錄,cd itheima
cd … 回退到上一級目錄
cd 目錄1\目錄2\ … 進入多級目錄,cd itheima\JavaSE
cd \ 回退到盤符目錄
cls 清屏
exit 退出指令提示符視窗
  1. 切換盤符
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. dir 檢視目前路徑的檔案
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. cd 目錄 進入下一級檔案夾
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. 回退目錄
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. 想直接進入指定檔案夾 例如直接進入課程工具包
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. 想直接一次性回退到盤符目錄 例如E盤
Java 基礎入門(未完成持續更新)Java 基礎入門

3. Path 環境變量的配置

3.1 為什麼要配置 Path 環境變量

開發 Java 程式,需要使用 JDK 提供的開發工具,而這些工具在 JDK 的安裝目錄的 bin 目錄下

Java 基礎入門(未完成持續更新)Java 基礎入門

直接使用 cmd 指令運作 javac:

Java 基礎入門(未完成持續更新)Java 基礎入門
想使用 cmd指令 直接運作 javac 或者 java 需要加上開發工具的路徑
小技巧:在 cmd 指令視窗使用👆鍵,可以檢視輸入曆史進而減少輸入時間

直接使用 cmd 指令運作 Java:

Java 基礎入門(未完成持續更新)Java 基礎入門
在win10 系統中,Java path 環境變量已經提前設定好了,不需要輸入路徑了

配置 Path 環境變量步驟:

https://www.bilibili.com/video/BV18J411W7cE?p=6&spm_id_from=pageDriver

Java 基礎入門(未完成持續更新)Java 基礎入門
Java 基礎入門(未完成持續更新)Java 基礎入門

4. HelloWorld 案例

4.1 Java 程式開發運作流程

開發 Java 程式,需要三個步驟:編寫程式,編譯程式,運作程式

圖例:

Java 基礎入門(未完成持續更新)Java 基礎入門

4.2 HelloWorld 案例的編寫

  1. 建立文本文檔,修改名稱為 HelloWorld.java
  2. 用記事本打開 HelloWorld.java 檔案,輸入程式内容
Java 基礎入門(未完成持續更新)Java 基礎入門
public class HelloWorld   //定義了一個類名,叫HelloWord
{
    public static void main(String[] args)
    {
        System.out.println("HelloWorld");
    }
}
           

4.3 HelloWorld 案例的編譯和運作

打開指令提示符視窗,進入到HelloWorld.java 所在的目錄,輸入指令編譯和執行

編譯文法:javac 檔案名.java

範例:javac HelloWorld.java

執行文法:java 類名

範例:java HelloWorld

操作步驟:

  1. 進入 HelloWorld.java 檔案所在的目錄
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. 編譯檔案
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. 執行檔案
Java 基礎入門(未完成持續更新)Java 基礎入門

5. HelloWorld 案例常見問題

5.1 BUG

由來:

Bug一詞的原意是臭蟲或蟲子。第一代計算機是由許多龐大的真空管組成,并利用大量的電力來使真空管發光。引得一隻小蟲子Bug鑽進了一支真空管内,導緻整個計算機無法工作。研究人員費了半天時間,總算發現原因所在,把這隻小蟲子從真空管中取出後,計算機又恢複正常。後來,Bug這個名詞就沿用下來。

與Bug相對應,人們将發現Bug并加以糾正的過程叫做“Debug”,意即“捉蟲子”或“殺蟲子”。遺憾的是,在中文裡面,至今仍沒有與“Bug”準确對應的詞彙,于是隻能直接引用“Bug”一詞。雖然也有人使用“臭蟲”一詞替代“Bug”,但容易産生歧義,是以推廣不開。

Java 基礎入門(未完成持續更新)Java 基礎入門

5.2 BUG 的解決

  1. 具備識别 BUG 的能力:多看
  2. 具備分析 BUG 的能力:多思考,多查閱資料
  3. 具備解決 BUG 的能力:多嘗試,多總結

提供以下代碼:

public class HelloWorld
{
    public static void main(Sting[] args)
    {
        system.out.println("HelloWorld");
    }
}
           

運作後出現的結果:

Java 基礎入門(未完成持續更新)Java 基礎入門

解讀:

Java:5 說明錯誤在第5行,先看第二個,需要 ‘ ; ’ 說明是 HelloWorld 後面出問題了,修改後再編譯

Java 基礎入門(未完成持續更新)Java 基礎入門

Java:5 說明錯誤在第5行,system不存在,很可能是我們寫錯了導緻的

6. Notepad 軟體的安裝和使用

6.1 為什麼要安裝 Notepad 軟體

  • 友善對錯誤行進行操作

6.2 Notepad 軟體的配置

Java 基礎入門(未完成持續更新)Java 基礎入門

6.3 Notepad 軟體的使用

使用:通過 Notepad 軟體編寫 HelloWorld 案例

小技巧:在指令提示符視窗下寫 javac HelloWorld.java 時,隻需要寫 javac H 然後按下 Tab 鍵

系統就會自動補齊剩下的所有内容

非常友善的哈!

Java 基礎入門(未完成持續更新)Java 基礎入門

7. 基礎文法

7.1 注釋

概述:

  • 注釋是在程式指定位置添加的說明性資訊
  • 注釋不參與程式運作,僅僅起到說明作用

注釋分類:

  • 單行注釋

格式:

// 注釋資訊

  • 多行注釋

格式:

  • 文檔注釋(目前用不上,暫時不做了解)

格式:

示例:

Java 基礎入門(未完成持續更新)Java 基礎入門
/*
	Java程式中最基本的組成機關是類
	類的定義格式:
		public class 類名{
		
		}
	這是我定義的HelloWorld類
*/
public class HelloWorld{
	/*
		這是main方法
		main方法是程式的入口方法,代碼的執行是從main方法開始的
	*/
	public static void main(String[] args){
		// 這是輸出語句,""裡面的内容是可以改變的
		System.out.println("Hello");
	}
}
           

7.2 關鍵字

概述:

就是被 Java 語言賦予了特定含義的單詞

特點:

  1. 關鍵字的字母全部小寫
  2. 常用的代碼編輯器,針對關鍵字有特殊的顔色标記,非常直覺

标紫的就是關鍵字:

public class HelloWorld{
	public static void main(String[] args){
		System.out.println("Hello");
	}
}
           

7.4 常量

Java 基礎入門(未完成持續更新)Java 基礎入門

常量的概念:在程式運作過程中,其值不可以發生改變的量

常量的分類:

常量類型 說明 舉例
字元串常量 用雙引号括起來的内容 “hellworld” , “黑馬程式員”
整數常量 不帶小數的數字 666,88
小數常量 帶小數的數字 13.14 -5.12
字元常量 用單引号括起來的内容 ‘ a ’ , ’ 0 ’ , ‘我’
布爾常量 布爾值,表示真假 隻有兩個值:ture , false
空常量 一個特殊的值,空值 值是:null

示例:

/*
	常量:
		在程式運作過程中,其值不可以發生改變的量
	常量的分類:
		| 字元串常量 | 用雙引号括起來的内容 | "hellworld" , "黑馬程式員" |
		|  整數常量  |    不帶小數的數字    |          666,88           |
		|  小數常量  |     帶小數的數字     |       13.14   -5.12        |
		|  字元常量  | 用單引号括起來的内容 |   ‘ a ’ , ' 0 '  ,  '我'   |
		|  布爾常量  |   布爾值,表示真假   |  隻有兩個值:ture , false  |
		|   空常量   |  一個特殊的值,空值  |         值是:null         |
*/
public class ConstantDemo{
	public static void main(String[] args){
		//字元串常量
		System.out.println("hellworld");
		System.out.println("黑馬程式員");
		System.out.println("-----------");  //分割線
		
		//整數常量
		System.out.println(666);
		System.out.println(-88);
		System.out.println("-----------");
		
		//小數常量
		System.out.println(13.14);
		System.out.println(-5.21);
		System.out.println("-----------");
		
		//字元常量
		System.out.println('A');
		System.out.println('0');
		System.out.println('我');
		System.out.println("-----------");
		
		//布爾常量
		System.out.println(true);  //關鍵字
		System.out.println(false);  //關鍵字
		System.out.println("-----------");
		
		//空常量
		//報錯,空常量是不能直接輸出的
		System.out.println(null);  //關鍵字
	}
}
           

8. 資料類型

8.1 計算機存儲單元

我們知道計算機是可以用來存儲資料的,但是無論是記憶體還是硬碟,計算機儲存設備的最小資訊單元叫 “位(bit)”

我們又稱之為 “比特位”,通常用小寫的字母 “b“ 表示。而計算機最小的存儲單元叫 ”位元組(byte)“

通常用大寫字母 ”B“ 表示,位元組是由連續的8個位組成。

除了位元組外還有一些常用的存儲機關,大家比較熟悉,我們一起來看看:

1B(位元組) = 8bit

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

8.2 資料類型

Java 語言是強類型語言,對于每一種資料都給出了明确的資料類型,不同的資料類型也配置設定了不同的記憶體空間

是以他們表示的資料大小也是不一樣的

Java 基礎入門(未完成持續更新)Java 基礎入門

8.3 資料類型記憶體占用和取值範圍

Java 基礎入門(未完成持續更新)Java 基礎入門
說明:E + 38表示的是乘以10的38次方,同樣,E - 45表示乘以10的負45次方

9. 變量

假設我需要修改數值,但是資料輸出太多了,這種方法的工作量大。是以我們引入一個變量來暫存資料

把輸出位置設定為暫存資料,那麼我們隻要修改暫存資料,輸出的值也會随之改變

Java 基礎入門(未完成持續更新)Java 基礎入門
Java 基礎入門(未完成持續更新)Java 基礎入門

概述:在程式運作過程中,其值可以發生改變的量

從本質上講,變量是記憶體中一小塊區域

Java 基礎入門(未完成持續更新)Java 基礎入門

9.1 變量定義

文法格式:

資料類型 變量名 = 變量值

範例: int a = 10;

對暫存位置做一個标記 —> 變量名

因為 Java 是強語言,是以我們要給這個變量一個明确的資料類型

而且這個變量還得有值,這樣才有意義

Java 基礎入門(未完成持續更新)Java 基礎入門

9.2 變量的使用

變量的使用:取值和修改值

  • 取值格式:變量名
  • 範例:a
  • 修改格式:變量名 = 變量值
  • 範例:a = 20;

示例:

/*
	變量定義格式:
		資料類型變量名=變量值;
	
	基本資料類型:
		byte,short,int,long,float,double,char,boolean
	
	變量的使用:
		取值格式:變量名
		
		修改值格式:變量名=變量值;
*/
public class VariableDemo01{
	public static void main(String[] args){
		//定義變量
		int a = 10;
		
		//輸出變量
		System.out.println(a);  //a = 10
		
		//修改變量
		a = 900;
		System.out.println(a);  //a = 900
	}
}
           

9.3 變量使用的注意事項

  1. 變量名不能重複
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. 變量未指派,不能使用
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. long 類型的變量定義的時候,為了防止整數過大,後面要加L
Java 基礎入門(未完成持續更新)Java 基礎入門
  1. float 類型定義的時候為了防止類型不相容,後面要加F
Java 基礎入門(未完成持續更新)Java 基礎入門

10. 辨別符

概念:就是給類,方法,變量等起名字的符号

定義規則:

  1. 由 數字,字母,下劃線(_) 和 美元符($) 組成
  2. 不能以數字開頭
  3. 不能是關鍵字
  4. 區分大小寫

判斷下面哪些變量名不符合規則:

bj b2 2b

class _2b #ithema

ak47 Class helloworld

為了使變量清晰易懂,我們對變量的命名做一些約定:

小駝峰命名法:

針對 方法 和 變量 的命名規則

  1. 辨別符是一個單詞的時候,首字母小寫 例如:name
  2. 辨別符是由多個單詞組成的時候,第一個單詞首字母小寫,其他單詞首字母大寫

    例如:firstName

大駝峰命名法:

針對 類 的命名規則

  1. 辨別符是一個單詞的時候,首字母大寫 例如:Student
  2. 辨別符由多個單詞組成的時候,每個單詞的首字母大寫

    例如:GoodStudent

11. 類型轉換分類

11.1 自動類型轉換

把一個表示資料範圍小的數值或者變量指派給另一個表示資料範圍大的變量

例如:double d = 10;

Java 基礎入門(未完成持續更新)Java 基礎入門

byte 強轉成 char 的結果:

Java 基礎入門(未完成持續更新)Java 基礎入門

11.2強制類型轉換

把一個表示資料範圍大的數值或者變量指派給另一個表示資料範圍小的變量

文法格式:

目标資料類型 變量名 = (目标資料類型)值或者變量;

注意:這裡的 值或者變量 要比 目标資料類型 所表示的 範圍 要大

例如:int k = (int)88.88;

88.88 屬于 浮點類型的數值,int 是整數類型的數值,整型 所表示的範圍 < 浮點型 所表示的範圍

無強制轉換的結果:

Java 基礎入門(未完成持續更新)Java 基礎入門

示例:

/*
	類型轉換
*/
public class ConversionDemo{
	public static void main(String[] args){
		
		//自動類型轉換
		double d = 10;
		System.out.println(d);   //10.0
		//說明10本身是整數,而指派給浮點型double後,轉換成了浮點型數值
		
		//定義byte類型的變量
		byte b = 10;
		short s = b;
		int i = b;
		//char c = b;		//報錯,顯示類型不相容
		System.out.println(b);
		
		//強制類型轉換
		//int k = 88.88;    //報錯,顯示類型不相容
		int k = (int)88.88;
		System.out.println(k);  //88,轉換成了整數,不建議這麼操作容易造成資料丢失
	}
}
           

12. 運算符

12.1 運算符和表達式

  • 運算符:對常量或者變量進行操作的符号
  • 表達式:用運算符把常量或者變量連接配接起來==符合 Java 文法的式子就可以稱為表達式

    ​ 不同運算符連接配接的表達式展現的是不同類型的表達式

舉例說明:

​ int a = 10;

​ int b = 20;

​ int c = a + b;

+:是運算符,并且是算術運算符

a + b:是表達式,由于 + 是算數運算符,是以這個表達式叫算術表達式

12.1.1 算術運算符

符号 作用 說明
+ 與平常生活中的算術規則一樣
- 與平常生活中的算術規則一樣
* 與平常生活中的算術規則一樣
/ 與平常生活中的算術規則一樣
% 取餘 擷取的是兩個資料做除法的餘數
總結1:/ 取結果的商,% 取結果的餘數
總結2:整數操作隻能得到整數,要想得到小數,必須有浮點數參與運算

示例:

/*
	算術運算符
*/
public class OperatorDemo01{
	public static void main(String[] args){
		//定義兩個變量
		int a = 10;
		int b = 20;
		//int c = a + b;
		System.out.println(a + b);	//30
		System.out.println(a - b);	//-10
		System.out.println(a * b);	//200
		System.out.println(a / b);	//0,整數相除隻能得到整數部分且沒有四舍五入
		System.out.println(a % b);	//10
		
		//整數相除隻能得到整數部分,要想得到小數部分必須要有浮點數的參與
		a = 6;
		b = 4;
		System.out.println(a / b);	  //1
		System.out.println(6.0 / 4);  //1.5
	}
}
           

12.1.2 字元的 “ + ” 操作

概述:拿字元在計算機底層對應的數值來進行計算的

Java 基礎入門(未完成持續更新)Java 基礎入門

算術表達式中包含多個基本類型的值的時候,整個算術表達式的類型會自動進行提升

提升規則:

  • byte 類型,short 類型和 char 類型将被提升到 int 類型
  • 整個表達式的類型自動提升到表達式中最高等級操作數同樣的類型

    等級順序:byte , short , char —> int —> long —> float —> double

示例:

12.1.3 字元串的 " + "操作

當 " + " 操作出現在字元串時,這個 " + " 是字元串連接配接符,而不是算術運算

  • “itheima” + 666 = itheima666

在 " + " 操作中,如果出現了字元串,就是連接配接運算符,否則就是算術運算,當連續進行 " + " 操作時,從左到右逐個執行

  • 1 + 99 + “年黑馬” = 100年黑馬

示例:

12.1.4 指派運算符

符号 作用 說明
= 指派 a = 10,将10指派給變量a
+= 加後指派 a += b,将 a+b 的值給a
-= 減後指派 a -= b,将 a-b 的值給a
*= 乘後指派 a *= b,将 axb 的值給a
/= 除後指派 a /= b,将 a÷b 的商給a
%= 取餘後指派 a %= b,将a÷b的餘數給a
注意:擴充的指派運算符底層隐含了強制轉換

示例:

public class OperatorDemo04{
	public static void main(String[] args){
		//把10指派給int類型的變量i
		int i = 10;
		System.out.println("i:" + i);  //i:10
		
		// += 把左邊和右邊的資料做加法操作,結果指派給左邊
		i += 20;	//相當于 i = i + 20;
		System.out.println("i:" + i);  //i:30
		
		//注意:
		short s = 10;
		s += 20;
		System.out.println("s:" + s);  //s:30
		
		//看到這裡你可能會猜測s += 20 等價于 s = s + 20
		s = s + 20;
		System.out.println("s:" + s);  //報錯,顯示不相容
		//代碼解讀:
		s = s + 20中屬于字元的 "+" 操作,有short和int類型,是以表達式自動提升到int類型運算
		是以 s + 20 應該用int類型來接收數值而不是用short類型
		
        //改正操作:
		s = (short)(s + 20);		//強轉成short類型,一般不建議這樣寫
		System.out.println("s:" + s);	//s:50
		
		//是以,擴充的指派運算符底層隐含了強制轉換
	}
}
           

12.1.5 自增自減運算符

符号 作用 說明
++ 自增 變量的值加1
自減 變量的值減1

注意事項:

  • ++ 和 – 既可以放在變量的後邊,也可以放在變量的前邊。
  • 單獨使用的時候,++ 和 – 無論是放在變量的前邊還是後邊,結果是一樣的
  • 參與操作的時候,如果放在變量的後邊,先拿變量參與操作,後拿變量做++或者–
  • 參與操作的時候,如果放在變量的前邊,先拿變量做 ++ 或者 – ,後拿變量參與操作
最常見的用法:單獨使用

示例:

/*
	自增自減運算符
*/
public class OperatorDemo05{
	public static void main(String[] args){
		//定義變量
		int i = 10;
		System.out.println("i:" + i);  //i:10
		
		//++ 的單獨使用
		i++;
		System.out.println("i:" + i);  //i:11		
		++i;
		System.out.println("i:" + i);  //i:12
		System.out.println("----------------");
		
		//參與操作使用
		i = 10;		//初始化一下
		int j = i++;
		System.out.println("i:" + i);   //i:11
		System.out.println("j:" + j);   //j:10
		System.out.println("----------------");
		
		i = 10;		//初始化一下
		j = ++i;
		System.out.println("i:" + i);	//i:11
		System.out.println("j:" + j);	//j:11
	}
}
           

12.1.6 關系運算符

符号 說明
= = a = = b,判斷 a和b 的值是否相等,成立為true,不成立為 false
! = a ! = b,判斷 a和b 的值是否不相等,成立為true,不成立為 false
> a > b,判斷 a是否大于b,成立為true,不成立為 false
> = a > = b,判斷 a是否大于等于b,成立為true,不成立為 false
< a < b,判斷 a是否小于b,成立為true,不成立為 false
< = a < = b,判斷 a是否小于等于b,成立為true,不成立為 false

示例:

/*
	關系運算符
*/
public class exp1{
	public static void main(String[] args){
		//定義變量
		int i = 10;
		int j = 20;
		int k = 10;
		
		//==
		System.out.println(i == j);  //false
		System.out.println(i == k);  //true
		System.out.println("---------------");
		
		//!=
		System.out.println(i != j);  //true
		System.out.println(i != k);  //false
		System.out.println("---------------");
		
		//>
		System.out.println(i > j);  //false
		System.out.println(i > k);  //false
		System.out.println("---------------");
		
		//>=
		System.out.println(i >= j);  //false
		System.out.println(i >= k);  //true
		System.out.println("---------------");
		
		//不小心把 == 寫成 =
		System.out.println(i = j);  //20
		//相當于把j的值指派給了i,然後輸出i的值
	}
}
           
注意:關系運算符的結果都是Boolean類型,要麼是true,要麼是false

千萬不要把 " == " 寫成 ” = “

12.1.7 邏輯運算符

概述:在數學中,一個資料x,大于3,小于6,我們可以這樣來表示:3 < x < 6

在 Java 中,需要把上面的式子先進行拆解,再進行合并表達

  • 拆解為:x > 3 和 x < 6
  • 合并後:x > 3 && x < 6

&&其實就是一個邏輯運算符

我們可以這樣說,邏輯運算符,是用來連接配接關系表達式的運算符

當然,邏輯運算符也可以直接連接配接布爾類型的常量或者變量

符号 作用 說明
& 邏輯與 a&b,a和b都是true,結果為true,否則為false
| 邏輯或 alb,a和b都是false,結果為false,否則為true
^ 邏輯異或(相同為false,不同為true) a^b,a和b結果不同為true,相同為false
邏輯非(取反) !a,結果和a的結果正好相反

示例:

/*
	邏輯運算符
*/
public class exp2{
	public static void main(String[] args){
		//變量
		int i = 10;
		int j = 20;
		int k = 30;
		
		//& 有false則false
		System.out.println((i > j) & (i > k));  //false & false = false
		System.out.println((i < j) & (i > k));  //true & false = false
		System.out.println((i > j) & (i < k));  //false & true = false
		System.out.println((i < j) & (i < k));  //true & true = true
		System.out.println("----------");
		
		//| 有true則true
		System.out.println((i > j) | (i > k));  //false | false = false
		System.out.println((i < j) | (i > k));  //true | false = true
		System.out.println((i > j) | (i < k));  //false | true = true
		System.out.println((i < j) | (i < k));  //true | true = true
		System.out.println("----------");
		
		//^ 相同為false不同為true
		System.out.println((i > j) ^ (i > k));  //false ^ false = false
		System.out.println((i < j) ^ (i > k));  //true ^ false = true
		System.out.println((i > j) ^ (i < k));  //false ^ true = true
		System.out.println((i < j) ^ (i < k));  //true ^ true = false
		System.out.println("----------");
		
		//!
		System.out.println((i > j));  //false = false
		System.out.println(!(i > j));  //!false = true
		System.out.println(!!(i > j)); //!!false = false
		System.out.println(!!!(i > j)); //!!!false = true		
	}
}
           

12.1.8 短路邏輯運算符

符号 作用 說明
&& 短路與 作用和&相同,但是有短路效果
|| 短路或 作用和|相同,但是有短路效果

注意事項:

  • 邏輯與==&,無論左邊真假,右邊都要執行

    短路與&&,如果左邊為真,右邊執行;如果左邊為假,右邊不執行==

  • 邏輯或==|,無論左邊真假,右邊都要執行

    短路或||,如果左邊為假,右邊執行;如果左邊為真,右邊不執行==

最常用的邏輯運算符:&&,||,!

示例:

/*
	短路邏輯運算符
*/
public class exp3{
	public static void main(String[] args){
		//定義變量
		int i = 10;
		int j = 20;
		int k = 30;
		
		//&& 有false則false
		System.out.println((i > j) && (i > k));  //false && false = false
		System.out.println((i < j) && (i > k));  //true && false = false
		System.out.println((i > j) && (i < k));  //false && true = false
		System.out.println((i < j) && (i < k));  //true && true = true
		System.out.println("----------");
		
		//|| 有true則true
		System.out.println((i > j) || (i > k));  //false || false = false
		System.out.println((i < j) || (i > k));  //true || false = true
		System.out.println((i > j) || (i < k));  //false || true = true
		System.out.println((i < j) || (i < k));  //true || true = true
		System.out.println("----------");
		
		//&&和&的差別
		System.out.println((i++ > 100) & (j++ > 100));  //false & false = false
		System.out.println((i++ > 100) && (j++ > 100));  //false && false = false
		
		System.out.println((i++ > 100) & (j++ > 100));
		System.out.println("i:" + i);	//11
		System.out.println("j:" + j);	//21
		
		i = 10;  //初始化
		j = 20;  //初始化
		System.out.println((i++ > 100) && (j++ > 100));
		System.out.println("i:" + i);	//11
		System.out.println("j:" + j);	//20
		//代碼解讀:
		//&& 在運作完(i++ > 100)判斷為false
		//故判斷整個表達式為false,就不再運作右邊的(j++ > 100),是以j = 20
		//同理,||隻要左邊為true,那麼就不再運作右邊的代碼
	}
}
           

12.1.9 三元運算符

文法:

關系表達式 ? 表達式1 : 表達式2;

範例:a > b ? a : b;

計算規則:

首先計算關系表達式的值

如果值為true,表達式1的值就是運算結果

如果值為false,表達式2的值就是運算結果

示例:

/*
	三元運算符
	文法:關系表達式 ? 表達式1 : 表達式2;

	範例:a > b ? a : b

	計算規則:
		首先計算關系表達式的值
		如果值為true,表達式1的值就是運算結果
		如果值為false,表達式2的值就是運算結果
*/
public class exp4{
	public static void main(String[] args){
		//定義兩個變量
		int a = 10;
		int b = 20;
		
		//擷取兩個資料的較大值
		int max = a > b ? a : b;
		System.out.println("max = " + max);  //max = 20;
	}
}