最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

Java零基礎教程視頻(零基礎學Java必刷,適合Java 0基礎,Java初學

2023-05-31 10:55 作者:山藥當當  | 我要投稿

整理了數(shù)據類型相關的學習筆記,分享給大家

數(shù)據類型

數(shù)據類型:決定了變量在內存中的空間大小。不同的數(shù)據類型,在內存中占用空間大小不同。 為什么需要學習數(shù)據類型?為了定義變量。

Java數(shù)據類型概述

Java語言包括兩種數(shù)據類型:

●基本數(shù)據類型

○整數(shù)類型:包括byteshort、intlong四種類型,用于表示整數(shù)。

○浮點類型:包括floatdouble兩種類型,用于表示帶小數(shù)點的數(shù)值。

○布爾類型:boolean類型,只有true和false兩個值,用于表示邏輯值。

○字符類型:char類型,用于表示單個字符,它是基于Unicode編碼的。

●引用數(shù)據類型

○類、接口、數(shù)組、枚舉等。(或者你也可以這樣記:除了8種基本數(shù)據類型之外,其他都是引用數(shù)據類型,包括String。)

現(xiàn)階段重點研究基本數(shù)據類型,以后再說引用數(shù)據類型。

下面詳細介紹一下每種類型的特點和使用方法:

1整數(shù)類型:

●byte類型:占用1個字節(jié),范圍是-128到127,常用于存儲小整數(shù)。 (byte類型的1:00000001)

●short類型:占用2個字節(jié),范圍是-32768到32767,常用于存儲中等大小的整數(shù)。 (short類型的1:00000000 00000001)

●int類型:占用4個字節(jié),范圍是-2147483648到2147483647,是Java中最常用的整數(shù)類型。

●long類型:占用8個字節(jié),范圍是-9223372036854775808到9223372036854775807,用于存儲極大或極小的整數(shù)。

為什么設計出這么多整數(shù)?目的是合適的數(shù)據選擇合適的類型,可以節(jié)省空間,但實際開發(fā)中不必斤斤計較,大部分采用int。另外,如果數(shù)據過大,超過了long,可以使用BigInteger,它就不是基本數(shù)據類型了,屬于引用數(shù)據類型。后面再說。

2浮點類型:

●float類型:占用4個字節(jié),范圍是1.4E-45到3.4028235E38,精度為7位小數(shù),常用于科學計算和工程計算。

●double類型:占用8個字節(jié),范圍是4.9E-324到1.7976931348623157E308,精度為15位小數(shù),是Java中最常用的浮點類型。 (如果超出了double,可以使用BigDecimal,同樣它也是一種引用數(shù)據類型。

3布爾類型:

●boolean類型:只有兩個值,true和false,用于表示邏輯值,例如判斷語句、循環(huán)語句等。

4字符類型:

●char類型:占用2個字節(jié),用于表示單個字符,例如'A'、'B'、'C'等,也可以表示Unicode編碼中的任意字符。

這是一個直觀的列表:

關于默認值:Java語言中變量必須先聲明,再賦值,才能使用。對于局部變量來說必須手動賦值,而對于成員變量來說,如果沒有手動賦值,系統(tǒng)會自動賦默認值。例如:

public class DefaultValue {

??// 成員變量有系統(tǒng)默認值

??static int i;

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

????System.out.println(i); // 0

????// 成員變量沒有系統(tǒng)默認值

????int k;

????System.out.println(k); // 編譯報錯

??}

}

注意:對于引用數(shù)據類型來說,默認值null,例如:

public class DefaultValue {

??static String name;

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

????// String是引用數(shù)據類型。

????System.out.println(name); // null

??}

}

整數(shù)型詳解

整數(shù)型字面量的四種表示形式

Java中整數(shù)型字面量有以下四種表示形式:

1十進制表示法:以數(shù)字0-9組成的常數(shù),默認為十進制表示法。

例如:int a = 10;

2二進制表示法:以0b或0B開頭的常數(shù),由0和1組合而成。

例如:int b = 0b101;

3八進制表示法:以0開頭的常數(shù),由數(shù)字0-7組成。

例如:int c = 012;

4十六進制表示法:以0x或0X開頭的常數(shù),由0-9和A-F(大小寫均可)組成。

例如:int d = 0x1F;

整數(shù)型字面量默認當做int處理

Java中整數(shù)型字面量默認被當做int類型來處理,如果要表示long類型的整數(shù),需要在字面量后面加上'L'或'l'標記。例如,下面是表示int和long類型整數(shù)的字面量的示例:

int x = 10; // 10是一個int類型的字面量

long y = 10L; // 10L是一個long類型的字面量

需要注意的是,大小寫字母'L'和'l'的使用沒有區(qū)別,但是容易被誤解為數(shù)字1,因此建議使用大寫字母。 請看以下代碼有什么問題嗎?

long z = 2147483648;

編譯報錯,原因是2147483648被當做int類型處理,而該數(shù)字本身已經超出了int最大值,如何修改?

long z = 2147483648L;

自動類型轉換

在Java中,對于基本數(shù)據類型來說,小容量是可以直接賦值給大容量的,這被稱為自動類型轉換。對于數(shù)字類型來說大小關系為:byte < short < int < long < float < double。

下面是一些自動類型轉換的示例:

double a = 10;???// 將int類型自動轉換為double類型

int b = 100;

float c = b;????// 將int類型自動轉換為float類型

long d = b;?????// 將int類型自動轉換為long類型

byte e = 10;

short f = e;????// 將byte類型自動轉換為short類型

需要注意的是,自動類型轉換只適用于基本數(shù)據類型之間的轉換。

強制類型轉換

強制類型轉換:Java中大容量是無法直接轉換成小容量的。因為這種操作可能會導致精度損失,所以這種行為交給了程序員來決定,當然這種后果自然是程序員自己去承擔。因此在代碼中需要程序員自己親手加上強制類型轉換符,程序才能編譯通過。 以下程序編譯器就會報錯:

int num = 10L;

解決方案兩個:要么把L去掉,要么使用強制類型轉換符,例如:

int num = (int)10L;

這樣編譯器就能編譯通過了。

強制類型轉換時,底層二進制是如何變化的?原則:砍掉左側多余的二進制。例如以上程序的二進制變化是這樣的: long類型的10對應的二進制:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001010 強制轉換為int類型的10是這樣的:00000000 00000000 00000000 00001010

因此,強制類型轉換時,精度可能會損失,也可能不會損失,這要看具體的數(shù)據是否真正的超出了強轉后的類型的取值范圍。如下圖:水可能溢出,也可能不會溢出,這要看真實存放的水有多少?。?!

如果你理解了強制類型轉換,那么下面這個程序的執(zhí)行結果可以推算出來嗎?

byte b = (byte)150;

int類型的150的補碼(150是正數(shù):原碼反碼補碼一樣):00000000 00000000 00000000 10010110 強轉砍掉前三個多出的字節(jié),結果是:10010110(這個是最終存儲在計算機中的,注意:存儲在計算機中的是補碼) 將以上補碼10010110推算出原碼:11101010(結果是:-106) 因此int類型的150強轉為byte類型之后,結果是-106

當整數(shù)字面量沒有超出byte的范圍

在Java中有這樣一個規(guī)定,當整數(shù)型字面量沒有超出byte的范圍:可以直接賦值給byte類型的變量。

byte b = 127; // 這是允許的

很顯然,這是一種編譯優(yōu)化。同時也是為了方便程序員寫代碼。 如果超出了范圍,例如:

byte b = 128; // 編譯報錯

這樣就會報錯,需要做強制類型轉換,例如:

byte b = (byte)128;

它的執(zhí)行結果你知道嗎?可以嘗試推算一下,最終結果是:-128 在整數(shù)類型中,除了byte有這個待遇之外,short同樣也是支持的。也就是說:如果整數(shù)型字面量沒有超出short取值范圍時,也是支持直接賦值的。

兩個int類型做運算

兩個int類型的數(shù)據做運算,最終的結果還是int類型:

int a = 10;

int b = 3;

int c = a / b;?

System.out.println(c); // 3

多種數(shù)據類型混合運算

在Java中,多種數(shù)據類型混合運算時,各自先轉換成容量最大的類型,再做運算。

byte a = 100;

int b = 200;

long c = 300L;

long d = a + b + c;

你可以測試一下,如果d變量是int類型則編譯器會報錯。

編譯器的小心思

以下程序編譯通過:

byte x = 10 / 3;

為什么編譯通過?這種情況下都是字面量的時候,編譯器可以在編譯階段得出結果是3,而3沒有超出byte取值范圍??梢灾苯淤x值。 以下程序編譯報錯:

int a = 10;

int b = 3;

byte x = a / b;

為什么編譯失?。窟@種a和b都是變量的情況下,編譯器是無法在編譯階段得出結果的,編譯器只能檢測到結果是int類型。int類型不能直接賦值給byte類型變量。 怎么解決?要么把x變量聲明為int類型,要么強制類型轉換,例如:

int a = 10;

int b = 3;

byte x = (byte)(a / b);

這里需要注意的是:注意小括號的添加,如果不添加小括號,例如:

int a = 10;

int b = 3;

byte x = (byte)a / b;

這樣還是編譯報錯,因為只是將a強轉為byte了,b還是int。byte和int混合運算,結果還是int類型。

浮點型詳解

浮點型類型包括:

●單精度(float):4字節(jié)(32位)

●雙精度(double):8字節(jié)(64位),精度較高,實際開發(fā)中double用的多。

浮點型字面量默認被當做double

Java中,浮點型字面量默認被當做double類型,如果要當做float類型,需要在數(shù)字后面添加 F 或 f。

float f = 3.0; // 編譯報錯

報錯原因是:3.0默認被當做double類型,大容量無法直接賦值給小容量。如何修改:

float f = 3.0F;

另外,可以通過以下程序的輸出結果看到,double精度高于float:

double d = 1.5656856894;

System.out.println(d);


float f = 1.5656856894F;

System.out.println(f);

浮點型數(shù)據兩種表示形式

第一種形式:十進制

double x = 1.23;

double y = 0.23;

double z = .23;

第二種形式:科學計數(shù)法

double x = 0.123E2; // 0.123 * 10的平方

double y = 123.34E-2; // 123.34 / 10的平方

浮點型數(shù)據存儲原理

以單精度float為例:

符號位:0表示整數(shù)。1表示負數(shù)。 指數(shù)位:比如小數(shù)0.123E30,其中30就是指數(shù)。表示0.123 * 10的30次冪。所以也有把指數(shù)位叫做偏移量的。最大偏移量127。 尾數(shù)位:浮點數(shù)的小數(shù)部分的有效數(shù)字。例如:0.00123,那么尾數(shù)位存儲123對應的二進制。

從浮點型數(shù)據存儲原理上可以看到,二進制中的指數(shù)位決定了數(shù)字呈指數(shù)級增大。因此float雖然是4個字節(jié),但卻可以表示比long更大的數(shù)值。因此float容量比long的容量大。

使用浮點數(shù)的注意事項

計算機的二進制位有限,現(xiàn)實世界中有無限循環(huán)的數(shù)字,例如3.333333333333333333..........,因此計算機這種有限資源去存儲無限數(shù)據是不可能的,所以浮點型數(shù)據在底層真實存儲的時候都是采用近似值的方式存儲的。尾數(shù)位越多精度越高。 實際上包括0.1這樣簡單的數(shù)字,浮點型數(shù)據也是無法精確存儲的。(想了解更多,請查看相關文獻) 這樣就會有一個問題,請看以下程序:

double x = 6.9;

double y = 3.0;

double z = x / y;

System.out.println(z);

它的執(zhí)行結果是:2.3000000000000003 并不是2.3 因此一旦有浮點型數(shù)據參與運算得出的結果,一定不要使用“==”與其它數(shù)字進行“相等比較”。例如,以下代碼就存在問題:

double x = 6.9;

double y = 3.0;

double z = x / y;

if(z == 2.3){

??System.out.println("相等");

}

執(zhí)行發(fā)現(xiàn)并沒有輸出:相等。 原因是判斷條件有問題。 如果確實需要進行比較,可以將代碼修改為如下:

double x = 6.9;

double y = 3.0;

double z = x / y;

if(z - 2.3 < 0.000001){

??System.out.println("相等");

}

也就是說,如果這兩個數(shù)字之間的差小于0.000001,我就認為是相等的。 因此:如果有浮點型數(shù)據參與運算得出了結果,不要拿著這個結果和另一個數(shù)據進行“==”相等比較。

字符型詳解

char:字符型,占用2個字節(jié)。取值范圍065535。和short(-3276832767)所表示的個數(shù)相同。但char可以表示更大的整數(shù)。 字符型字面量采用單引號括起來,例如:'a'、'A'、'0'、'國' 等。 字符型字面量只能是單個字符,不能是多個字符。 Java中char類型可以存儲一個漢字。

char c1 = 'A';

char c2 = 'a';

char c3 = '0';

char c4 = '國';

char c5 = '¥';


// 編譯報錯

//char c6 = 'ab';

再看下面程序:

char x = '';

編譯報錯。由于單引號中沒有任何字符,因此無法給 c 賦值,所以會導致編譯報錯,提示無效的字符字面量。 如果要賦給 c 一個空的字符,可以使用轉義字符 '\u0000' 來表示。如下所示:

char c = '\u0000'; // 賦給 c 一個空字符

注意:空字符與空格字符完全是兩碼事。

轉義字符

Java 中的轉義字符是一些在字符串中具有特殊含義的字符序列,它們以反斜線(\)開始。以下是 Java 中的一些常用轉義字符:

●\t: 表示制表符,相當于按下 Tab 鍵

●\n: 表示換行符

●\r: 表示回車符

●": 表示雙引號(")

●': 表示單引號(')

●\: 表示反斜線(\)本身

這些轉義序列可以用于不同的 Java 數(shù)據類型,如字符串、字符等。在 Java 編程中,轉義字符可以幫助我們在字符串中表示一些特殊的字符,例如制表符、換行符、引號等。例如,下面的代碼演示了如何使用轉義字符來創(chuàng)建包含制表符和換行符的字符串:

String str = "Hello\tworld\nHow are you?";

System.out.println(str);

這個例子中,\t 和 \n 分別表示字符串中的制表符和換行符。輸出結果是:

Hello??world

How are you?

字符編碼的理解

字符編碼(Character encoding)是計算機系統(tǒng)中使用的一種將字符集中的字符轉換為二進制數(shù)據的方式,從而方便計算機的存儲和傳輸。在計算機內部,所有的信息都是以二進制形式存儲和處理的,因此字符編碼是將字符和二進制數(shù)據之間的轉換方式。每一個字符在計算機中都有其對應的二進制代碼。不同的字符編碼可以采用不同的編碼方式將字符映射到二進制代碼,最終這些二進制代碼被存儲在計算機內部。 在早期計算機系統(tǒng)中,字符編碼主要采用的是 ASCII 編碼,采用1個字節(jié)編碼。最多可以表示256個字符。(實際上ASCII碼表只用了128個。) 以下是ASCII碼表:

作為程序員,我們應當記住以下幾個常用字符的ASCII碼:

●a 對應ASCII碼 97(b是98,以此類推)

●A 對應ASCII碼 65(B是66,以此類推)

●0 對應ASCII碼 48(1是49,以此類推)

什么是解碼?什么是編碼?亂碼是如何產生的?

在計算機系統(tǒng)中,解碼(Decoding)和編碼(Encoding)是兩個常用的概念,分別表示將二進制數(shù)據轉換為字符和將字符轉換為二進制數(shù)據。 編碼是將字符轉換為二進制數(shù)據的過程。解碼是將二進制數(shù)據轉換為字符的過程。例如:

●'a' ---------按照ASCII碼表編碼-----------> 01100001

●01100001 --------按照ASCII碼表解碼------------> 'a'

亂碼是指在字符編碼和解碼的過程中,由于編碼和解碼所采用的字符集不一致,或者編碼和解碼所采用的字符集不支持某些字符,導致最終顯示的字符與原始字符不一致。為了避免亂碼的問題,我們需要統(tǒng)一使用一個字符集,并且在進行字符編碼和解碼時要保持一致。

常見的字符編碼

常見的字符編碼方式如下:

1、ASCII 編碼(American Standard Code for Information Interchange:美國信息交換標準編碼):采用1個字節(jié)編碼,包括字母、數(shù)字、符號和控制字符等。

2、Latin-1編碼(ISO 8859-1),采用1個字節(jié)編碼。該編碼方式是為了表示歐洲語言(如荷蘭語、西班牙語、法語、德語等)中的字符而設計的,共支持 256 個字符。

3、ANSI 編碼(American National Standards Institute:美國國家標準協(xié)會):采用1個字節(jié)編碼,支持英文、拉丁文等字符。

4、Unicode 編碼:可表示所有語言的字符。采用了十六進制表示,占用 2 個字節(jié)或 4 個字節(jié),最多可表示超過一百萬個字符。 (使用這種方式是有點浪費空間的,例如英文字符'a'其實采用一個字節(jié)存儲就夠了。)

5、UTF-8 編碼(Unicode Transformation Format,8-bit):基于 Unicode 編碼的可變長度字符編碼,能夠支持多語言和國際化的需求,使用 1~4 個字節(jié)來表示一個字符,是目前 Web 開發(fā)中最常用的字符編碼方式。 (一個英文字母1個字節(jié),一個漢字3個字節(jié)。)

6、UTF-16 編碼:基于 Unicode 編碼的可變長度字符編碼,使用 2 或 4 個字節(jié)來表示一個字符,應用于很多較早的系統(tǒng)和編程語言中。 (一個英文字母2個字節(jié)。一個漢字4個字節(jié)。)

7、UTF-32編碼:基于Unicode編碼的固定長度字符編碼,其特點是每個字符占用4個字節(jié)。

8、GB2312 編碼(?。菏侵袊鴩覙藴实暮嗴w中文字符集,使用 2 個字節(jié)來表示一個漢字,是 GBK 編碼的前身。

9、GBK 編碼(Guo Biao Ku)(中):是針對中文設計的一個漢字編碼方式,使用 2 個字節(jié)來表示一個漢字,能夠表示中國內地的所有漢字。

10、GB18030編碼(大):是中國國家標準GB 18030-2005《信息技術 中文編碼字符集》中規(guī)定的字符集編碼方案,用于取代GB2312和GBK編碼。

11、Big5 編碼(大五碼):是臺灣地區(qū)的繁體中文字符集,使用 2 個字節(jié)來表示一個漢字,適用于使用繁體中文的應用場景。

每種編碼方式都有其特點和適用場景。在進行軟件開發(fā)、網站開發(fā)和數(shù)據存儲時,需要根據實際情況選擇適合的編碼方式。

注意:Java語言中的字符char和字符串String,都是采用Unicode編碼。

Unicode碼表

Unicode碼表示的一部分:

在Java程序中也可以使用Unicode碼來指定char變量的值:

char c = '\u0041';

輸出結果是:A

網絡上也有很多在線轉碼工具,例如:http://www.jsons.cn/unicode/

char參與的運算

Java中允許將一個整數(shù)賦值給char類型變量,但這個整數(shù)會被當做ASCII碼值來處理,例如:

char c = 97;

System.out.println(c);

會將97當做ASCII碼值,該碼值轉換char類型是字符'a',所以輸出結果是:a 但需要特別注意的是,這個碼值有要求,不能超出char的取值范圍。如果是這樣的,編譯會報錯:

// 編譯報錯

char c = 65536;

所以結合之間的byte和short,可以有這樣一個結論(記住):只要沒有超出byte short char的取值范圍,是可以直接賦值給byte short char類型變量的。例如:

byte b = 1;

short s = 1;

char c = 1;

再看以下程序輸出結果:

System.out.println('a' + 1);

輸出結果是:98。這是因為1是int類型,所以'a'會被轉換為int類型。 再看以下程序輸出結果:

char c = 'a' + 1;

System.out.println(c);

輸出結果是:b。這是因為c的類型是char類型。 再看以下程序輸出結果:

byte b = 1;

short s = 1;

char c = 1;

short num = b + s + c;

編譯報錯:第4行的等號右邊是int類型,int類型無法賦值給short類型的變量。 這里有一個結論需要記?。篵yte short char混合運算時,各自會先轉換成int再做運算。

布爾型詳解

關于布爾型的值

Java中的布爾型,關鍵字:boolean 只有兩個值:true、false。沒有1和0這一說。 true表示真,false表示假。

布爾值通常使用在哪

Java中的布爾值(boolean)通常用于表示一些邏輯上的真假值,并在程序中進行邏輯控制。以下是布爾值在Java中常用的場景:

1、條件語句,if和while等語句中需要進行條件判斷時,通常使用布爾類型的變量作為條件表達式,根據條件的真假情況執(zhí)行不同的代碼邏輯。

2、邏輯運算,布爾值是邏輯運算的基礎,Java中的邏輯運算符有:與(&&)、或(||)、非(!)等,常用于對布爾值的運算和操作。

3、方法返回值,可以將布爾值作為方法的返回值,表示某種條件是否滿足。

4、開關標記,布爾變量在程序中常用于開關標記的判斷和設置,例如,當某個功能開啟或關閉時,我們可以用布爾類型的變量來表示。

綜上所述,Java中的布爾值在程序中有很多用途,可以在很多場景下提供非常便利的邏輯控制和判斷能力。

下面是一個使用布爾值的簡單案例:

boolean gender = true;

if(gender){

??System.out.println("男");

}else{

??System.out.println("女");

}

基本數(shù)據類型轉換規(guī)則總結

1、八種基本數(shù)據類型,除布爾型之外,其它類型都可以互相轉換。

2、小容量轉換為大容量,叫做自動類型轉換,容量從小到大的排序為:

a、byte < short(char) < int < long < float < double

b、注意char比short可以表示更大的整數(shù)

3、大容量轉換為小容量,叫做強制類型轉換,需要加強制類型轉換符才能編譯通過,運行時可能損失精度,也可能不會損失。

4、整數(shù)字面量如果沒有超出byte short char的取值范圍,可以直接賦值給byte short char類型的變量。

5、byte short char混合運算,各自先轉換為int再做運算。

6、多種類型混合運算,各自先轉換成容量最大的類型,再做運算。

變量和數(shù)據類型的作業(yè)題

1、請定義合理的變量用來存儲個人信息(姓名、年齡、性別、聯(lián)系電話),并編寫程序定義這些變量,給變量賦值,并打印輸出。輸出效果如下:

2、有兩個變量a和b,a變量中存儲的數(shù)據100,b變量中存儲的數(shù)據200,請編寫程序交換兩個變量中的數(shù)據。讓a變量存儲200,讓b變量存儲100。并且計算兩個int類型數(shù)據的和,要求最終輸出200+100=300的效果。

3、請分析以下程序中哪些是可以編譯通過的,哪些是報錯的

short s = 100;

s = s - 99;


byte b = 100;

b = b + 1;


char c = 'a'

int i = 20;

float f = .3F;

double d = c + i + f;


byte b = 11;

short s = 22;

short x = b + s;

Java零基礎教程視頻(零基礎學Java必刷,適合Java 0基礎,Java初學的評論 (共 條)

分享到微博請遵守國家法律
余干县| 南京市| 嘉定区| 名山县| 青冈县| 格尔木市| 浙江省| 吉木萨尔县| 靖西县| 通辽市| 余庆县| 焉耆| 黄陵县| 砀山县| 太和县| 遂川县| 九龙坡区| 城市| 理塘县| 称多县| 晋城| 明星| 广汉市| 清苑县| 霍林郭勒市| 宝应县| 芦溪县| 兴化市| 辽阳县| 田阳县| 景宁| 玛曲县| 乳源| 贵德县| 额尔古纳市| 皋兰县| 久治县| 嘉义市| 天水市| 乌审旗| 沅江市|