Java面試集合(七)

來源:互聯網
上載者:User

標籤:階層   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類修飾的字元一旦被建立就不可改變,所以當對字串進行修改的時候,需要使用到StringBufferStringBuilder 類。

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

對於字串是常量,它的值在建立後時不可以改變的,但字串緩衝區支援可變的字串。

StringBuffer類為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是安全執行緒的

StringBuilderjava.lang類,是一個可變的字元序列,提供了與StringBuffer相容的APIStringBufferStringBuilder方法是一模一樣的。

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();
結語
  • 下面我將繼續對JavaAndroid中的其他知識 深入講解 ,有興趣可以繼續關注
  • 小禮物走一走 or 點贊

Java面試集合(七)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.