Java: 数据类型
為什么80%的碼農都做不了架構師?>>> ??
? ? ? ? ? ? ? ? ? ??
核心:對事物的某種規范
? 前提:
1.JAVA:JAVA程序的運行是以堆棧的操作來完成的
??? ??堆棧以幀為單位保存線程的狀態。
??? ? JVM對堆棧只進行兩種操作:以幀為單位的壓棧和出棧操作。
理解:
2.數據類型:描述內存的一種機制(對內存位置的一個抽象表達方式)
????
??
?
內存抽象表現形式:
1.變量:計算機存儲數據的容器
變量的要素:類型(數據類型決定了變量的大小)、名稱、存數據
?
規范:
使用:
變量的使用:
步驟:聲明、賦值、使用
??? int?? a;????? a=1;
??? 類型? 變量名??? 值
?
規則:
--變量要先賦值后使用
--變量名不能重復,不能以數字開頭,不能出現非法字符
--變量名不能是關鍵字
--變量名中只能有_和$這兩個特殊符號
--變量名中只能由_、$、字母、數字組成,不能以數字開頭
--變量名是區分大小寫的
--如果一個變量名是由兩個單詞組成的,那么第1個單詞的第1個字母小寫,第2個單詞的第1個字母大寫。
?
核心:變量是變化的
?? ???變量確定了數據類型,確定內存的大小
2.數據類型:基本類型和引用數據類型。
描述:
基本類型:簡單數據類型是不能簡化的、內置的數據類型、由編程語言本身定義,它表示了真實的數字、字符和整數。
引用數據類型:Java語言本身不支持C++中的結構(struct)或聯合(union)數據類型,它的復合數據類型一般都是通過類或接口進行構造,類提供了捆綁數據和方法的方式,同時可以針對程序外部進行信息隱藏。
?
·數據存儲的特征:
? 基本類型的變量和對象的引用變量都是在函數的棧內存中分配
?
??? 基本類型只能用來存數據, 不能用來操作判斷數據
內存的開辟:在我們定義這個變量的時候。
釋放:
?????? 當超過變量的作用域后,java會自動釋放掉為該變量分配的內存空間
??? 特征:
?????? 存取速度比堆要快,僅次于寄存器,棧數據可以共享
?????? 存在棧中的數據大小與生存期必須是確定的,缺乏靈活性
?
引用類型:引用類型繼承于Object類(也是引用類型)都是按照Java里面存儲對象的內存模型來進行數據存儲的,使用Java內存堆和內存棧來進行這種類型的數據存儲,簡單地講,“引用”是存儲在有序的內存棧上的,而對象本身的值存儲在內存堆上的;
內存在什么時候開辟:在new的時候 開辟
釋放:
數組和對象在沒有引用變量指向它的時候,才變為垃圾,不能在被使用,但仍 然占據內存空間不放,在隨后的一個不確定的時間被垃圾回收器收走
? 特點:
??? 動態地分配內存大小,生存期也不必事先告訴編譯器
??? 在運行時動態分配內存,存取速度較慢
?
類別:
?基本類型:布爾類型和數值類型
???? 數值類型:定點類型和浮點類型
?
?引用類型:類、接口、數組
?
?
?
?
概念:
定點:定點的意思是把小數點定在末尾,小數點后沒有數字的數據,Java中通常把它們稱為整數;
常量:就是直接的值;
變量:放置常量的容器,除了放置常量之外,也可以給變量一個運算式,變量中的值是可變的;
1)???? 基本類型:
>>定點類型:
byte(字節類型) 一個byte 8位,取值范圍為-128~127,占用1個字節(-2的7次方到2的7次方-1)默認是0
short(短整型) 一個short 16位,取值范圍為-32768~32767,占用2個字節(-2的15次方到2的15次方-1)默認是0
int(整型)一個int 32位,取值范圍為(-2147483648~2147483647),占用4個字節(-2的31次方到2的31次方-1)默認是0
long(長整型)?? 一個long 64位,取值范圍為(-9223372036854774808~9223372036854774807),占用8個字節(-2的63次方到2的63次方-1)默認是0L或0l推薦用大寫;
?
描述:
我們希望它是byte型的,可以在數據 后加上大寫的 B:35B,表示它是byte型的,同樣的35S表示short型,35L表示long型的,表示int我們可以什么都不用加,但是如果要表示long型 的,就一定要在數據后面加“L”。
核心:數據類型確定的時候,數據的存儲如果超出范圍會編譯出錯
?
字符類型:char
Java中一個字符(char)表示Unicode字符集中的一個元素。Unicode字符由16位組成,因此,有(65535)個不同的字符可用,范圍從’u0000’到’uFFFF’(u告訴編譯器你在用兩個字節[16位]字符信息表示一個Unicode字符)。用于存放字符的數據類型,占用2個字節,采用unicode編碼,它的前128字節編碼與ASCII兼容,字符的存儲范圍在\u0000~\uFFFF,在定義字符型的數據時候要注意加' ',比如 '1'表示字符'1'而不是數值1。
?
?
>>浮點類型:
float?(單精度浮點型)?一個float?32位,占用4個字節,?例3.2F,默認是0.0f?,?3.402823e+38?~?1.401298e-45(e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負45次方)。
double?(雙精度浮點型)?一個dobule?64位??占用8個字節,?例3.2,?默認是0.0,?1.797693e+308~?4.9000000e-324?占用8個字節?
?
注:double型比float型存儲范圍更大,精度更高,所以通常的浮點型的數據在不聲明的情況下都是double型的。
?????如果要表示一個數據是float型的,可以在數據后面加上“F”。?
?????浮點型的數據是不能完全精確的,所以有的時候在計算的時候可能會在小數點最后幾位出現浮動,這是正常的。?
基本類型賦值時的特性:
1.當整數類型的數據使用字面量賦值的時候,默認值為int類型,就是直接使用0或者其他數字的時候,值的類型為int類型,
????????????所以當使用????longa?=?0這種賦值方式的時候,JVM內部存在數據轉換。
2.浮點類型的數據使用字面量賦值的時候,默認值為double類型,就是當字面兩出現的時候,JVM會使用double類型的數據類型。
3.從JDK?5.0開始,Java里面出現了自動拆箱解箱的操作,基于這點需要做一定的說明:
2)引用類型:new出來的
?? Random、Scanner、集合、數組、自己定義的類、String等
?? Student s???? =?? new Student();
??? 引用?????? 對象
?
數據交換特征:
交換的本質
??? 基本類型只在棧中開空間
??? 引用類型既要在棧中開空間也要在堆中開空間
?
·默認值:
1.變量沒有默認值 int a; System.out.print(a) //報錯
2.數組有默認值:int[] 0 double[] 0.0 char[] AscII為0的字符3.類中的
3.屬性:有默認值int 0 double 0.0 String null 自定義的類型:null
?
>>類型轉換:
類型轉換:
--自動類型轉換(將小數據放入到大空間中,自動轉換)
--強制轉換:目標類型 變量名=(目標類型)其他類型的變量
??? int a=(int)5.0;
一、自動轉換:
??? ?? 1.基本類型:類型相似? ,小的往的大
?????? ?? int a = 9;
?????? ?? double b = a;
?
?????? ?? String a ="123"
?????? ?? int? b = (int)a;錯誤
??? ? 2.引用類型:繼承關系? 子類轉父類
??? ??? 子類:小的類型
??? ??? 父類:大的類型
?
?????? Son son =new Son();
?????? Father f = son;
??? ?? 總結:父類引用指向子類對象,父類引用
??? ?? 只能調用自己的屬性和方法,不能調用子類
??? ?? 的屬性和方法(子類的特征被隱藏了)???
?
??? 二、強制轉換:???
?????????? 1.基本類型 :類型相似? 大的往小的轉
?????? double a = 9.9;
?????? int b = (int)a;? //b=9
??? ?? 2.引用類型:繼承關系? 父類轉子類
??? ???? Father f? =new Father();
??? ???? Son son = (Son)f;??
??? ?? 3.怎么樣判斷父類引用中的真實對象?
?????? instanceof
?????? Father f = new Son();
?????? System.out.println(f instanceof
?
Son);//ture
?????? System.out.println(f instanceof
?
Son1);//false
?
數據算法:
1.? 運算符:
算術運算符:
1)賦值運算符=:它的作用是將右邊的值復制一份到左邊的空間中
?
去。
2) -,*,/,%(整除取余)-,*,/:運算數據只能是數字類型
?
的。
3)?????????? >>進行數字相加
?????? 5+6==11???
?????? 1.1+2.1==3.2
?????? 3+1.5==4.5//一個窮人和一個富人的結果是富
?
人
?????? int t=5.5+1;//錯誤
?????? double c=5.5+2;//正確
?
??????
?????? >>+:當與字符串相加時,起連接作用
?????? "abc"+1=="abc1"
?????? "12"+3+5=="123"+5=="1235"
?????? "12"+2*3=="12"+6=="126"? 126
4)/:
?????? 5/2==2(窮人與窮人的結果還是窮人)
?????? 5.0/2==2.5(窮人與富人的結果是富人)
?????? double a=5/2;//2.0(小數據可以放入大空間
?
內)
?????? int b=5/2.0;//報錯(大數據不能放入小空間
?
內)
5)%(取模,整除取余)
?????? 5%2==1
?????? 2.2%1==0.2
表達式:運算符與數據的組合就是一個表達式
?????? a+b;
?????? int a=5;
?????? a>b;
關系運算符:主要是用來進行比較大小,或相等
?>,>=,<,<=,==,!=?
比較后的結果是:真(true),假(false)
--boolean flag=true
?
邏輯運算符:&&?? ||? !
?
優先級:
()??? !??? 算術運算符?? 關系運算符? &&?? ||??? =
?
語法結構:順序結構、條件結構、邏輯結構
條件結構:
1)? if(表達式){
??? //代碼
???? }
????
??? if(flag)
?
??? }else{
?
??? }
if-else if-...-else
嵌套條件結構:
特點:它既能做等值判斷,又可以做區間判斷
2)switch(變量){
??? case 值1:
?????? 代碼塊;
?????? break;
??? case 值2:
?????? 代碼塊
?????? break;
??? case 值3:
?????? 代碼塊;
?????? break;
??? default:
?????? 代碼塊;
?????? break;
?
}
?
循環結構:
要素: 循環變量初始化、條件判斷、循環體內改變循環變量。
特征:重復著做相同或相似的事,并且有變化的地方一定要有規律
?
,否則不能使用循環。
?
一,while循環
??? 循環變量初始化
??? while(條件判斷){
?????? 循環體;
?????? 循環體內改變循環變量;
??? }
?
二,do-while循環
??? do{
?????? 循環體;
?????? 循環體內改變循環變量;
??? }while(條件判斷);
?
如果第條件滿足時,while和do-while執行的結果是一樣的
但如果條件不滿足時,while一次都不會執行,而do-while至少會
?
執行一次
?
while和do-while適合做無限次數的循環
?
三,for循環
??? for(循環變量初始化;條件判斷;循環體內改變循環變
?
量){
?????? 循環體;
??? }
???
for適合做有限次數的循環
?
前提:在循環中
break中斷循環
break一般都是和if一起來使用
?
continue關鍵字的使用
繼續:中止本次循環體的執行,繼續下一次循環
在使用時,一般都要和if結構一起使用。否則沒有意義。
?
int b=a++;++放在后面,表示先使用a的值,a再加1
int d=++c;++放在前面,表示先將c+1,再將值賦給d
轉義字符:
Java中的常用轉義字符見表2-1
?
?
?
特點:只能做等值判斷,它不能做區間判斷
????? 探測類型:int char
\r?? :回車
\n?? :換行
\t?? :TAB鍵
\t?? \n的用法:只可以在雙引號中出現
?
\t??? 主要作用對齊格式?? tab?? 8字符寬度
轉載于:https://my.oschina.net/wii01/blog/983642
總結
以上是生活随笔為你收集整理的Java: 数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ STL unique , uni
- 下一篇: js记录