主頁 > 軟體設計 > 【Java從入門到天黑|02】SE入門之Java基礎

【Java從入門到天黑|02】SE入門之Java基礎

2021-04-18 10:50:43 軟體設計

大家好,我是孫叫獸,微信公眾號【孫叫獸雜談】,本期給大家分享一下JavaSE的入門部分之Java基礎

目錄

注釋

識別符號

資料型別

型別轉換

變數,常量

運算子


注釋

平時我們撰寫代碼,在代碼量比較少的時候,我們還可以看懂自己寫的,但是當專案結構一旦復雜起來,我們就需要用到一個注釋了,注釋就類似于我們上學時候寫的筆記,我們看著筆記就知道自己寫的什么

東西了!在程式中也是如此,我們來看一下Java中的注釋怎么寫,看以下代碼:

1 /*

2 * @Description HelloWorld類

3 * @Author Diamond 狂神QQ:24736743

4 **/

5 public class HelloWorld {

6 /*

7 這是我們Java程式的主入口,

8 main方法也是程式的主執行緒,

9 */

10 public static void main(String[] args) {

11 //輸出HelloWorld!

12 System.out.println("Hello,World!");

13 }

14 }

注釋并不會被執行,是給我們寫代碼的人看的,書寫注釋是一個非常好的習慣,在很多大公司都是強制要求各位去進行撰寫注釋!比如,我們的BAT三大巨頭等等,,,

Java中的注釋有三種:

單行注釋:只能注釋當前行,以//開始,直到行結束

1 //輸出HelloWorld

多行注釋:注釋一段文字,以/ /結束!

1 /*

2 這是我們Java程式的主入口,

3 main方法也是程式的主執行緒,

4 */

檔案注釋:用于生產API檔案,配合JavaDoc

【注】檔案注釋我們現在只作為了解,在學習JavaDoc時候我們會詳細給大家說,目前知道有這樣的注釋就好,

1 /*

2 * @Description HelloWorld

3 * @Author Diamond 狂神QQ:24736743

4 **/

【狂神建議】平時寫代碼一定要注意注釋的規范性,一個好的程式員,一定是有非常良好的編碼習慣

的,我希望大家能夠從小事開始鍛煉自己的行為習慣!

識別符號

每個人從出生開始就有一個名字,咋們生活中的所有事物也都有名字,這名字是誰規定呢?回答是:造物主,誰生產出來的誰規定名字,在我們的程式中也不例外,

我們作為造物主,需要給所有的東西給上一個名字,比如我們的HelloWorld程式:

HelloWorld是類名,也是我們的檔案名,它前面的 public class是關鍵字,不過是搞Java那群人已經定義好的有特殊作用的,下面的每一個代碼都有自己的意思和名字對吧,就是用來作區分!和我們的名字一

樣,拿來被叫或者稱呼的,程式一切都源自于生活,一定要把學程式和生活中的一切聯系起來,你會發現這一切都是息息相關的,

我們來看看有哪些是Java自己定義好的關鍵字呢?

這些看起來非常的多,但是隨著我們以后的學習我們都會用到,所以完全不用擔心自己 看不懂,這些被Java已經規定的關鍵字,我們自己就不能拿它當做名字了!

Java 所有的組成部分都需要名字,類名、變數名以及方法名都被稱為識別符號,

我們自己起名字有哪些要求呢?

表示類名的識別符號用大寫字母開始,

1 如:Man, GoodMan

表示方法和變數的識別符號用小寫字母開始,后面的描述性詞以大寫開始,

1 如:eat(),eatFood()

2 //駝峰命名法

關于 Java 識別符號,有以下幾點需要注意:

所有的識別符號都應該以字母(A-Z 或者 a-z,美元符($)、或者下劃線(_)開始

首字符之后可以是字母(A-Z 或者 a-z,美元符($)、下劃線(_)或數字的任何字符組合

不能使用關鍵字作為變數名或方法名,

識別符號是大小寫敏感的

合法識別符號舉例age$salary_value__1_value

非法識別符號舉例123abc-salary#abc

JAVA不采用通常語言使用的ASCII字符集,而是采用unicode這樣的標準的國際字符集,因此,這里的字母的含義:可以表示英文、漢字等等,】

【可以使用中文命名,但是一般不建議這樣去使用,也不建議使用拼音,很Low

1 public static void main(String[] args) {

2 String 王者榮耀 = "最強王者";

3 System.out.println(王者榮耀);

4 }

課外擴展各種字符集和編碼詳解

演示:合法識別符號以及不合法識別符號

資料型別

Java是一種強型別語言,每個變數都必須宣告其型別,

1、強弱型別語言

說到強型別語言,那什么是強型別語言呢?

強型別語言也稱為強型別定義語言,要求變數的使用要嚴格符合規定,所有變數都必須先定義后才能使用,

Java.NETC++等都是強制型別定義的,也就是說,一旦一個變數被指定了某個資料型別,如果不經過轉換,那么它就永遠是這個資料型別了,

安全性高,運行效率相對較慢,魚和熊掌不可兼得!強型別定義語言在速度上可能略遜色于弱型別定義語言,但是強型別定義語言帶來的嚴謹性能夠有效的避免許多錯誤,與其相對應的是弱型別語言,

弱型別語言也稱為弱型別定義語言,與強型別定義相反,像vbphp等就屬于弱型別語言·在VBScript中,可以將字串‘12’和整數3進行連接得到字串‘123’,也可以把它看成整數123,而不需要顯示轉換,是不

是十分的隨便,我們Java就不是這樣的,但其實它們的型別沒有改變,VB只是在判斷出一個運算式含有不同型別的變數之后,自動在這些變數前加了一個clong()或(int)()這樣的轉換函式而已,能做到這

一點其實是歸功于VB的編譯器的智能化而已,這并非是VB語言本身的長處或短處,

好了,到這里,我們應該對強弱型別語言有了一定的了解!我們繼續回到資料型別這個話題.

2、資料型別

Java的資料型別分為兩大類:基本型別(primitive type)和參考型別 reference type

【注:參考資料型別的大小統一為4個位元組,記錄的是其參考物件的地址!】

如果你看到這一堆頭疼的話,沒關系,不用記,JDK中型別對應的包裝類都幫忙寫好了,我們需要時候可以直接看到!可以把以下代碼拷貝進行查看結果:

1 public static void main(String[] args) {

2 // byte

3 System.out.println("基本型別:byte 二進制位數:" + Byte.SIZE);

4 System.out.println("包裝類:java.lang.Byte");

5 System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);

6 System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);

7 System.out.println();

8

9 // short

10 System.out.println("基本型別:short 二進制位數:" + Short.SIZE);

11 System.out.println("包裝類:java.lang.Short");

12 System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);

13 System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);

14 System.out.println();

15

16 // int

17 System.out.println("基本型別:int 二進制位數:" + Integer.SIZE);

18 System.out.println("包裝類:java.lang.Integer");

19 System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);

20 System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);

21 System.out.println();

22

23 // long

24 System.out.println("基本型別:long 二進制位數:" + Long.SIZE);

25 System.out.println("包裝類:java.lang.Long");

26 System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);

27 System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);

28 System.out.println();

29

30 // float

31 System.out.println("基本型別:float 二進制位數:" + Float.SIZE);

32 System.out.println("包裝類:java.lang.Float");

33 System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);

34 System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);

35 System.out.println();

36

37 // double

38 System.out.println("基本型別:double 二進制位數:" + Double.SIZE);

}

System.out.println("包裝類:java.lang.Double");

System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);

System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);

System.out.println();

// char

System.out.println("基本型別:char 二進制位數:" + Character.SIZE);

System.out.println("包裝類:java.lang.Character");

// 以數值形式而不是字符形式將Character.MIN_VALUE輸出到控制臺

System.out.println("最小值:Character.MIN_VALUE="

+ (int) Character.MIN_VALUE);

// 以數值形式而不是字符形式將Character.MAX_VALUE輸出到控制臺

System.out.println("最大值:Character.MAX_VALUE="

+ (int) Character.MAX_VALUE);





如果你是熱愛學習的人,你現在應該非常想知道這位元組到底是什么東西,所以我給大家科普一下相關知識:

1 /*

2 位(bit):是計算機 內部資料 儲存的最小單位,11001100是一個八位二進制數,

3 位元組(byte):是計算機中 資料處理 的基本單位,習慣上用大寫 B 來表示,

4 1Bbyte,位元組)= 8bit(位)

5 字符:是指計算機中使用的字母、數字、字和符號

6

7 ASCIIS碼:

8 1個英文字母(不分大小寫)= 1個位元組的空間

9 1個中文漢字 = 2個位元組的空間

10 1ASCII = 一個位元組

11 UTF-8編碼:

12 1個英文字符 = 1個位元組

13 英文標點 = 1個位元組

14 1個中文(含繁體) = 3個位元組

15 中文標點 = 3個位元組

16 Unicode編碼:

17 1個英文字符 = 2個位元組

18 英文標點 = 2個位元組

19 1個中文(含繁體) = 2個位元組

20 中文標點 = 2個位元組

21

22 1bit表示1位,

23 1Byte表示一個位元組 1B=8b

24 1024B=1KB

25 1024KB=1M

26 1024M=1G.

27 */

那有人會問:電腦的32位和64位的區別是什么呢?

1 /*

2 32位作業系統只可以使用32位的cpu,而64位的CPU既可以安裝32位作業系統也可以安裝64位操作

系統,

3

4 尋址能力簡單點說就是支持的記憶體大小能力,64位系統最多可以支達128 GB的記憶體,而32位系統最

多只可以支持4G記憶體,

5

6 32位作業系統只可以安裝使用32位架構設計的軟體,而64位的CPU既可以安裝使用32位軟體也可以

安裝使用64位軟體,

7

8 現在的電腦都是64位了!

9 */

【好了,回到正題,我們了解了這些知識后,我們自己定義一些變數來看!】

1 public static void main(String[] args) {

2

3 //整型

4 int i1=100;

5 //長整型

6 long i2=998877665544332211L;

7 //短整型

8 short i3=235;

9 //浮點型

10 double d1=3.5; //雙精度

11 double d2=3;

12 float f1=(float)3.5; //單精度

13 float f2=3.5f; //單精度

14

15 //布爾型別 boolean true真/false假

16 boolean isPass=true;

17 boolean isOk=false;

18 boolean isBig=5>8;


}

if(isPass){

System.out.println("通過了");

}else{

System.out.println("未通過");

}

//單字符

char f='女';

char m='男';

Java語言的整型常數默認為int型,浮點數默認是Double

3、整型拓展

在我們計算機中存在很多進制問題,十進制,八進制,十六進制等等的問題,他們怎么表示呢?

1 十進制整數,如:99, -500, 0

2

3 八進制整數,要求以 0 開頭,如:015

4

5 十六進制數,要求 0x 0X 開頭,如:0x15

演示:

1 //整型

2 int i=10;

3 int i2=010;

4 int i3=0x10;

5 System.out.println(i); //10

6 System.out.println(i2); //8

7 System.out.println(i3); //16

4、浮點型拓展

【金融面試問:銀行金融業務用什么型別表示?】

浮點型別?oat, double的資料不適合在不容許舍入誤差的金融計算領域,

如果需要進行不產生舍入誤差的精確數字計算,需要使用BigDecimal類,

1 public static void main(String[] args) {

2 float f = 0.1f;

3 double d = 1.0/10;

4 System.out.println(f==d); //false

5

6 float d1 = 2131231231f;

7 float d2 = d1+1;

8 if(d1==d2){

9 System.out.println("d1==d2");

10 }else{

11 System.out.println("d1!=d2");

12 }

13 }

主要理由:

由于字長有限,浮點數能夠精確表示的數是有限的,因而也是離散的,浮點數一般都存在舍入誤差,很多數字無法精確表示,其結果只能是接近,但不等于;二進制浮點數不能精確的表示0.1,0.01,0.001這樣

10的負次冪,并不是所有的小數都能可以精確的用二進制浮點數表示,

最好完全避免使用浮點數比較 !

大數值:Java.math下面的兩個有用的類:BigIntegerBigDecimal,這兩個類可以處理任意長度的數值,BigInteger實作了任意精度的整數運算,BigDecimal實作了任意精度的浮點運算,

浮點數使用總結:

1. 默認是double

2. 浮點數存在舍入誤差,很多數字不能精確表示,如果需要進行不產生舍入誤差的精確數字計算,需

要使用BigDecimal類,

3. 避免比較中使用浮點數

5、字符型拓展

單引號用來表示字符常量,例如‘A’是一個字符,它與“A”是不同的,“A”表示一個字串,

char 型別用來表示在Unicode編碼表中的字符,.

Unicode編碼被設計用來處理各種語言的所有文字,它占2個位元組,可允許有65536個字符;

【科普:2位元組=16 216次方=65536,我們用的Excel原來就只有這么多行,并不是無限的】

【代碼演示:字符轉int看結果】

1 public static void main(String[] args) {

2 char c1 = 'a';

3 char c2 = '中';

4 System.out.println(c1);

5 System.out.println((int) c1); //97

6 System.out.println(c2);

7 System.out.println((int) c2); //20013

8 }

Unicode具有從065535之間的編碼,他們通常用從’u0000’’uFFFF’之間的十六進制值來表示(前綴為u表示Unicode

1 char c3 = '\u0061';

2 System.out.println(c3); //a

Java 語言中還允許使用轉義字符 ‘’ 來將其后的字符轉變為其它的含義,有如下常用轉義字符:

【以后我們學的String類,其實是字符序列(char sequence),在這里給大家一個思考題】

1 //代碼1

2 String sa=new String("Hello world");

3 String sb=new String("Hello world");

4 System.out.println(sa==sb); // false

5 //代碼2

6 String sc="Hello world";

7 String sd="Hello world";

8 System.out.println(sc==sd); // true

大家可以先思考下為什么,之后我們學到物件的時候,會給大家進行記憶體級別的分析,那時候你會恍然大悟!

6、布爾型拓展

boolean型別(一位,不是一個位元組),就是0|1

boolean型別有兩個值,truefalse,不可以 0 或非 0 的整數替代 true false ,這點和C語言不同,

boolean 型別用來判斷邏輯條件,一般用于程式流程控制,

1 boolean flag = false;

2 if(flag){

3 // true分支

4 }else{

5 // false分支

6 }

【編碼規范:很多新手程式員喜歡這樣寫】

1 if (is == true && un == false ) {...}

只有新手才那么寫,對于一個熟練的人來說,應該用如下方式來表示:

1 if ( is && !un ) {....}

這點都不難理解吧,所以要習慣去掉所有的==fasle ==trueLess is More!! 代碼要精簡易讀!

型別轉換

由于Java是強型別語言,所以要進行有些運算的時候的,需要用到型別轉換,

整型、實型(常量)、字符型資料可以混合運算,

運算中,不同型別的資料先轉化為同一型別,然后進行運算,

轉換從低級到高級(根據容量來看),

1 ------------------------------------>

2

3 byte,short,char—> int > long—> float > double

資料型別轉換必須滿足如下規則:

不能對boolean型別進行型別轉換,

不能把物件型別轉換成不相關類的物件,

在把容量大的型別轉換為容量小的型別時必須使用強制型別轉換,

轉換程序中可能導致溢位或損失精度,例如:

1 int i =128;

2 byte b = (byte)i;

因為 byte 型別是 8 位,最大值為127,所以當 int 強制轉換為 byte 型別時,值 128 時候就會導致溢位,

浮點數到整數的轉換是通過舍棄小數得到,而不是四舍五入,例如:

1 (int)23.7 == 23;

2 (int)-45.89f == -45

1、自動型別轉換

自動型別轉換:容量小的資料型別可以自動轉換為容量大的資料型別,

例如: short資料型別的位數為16位,就可以自動轉換位數為32int型別,同樣?oat資料型別的位數為

32,可以自動轉換為64位的double型別,

【演示】

1 public class ZiDongLeiZhuan{

2 public static void main(String[] args){

3 char c1='a';//定義一個char型別

4 int i1 = c1;//char自動型別轉換為int

5 System.out.println("char自動型別轉換為int后的值等于"+i1);

6 char c2 = 'A';//定義一個char型別

7 int i2 = c2+1;//char 型別和 int 型別計算

8 System.out.println("char型別和int計算后的值等于"+i2);

9 }

10 }

決議:c1 的值為字符 a , ASCII 碼表可知對應的 int 型別值為 97 A 對應值為 65,所以i2=65+1=66,】

2、強制型別轉換

強制型別轉換,又被稱為造型,用于顯式的轉換一個數值的型別.

在有可能丟失資訊的情況下進行的轉換是通過造型來完成的,但可能造成精度降低或溢位,

強制型別轉換的語法格式: (type)var ,運算子“()”中的type表示將值var想要轉換成的目標資料型別, 條件是轉換的資料型別必須是兼容的,

【演示】

1 public static void main(String[] args) {

2 double x = 3.14;

3 int nx = (int)x; //值為3

4

5 char c = 'a';

6 int d = c+1;

7 System.out.println(d); //98

8 System.out.println((char)d); //b

9 }

當將一種型別強制轉換成另一種型別,而又超出了目標型別的表示范圍,就會被截斷成為一個完全不同的值,溢位,

1 public static void main(String[] args) {

2 int x = 300;

3 byte bx = (byte)x; //值為44

4 System.out.println(bx);

5 }

3、常見錯誤和問題

1. 操作比較大的數時,要留意是否溢位,尤其是整數操作時;

1 public static void main(String[] args) {

2 int money = 1000000000; //10億

3 int years = 20;

4 int total = money*years; //回傳的是負數

5 long total1 = money*years; //回傳的仍然是負數,默認是int,因此結果會轉成int值,再轉成long,但是已經發生了資料丟失

6 long total2 = money*((long)years); //先將一個因子變成long,整個運算式發生提升,全部用long來計算,

7 System.out.println(total);

8 System.out.println(total1);

9 System.out.println(total2);

10 }

2. Ll 的問題:

不要命名名字為l的變數,long型別使用大寫L不要用小寫,

1 public static void main(String[] args) {

2 int l = 2;

3 long a = 23451l;

4 System.out.println(l+1); //3

5 System.out.println(a); //23451

6 }

4JDK7擴展

JDK7新特性: 二進制整數

由于我們在開發中也經常使用二進制整數,因此JDK7為我們直接提供了二進制整數的型別,

我們只要以:0b開頭即可,

1 int a = 0b0101

JDK7新特性:下劃線分隔符

在實際開發和學習中,如果遇到特別長的數字,讀懂它令人頭疼!JDK7為我們提供了下劃線分隔符,可以按照自己的習慣進行分割,

1 int b = 1_2234_5678;

我們很容易就知道這是122345678啦! 非常符合國人的習慣!

1 public static void main(String[] args) {

2 int a = 0b0101;

3 int b = 1_2345_7893;

4 System.out.println(a); //5

5 System.out.println(b); //123457893

6 }

變數,常量

1、變數(variable

變數是什么:就是可以變化的量!

我們通過變數來操縱存盤空間中的資料,變數就是指代這個存盤空間!空間位置是確定的,但是里面放置什么值不確定! 打個比方:

這就好像我們家里有一個大衣柜,里面有十分多的小格子,我們給格子上貼上標簽,放衣服,放鞋子,放手表等等,此時我們知道了哪里該放什么,但是,我們并不知道里面到底放的是什么牌子的鞋子,是

衣服還是褲子,那個標簽就相當于我們的變數,我們給他起了個名字,但是里面要放什么需要我們自己去放,

Java是一種強型別語言,每個變數都必須宣告其型別,

Java變數是程式中最基本的存盤單元,其要素包括變數名,變數型別和作用域,

變數在使用前必須對其宣告, 只有在變數宣告以后,才能為其分配相應長度的存盤單元,宣告格式為:

1 type varName [=value] [{,varName[=value]}]

2 //資料型別 變數名 = 值;可以使用逗號隔開來宣告多個同型別變數,

注意事項:

每個變數都有型別,型別可以是基本型別,也可以是參考型別,

變數名必須是合法的識別符號,

變數宣告是一條完整的陳述句,因此每一個宣告都必須以分號結束

【演示】

1 int a, b, c; // 宣告三個int型整數:a、 b、c

2 int d = 3, e = 4, f = 5; // 宣告三個整數并賦予初值

3 byte z = 22; // 宣告并初始化 z

4 String s = "runoob"; // 宣告并初始化字串 s

5 double pi = 3.14159; // 宣告了雙精度浮點型變數 pi

6 char x = 'x'; // 宣告變數 x 的值是字符 'x',

【編碼規范】

雖然可以在一行宣告多個變數,但是不提倡這個風格,逐一宣告每一個變數可以提高程式可讀性,

2、變數作用域

變數根據作用域可劃分為三種:

類變數(靜態變數: static variable):獨立于方法之外的變數,用 static 修飾,

實體變數(成員變數:member variable):獨立于方法之外的變數,不過沒有 static 修飾,

區域變數(lacal variable):類的方法中的變數,

1 public class Variable{

2 static int allClicks=0; // 類變數

3 String str="hello world"; // 實體變數

4

5 public void method(){

6 int i =0; // 區域變數

7 }

8 }

區域變數

方法或陳述句塊內部定義的變數,生命周期是從宣告位置開始到”}”為止,

在使用前必須先宣告和初始化(賦初值)

區域變數沒有默認值,所以區域變數被宣告后,必須經過初始化,才可以使用,

1 public static void main(String[] args) {

2 int i;

3 int j = i+5 ; // 編譯出錯,變數i還未被初始化

4 System.out.println(j);

5 }

修改為:

1 public static void main(String[] args) {

2 int i=10;

3 int j = i+5 ;

4 System.out.println(j);

5 }

實體變數

方法外部、類的內部定義的變數,

從屬于物件,生命周期伴隨物件始終,

如果不自行初始化,他會自動初始化成該型別的默認初始值(數值型變數初始化成00.0,字符型變數的初始化值是16位的0,布爾型默認是false

1 public class Test {

2 // 這個實體變數對子類可見

3 public String name;

4 // 私有變數,僅在該類可見

5 private double salary;

6 ...

7 }

靜態變數

使用static定義,

從屬于類,生命周期伴隨類始終,從類加載到卸載,(注:講完記憶體分析后我們再深入!先放一放這個概念!)

如果不自行初始化,他會自動初始化成該型別的默認初始值(數值型變數初始化成00.0,字符型變數的初始化值是16位的0,布爾型默認是false

1 public class Employee {

2 //salary是靜態的私有變數

3 private static double salary;

4 // DEPARTMENT是一個常量

5 public static final String DEPARTMENT = "開發人員";

6 public static void main(String[] args){

7 salary = 10000;

8 System.out.println(DEPARTMENT+"平均工資:"+salary);

9 }

10 }

3、常量

常量(Constant):初始化(initialize)后不能再改變值!不會變動的值,

所謂常量可以理解成一種特殊的變數,它的值被設定后,在程式運行程序中不允許被改變,

1 final 常量名=;

2 final double PI=3.14; final String LOVE="hello";

常量名一般使用大寫字符,

程式中使用常量可以提高代碼的可維護性,例如,在專案開發時,我們需要指定用戶的性別,此時可以定義一個常量 SEX,賦值為 "",在需要指定用戶性別的地方直接呼叫此常量即可,避免了由于用戶的

不規范賦值導致程式出錯的情況,

4、變數的命名規范

1. 所有變數、方法、類名:見名知意

2. 類成員變數:首字母小寫和駝峰原則 : monthSalary

3. 區域變數:首字母小寫和駝峰原則

4. 常量:大寫字母和下劃線:MAX_VALUE

5. 類名:首字母大寫和駝峰原則: Man, GoodMan

6. 方法名:首字母小寫和駝峰原則: run(), runRun()

運算子

運算子operator

Java 語言支持如下運算子:

算術運算子: +-*/%++--

賦值運算子 =

關系運算子: ><>=<===!= instanceof

邏輯運算子: &&||!

位運算子: &|^~ >><<>>> (了解!!!)

條件運算子 ?:

擴展賦值運算子:+=-=*=/=

1、二元運算子

兩個運算元,來看看我們小時候的數學運算;

1 public static void main(String[] args) {

2 int a = 10;

3 int b = 20;

4 int c = 25;

5 int d = 25;

6 System.out.println("a + b = " + (a + b) );

7 System.out.println("a - b = " + (a - b) );

8 System.out.println("a * b = " + (a * b) );

9 System.out.println("b / a = " + (b / a) );

10 }

整數運算

如果兩個運算元有一個為Long, 則結果也為long

沒有long時,結果為int,即使運算元全為shot,byte,結果也是int.

1 public static void main(String[] args) {

2 long a = 1231321311231231L;

3 int b = 1213;

4 short c = 10;

5 byte d = 8;

6

7 System.out.println((a+b+c+d)); //Long型別

8 System.out.println((b + c + d));//Int型別

9 System.out.println((c + d));//Int型別

10 }

浮點運算

如果兩個運算元有一個為double, 則結果為double.

只有兩個運算元都是?oat, 則結果才為?oat.

1 public static void main(String[] args) {

2 float a = 3.14565F;

3 double b = 3.194546464;

4 float c = 1.3123123F;

5

6 System.out.println(a+b); //double型別

7 System.out.println(b+c); //double型別

8 System.out.println(a+c); //float型別

9 }

關系運算子

回傳布林值!

2、取模運算

就是我們小學的取余; 5%3 2

其運算元可以為浮點數,一般使用整數,如:5.9%3.9=2.000000004

要點

負數%負數=負數;

負數%正數=負數;

正數%負數=正數;

1 public static void main(String[] args) {

2 System.out.println(9 % 4); //1

3 System.out.println(-9 % -4); //-1

4 System.out.println(-10 % 4); //-2

5 System.out.println(9 % -4); //1

6 }

【注:一般都是正整數運算,進行結果的判斷!】

3、一元運算子

自增(++)自減(--)運算子是一種特殊的算術運算子,在算術運算子中需要兩個運算元來進行運算,而自增自減運算子是一個運算元,分為前綴和后綴兩種,

1 public static void main(String[] args) {

2 int a = 3;

3 int b = a++; //執行完后,b=3,先給b賦值,再自增,

4 int c = ++a; //執行完后,c=5,先自增,再給b賦值

5 }

注意:java中的乘冪處理

1 public static void main(String[] args) {

2 int a = 3^2; //java中不能這么處理, ^是異或符號,

3 double b = Math.pow(3, 2);

4 }

Math類提供了很多科學和工程計算需要的方法和常數,特殊的運算都需要運用到方法!

4、邏輯運算子

邏輯與:&&&,邏輯或:|||,邏輯非:!,

【演示】

1 public static void main(String[] args) {

2 boolean a = true;

3 boolean b = false;

4 System.out.println("a && b = " + (a&&b));

5 System.out.println("a || b = " + (a||b) );

6 System.out.println("!(a && b) = " + !(a && b));

7 }

邏輯與和邏輯或采用短路的方式,從左到右計算,如果確定值則不會再計算下去,在兩個運算元都為true時,結果才為true,但是當得到第一個操作為false時,其結果就必定是false,這時候就不會再判斷

第二個操作了,

邏輯與只要有一個為false, 則直接回傳false.

邏輯或只要有一個為true, 則直接回傳true;

【演示】

1 public static void main(String[] args){

2 int a = 5;//定義一個變數;

3 boolean b = (a<4)&&(a++<10);

4 System.out.println("使用短路邏輯運算子的結果為"+b);

5 System.out.println("a的結果為"+a);

6 }

決議:

(&&) a<4 false b false

a++<10 a 5

5、位運算子

Java定義了位運算子,應用于整數型別(int),長整型(long),短整型(short),字符型(char),和位元組型(byte)等型別,位運算子作用在所有的位上,并且按位運算,

1 A = 0011 1100

2 B = 0000 1101

3 -----------------

4 A&b = 0000 1100

5 A | B = 0011 1101

6 A ^ B = 0011 0001

7 ~A= 1100 0011

右移一位相當于除2取商,

左移一位相當于乘2

【常見面試題:int a=2*8怎樣運算效率最快?】

決議:

1 public static void main(String[] args) {

2 System.out.println(2 << 3);

3 }

用移位運算 int a=2<<3;

a就是2乘以8 最后結果是16 這是最省記憶體 最有效率的方法

這個方法確實高效率的,我來解釋一下:

2的二進制是10 32位存盤器里面是0000 0000 0000 0010

左移三位后變成 0000 0000 0001 0000 也就是16

解釋一下,在系統中運算是以二進制的形式進行的,相比來說倆個二進制數相乘運算比移位運算慢一些,位操作是程式設計中對位模式按位或二進制數的一元和二元操作, 在許多古老的微處理器上, 位運算比

加減運算略快, 通常位運算比乘除法運算要快很多, 在現代架構中, 情況并非如此:位運算的運算速度通常與加法運算相同(仍然快于乘法運算). 詳細的需要了解計算機的組成原理!

6、擴展運算子

1 public static void main(String[] args) {

2 int a=10;

3 int b=20;

4

5 a+=b; // a = a + b

6

7 System.out.println(a+":"+b);

8 }

7、字串連接符

“+” 運算子兩側的運算元中只要有一個是字串(String)型別,系統會自動將另一個運算元轉換為字串然后再進行連接,

1 //字串

2 String s1="Hello 中文!";

3 String s2=1+""; //轉換成String

4 //int

5 int c = 12;

6 System.out.println("c=" + c);

8、三目條件運算子

三目條件運算子,語法格式:

1 x ? y : z

其中xboolean型別運算式,先計算x的值,若為true,則整個三目運算的結果為運算式y的值,否則整個運算結果為運算式z的值,

【演示】

1 public static void main(String[] args) {

2 int score = 80;

3 String type = score < 60 ? "不及格" : "及格";

4 System.out.println("type= " + type);

5 }

三元運算子在真實開發中十分的常見,大家可以多練習使用,之后我們會講解分支陳述句,可以利用三元運算子做到更加精簡代碼!便于理解!

9、運算子優先級

我們小學都學過:先加減,后乘除,所以優先級我們并不陌生,

當多個運算子出現在一個運算式中,誰先誰后呢?這就涉及到運算子的優先級別的問題,在一個多運算子的運算式中,運算子優先級不同會導致最后得出的結果差別甚大,

下表中具有最高優先級的運算子在的表的最上面,最低優先級的在表的底部,

大家不需要去刻意的記住,運算式里面優先使用小括號來組織!!方便理解和使用,不建議寫非常冗余的代碼運算!

1 public static void main(String[] args) {

2 boolean flag = 1<4*5&&122>3||'q'+3<5;

3 System.out.println(flag);

4 }

包機制

1、問題發現

存在這樣一個問題:當定義了多個類的時候,可能會發生類名的重復問題,

解決方式:在java中采用包機制處理開發者定義的類名沖突問題,

就好比我們平時的用電腦,一個檔案夾下不能存在同名的檔案,我們要是有這樣的需求,但是又不想換名字,我們就可以考慮使用新建一個檔案夾來存放!在我們的Java中也是這樣的,

【演示:重名檔案】

還有一個問題:我們平時在IDE中可以跑的檔案,用命令列就會報錯;

【演示:HelloWorldIDE和命令列】

這是為什么呢?

罪魁禍首正是代碼第一行:package com.kuang.demo01;

這就是Java中的包機制,使用package com.kuang.demo01;

就要求此份.java檔案必須保存在這樣一個目錄下,這樣Java解釋器才能找到它, IDEA中能正確運行,

你可以去Windows下的工程中查看,HelloWorld這個檔案必是在這樣的目錄結構下的,

2、包的作用

為了更好地組織類,Java 提供了包機制,用于區別類名的命名空間,

包的作用:

1、把功能相似或相關的類或介面組織在同一個包中,方便類的查找和使用,

2、如同檔案夾一樣,包也采用了樹形目錄的存盤方式,同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時呼叫兩個不同包中相同類名的類時,應該加上包名加以區別,因此,包可

以避免名字沖突,

3、包也限定了訪問權限,擁有包訪問權限的類才能訪問某個包中的類,Java 使用包(package)這種機制是為了防止命名沖突,訪問控制,提供搜索和定位類(class)、介面、列舉(enumerations)和注釋

annotation)等,

包陳述句的語法格式為:

1 package pkg1[pkg2[pkg3…]];

例如,一個Something.java 檔案它的內容:

1 package net.java.util;

2 public class Something{

3 ...

4 }

那么它的路徑應該是 net/java/util/Something.java 這樣保存的, package() 的作用是把不同的java 程式分類保存,更方便的被其他 java 程式呼叫,

一個包(package)可以定義為一組相互聯系的型別(類、介面、列舉和注釋),為這些型別提供訪問保護和命名空間管理的功能,

以下是一些 Java 中的包:

java.lang-打包基礎的類

java.io-包含輸入輸出功能的函式

開發者可以自己把一組類和介面等打包,并定義自己的包,而且在實際開發中這樣做是值得提倡的,當你自己完成類的實作之后,將相關的類分組,可以讓其他的編程者更容易地確定哪些類、介面、列舉和

注釋等是相關的,由于包創建了新的命名空間(namespace),所以不會跟其他包中的任何名字產生命名沖突,使用包這種機制,更容易實作訪問控制,并且讓定位相關類更加簡單,

3、創建包

創建包的時候,你需要為這個包取一個合適的名字,之后,如果其他的一個源檔案包含了這個包提供的類、介面、列舉或者注釋型別的時候,都必須將這個包的宣告放在這個源檔案的開頭,

包宣告應該在源檔案的第一行,每個源檔案只能有一個包宣告,這個檔案中的每個型別都應用于它,如果一個源檔案中沒有使用包宣告,那么其中的類,函式,列舉,注釋等將被放在一個無名的包

unnamed package)中,一般利用公司域名倒置作為報名;

例子:

www.baidu.com 包名:com.baidu.www

bbs.baidu.com 包名:com.baidu.bbs

blog.baidu.com 包名:com.baidu.blog

我們平時也可以按照自己的公司域名去寫,比如:com.kuangstudy.utils

4import 關鍵字

為了能夠使用某一個包的成員,我們需要在 Java 程式中明確匯入該包,使用 "import" 陳述句可完成此功能,

java 源檔案中 import 陳述句應位于 package 陳述句之后,所有類的定義之前,可以沒有,也可以有多

條,其語法格式為:

1 import package1[.package2…].(classname|*);

如果在一個包中,一個類想要使用本包中的另一個類,那么該包名可以省略,要是要用到其他包下的類,就必須要先導包!

如果兩個類重名,需要匯入對應的包,否則就需要寫出完整地址:

1 com.kuang.dao.Hello hello = new com.kuang.dao.Hello()

import 關鍵字引入,使用通配符 "*" , 匯入io包下的所有類!

1 import java.io.*;

【不建議這樣使用,因為會全域掃描,影響速度!】

使用 import 關鍵字引入指定類:

1 import com.kuang.Hello;

【注意】類檔案中可以包含任意數量的 import 宣告,import 宣告必須在包宣告之后,類宣告之前,

【編碼規范:推薦參考阿里巴巴開發手冊編程規范】

下載地址:阿里巴巴開發手冊

JavaDoc

1、簡介

JavaDoc是一種將注釋生成HTML檔案的技術,生成的HTML檔案類似于JavaAPI,易讀且清晰明了,在簡略介紹JavaDoc寫法之后,再看一下在Intellij Idea 中如何將代碼中的注釋生成HTML檔案,

javadocSun公司提供的一個技術,它從程式源代碼中抽取類、方法、成員等注釋形成一個和源代碼配套的API幫助檔案,也就是說,只要在撰寫程式時以一套特定的標簽作注釋,在程式撰寫完成后,通過

Javadoc就可以同時形成程式的開發檔案了,javadoc命令是用來生成自己API檔案的,使用方式:使用命令列在目標檔案所在目錄輸入javadoc +檔案名.java

先看一段樣例代碼:

1 /** 這是一個Javadoc測驗程式

2 * @author Kuangshen

3 * @version 1.0

4 * @since 1.5

5 * */

6 public class HelloWorld {

7

8 public String name;

9 /**

10 * @param name 姓名

11 * @return 回傳name姓名

12 * @throws Exception 無例外拋出

13 * */

14 public String function(String name) throws Exception{

15 return name;

16 }

17 }

稍微解釋一下:

/* / 結束,

@author 作者名

@version 版本號

@since 指明需要最早使用的jdk版本

@param 引數名

@return 回傳值情況

@throws 例外拋出情況

2、命令列生成Doc

1 -encoding UTF-8 -charset UTF-8

2 //解決GBK亂碼問題,在中間添加編碼設定

【演示:生成并查看檔案】

回顧及總結

這一章,我們學習了Java的基礎

安裝使用了IDEA

使用注釋

了解了Java的關鍵字

資料型別

怎么定義一個變數

怎么操作這些變數

如何生成一篇完整的檔案

...

以后這些東西在我們的生活中會天天遇到!

不積跬步,無以至千里;不積小流,無以成江海!

一生二,二生三,三生萬物!

一切一切都說明了基礎的重要性!

所以,簡單的東西,不要忽略,高手之間的區分,就在于這些細節方面的東西!

好啦,本期內容就分享到這里,我們下期見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/277376.html

標籤:其他

上一篇:Java EE資料持久化框架 • 【第1章 MyBatis入門】

下一篇:網路基本功:OSI模型、TCP/IP協議及味訓手、網路模式、主機網路配置

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more