標籤:階層 stat byte 過程 zed lang 依次 數字 instance
前言:
Java面試集合(六)
的回顧,對於final
可以修飾常量,方法,和類,一旦常量定義好後就不可改變,而方法,用final
來修飾方法,方法不可重載,繼承,重寫,final
用來修飾類,該類不能被繼承。
抽象abstract
,不能夠有對象,即不能進行執行個體化,但又構造方法,在抽象修飾類時,這個抽象類別,不一定有抽象方法,但是在類中有抽象方法,那麼這個類就一定是抽象類別。
在抽象類別中的所有抽象方法,子類一旦繼承抽象類別,就要重寫父類(即抽象類別)中的所有抽象方法,但是連子類都是抽象類別就不用,如果該子類繼承了抽象的父類,子類也是抽象類別,就不用。
抽象方法是沒有方法體的,因為抽象方法是抽象功能的,在子類中實現,抽象方法可以被重載,即參數等不同。抽象方法不能再用static/final/private
來修飾。
介面interface
的抽象方法用public abstract
來修飾,屬性用public static final
來修飾。
介面是沒有執行個體化對象的,也沒有構造方法
內部類的分類為,方法的內部類,成員的內部類,靜態內部類,匿名內部類。
包的基礎(package
)和記憶體回收機制基礎。
1. Object對象
所有類的父類Object
,因為任何一個類都是直接或者間接的繼承Object
類,都是Object
的子類,Object
是類階層的根類,存在java.lang.Object
中。
getClass
可以擷取對象的實際類型
toString
可以返回對象的地址
equals
可以判斷兩個對象是否相等
對象和類的關係進行判斷:instanceof
class A {}class B extends A {}interface D{}class C extends B implements D {}
B b = new C();b instanceof A --- trueb instanceof B --- trueb instanceof C --- true b instanceof D --- true
構造方法:public Object()
finalize()
方法:java的記憶體回收時機
Object的toString()
方法:返回的是對象的字串形式
Object的equals()
方法:比較兩個對象是否相等
複習:
- 二進位:
以0b/0B作為開頭
(0~1,滿2進1)
- 八進位:
以0作為開頭
(0~7,滿8進1)
- 十進位:
沒有特殊標識
(0~9,滿10進1)
- 十六進位:
以0X/0x作為開頭
(09,af,滿16進1)
進位間的轉化
- 十進位轉二進位:不斷除以2,然後取餘數
- 二進位轉十進位:從最低位依次乘以2的位次次冪,然後求和
同理:
十進位轉其他進位:除以對應的進位數,然後取餘數其他進位轉十進位:從最低位依次開始,按位次乘以進位的位次次冪,然後求和
二進位轉八進位,也是從低位開始,每三位二進位為一組,產生一個八位元字,最高位不足三位,就補0,湊齊三位即可。
口訣:三變一
八進位轉二進位,每一位八位元都會產生三位位元字,不足三位就補0即可。
口訣:一變三
同理
二進位轉十六位進位:口訣為四變一十六位進位轉二進位:口訣為一變四
Bin為二進位,Oct為八進位,Dec為十進位,Hex為十六進位
2. String類
在 Java
中的字串屬於對象,那麼Java
中提供了 String
類來建立和操作字串,即是使用對象;因為String
類修飾的字元一旦被建立就不可改變,所以當對字串進行修改的時候,需要使用到StringBuffer
和 StringBuilder
類。
String
類是用來修飾字串的,字串是一種特殊的對象,一旦初始化就不可被改變,用String
修飾的字串變數是不可以被改變的。
例子:
//定義一個字串String str = "hello world";String str = new String("hello world");
對於String
類,存在java.lang.String
中,String
類代表字串,如何?字串的字面值,就是用此類來執行個體的。
String
類,代表字串的類,如何的字串都是String
的對象。字串是作為常量,被雙引號包著的為常量,被初始化即不可被更改。那麼接下來舉個例子效果。
String i = "123";System.out.println("i="+i);//結果為i=123如果添加以下String i = "123";i = "12"System.out.println("i="+i);//結果為i=12// 看到這個效果,你會認為不是改了嗎?// 其實不是的,而是新建立了一個對象而已。
在String
中,對象是不可變的,但可以共用的。那麼怎麼理解是共用的呢?這裡引出常量池的概念,如下:
//多個引用指向同一個字串String str1 = "dashu"String str2 = "dashu";System.out.println(str1==str2);//結果true
為true
代表它們同時指向一個字串,即為對象。建立了一個str1
對象,字串常理為"dashu"
,那麼再次建立一個對象時,常理名相同,在常量池中發現有相同的"dashu"
,那麼就同時指向一個值。
常量池是放置常量的,如果有相同的值,就不用建立對象,第一個建立的字串放在常量池中,如果要用的時候,就拿來用。
// 字串在底層是以字元數組形式來儲存的String str = “ab”; String str = new String(“ab”);
String s = “a”;s = s + “b”;
//內容相同,但是建立方式不同的情況String str3 = "abc"String str4 = new String ("abc");System.out.println(str3==str4);//falseSystem.out.println(str3.equals(str4));//true//結果falsetrue
// 100個元素拼接成一個字串,使用+進行拼接// 整個過程產生301個String[] arr = { /*100個元素*/ };// 為 1String str = “”;for(String s : arr){str += s; // 每拼接1次,要多產生3個對象。// 一共100個元素,拼接100次,意味著要多產生300個元素}
String
代表是字串的類,而字串本身就是常量,字串在底層是以字元數組形式儲存的,字串是共用的,在常量池中
StringBuffer
對於字串是常量,它的值在建立後時不可以改變的,但字串緩衝區支援可變的字串。
StringBuffe
r類為java.lang
中,StringBuffer
為字串緩衝,StringBuffer
為安全執行緒的可變字元序列,類似String
的字串緩衝區,緩衝區不能改,但裡面可以改,通過某方法可以改變序列的長度和內容。
StringBuffer
提供了主要的兩種方法,一,append()
,二, inset()
StringBuffer
為一個字串緩衝區,相對於一個容器,長度是可變的,可以儲存任意類型資料,是將任意資料轉變為字串進行儲存,StringBuffer
提供了對資料的很多的操作功能。
例子:
StringBuffer sb = new StringBuffer();sb.append("da");sb.append("shu");System.out.println(sb);//sb.append("da").append("shu");
如果要操作資料,要轉換為字串。StringBuffer
所有儲存的元素都被轉成字串才可使用。
String str = sb.append("da").append("shu").toString();
在指定位置插入元素
sb.insert(2,"hehe");//插入
StringBuilder
的效率要遠高於用“+”,需要拼接多個字串,建議使用StringBuilder
。
StringBuffer和StringBuilder的區別
StringBuilder
是線程不安全的,StringBuffer
是安全執行緒的
StringBuilder
為java.lang
類,是一個可變的字元序列,提供了與StringBuffer
相容的API
,StringBuffer
和StringBuilder
方法是一模一樣的。
StringBuilder
不同步,不安全。如果同時append(),delete(),insert(),
會導致出錯,多線程訪問不安全,添加修飾synchronized
即可。在jdk1.5
版本後,推出StringBuilder
被用作一個StringBuffer
的簡易替換,用在字串緩衝區被單個線程使用的時候。
3. 裝箱與拆箱
封裝類有:Byte , short , Integer , Character , long , Float , Double
記住這些類就可以了,這些都是Number
的子類。
封裝類
byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBooleanvoidVoid
自動封箱/自動裝箱
底層預設調用valueOf
方法進行封箱
自動拆箱
用***Value()
進行拆箱
自動封裝,將基本類型的變數賦值給對應的參考型別對象
自動拆箱,將參考型別的變數賦值給對應的基本類型變數
public class Test{ public static void main(String[] args){ int i = 5; Integer integer = new Integer(i);//裝箱 //拆箱 int i2 = integer.intValue(); }}//public class Test{ public static void main(String[] args){ int i = 5; Integer integer = new Integer(i); Interger i2 = i;//自動裝箱 int i3 = integer;//自動拆箱 }}//public class Test{ public static void main(String[] args){ char c = 'Vic'; character c2 = c; c3 = c2; }}
4. 類Date
Date
代表日期的類
Date的構造方法
Date(): 為分配Date對象,並初始化對象
Date(int year, int month, int date)
類 Calendar日曆的類
Calendar
類是一個抽象類別
public abstract class Calendar extends Object//Calendar 提供了一個類方法 getInstance Calendar rightNow = Calendar.getInstance();
結語
- 下面我將繼續對
Java
、 Android
中的其他知識 深入講解 ,有興趣可以繼續關注
- 小禮物走一走 or 點贊
Java面試集合(七)