java基礎知識整理

來源:互聯網
上載者:User

標籤:概念   UI   大小寫   public   sys   cto   多重迴圈   聲明   trim   

1.物件導向的特徵:抽象、繼承、封裝、多態(形象記憶:抽積分多--想想10086)

  1.1抽象

  忽略一個主題中與當前目標無關的東西,專註的注意與當前目標有關的方面.(就是把現實世界中的某一類東西,提取出來,用程式碼表示,抽象出來的一般叫做類或者介面)。抽象包括兩個方面:資料抽象、過程抽象。

    •   資料抽象 -->表示世界中一類事物的特徵,就是對象的屬性.比如鳥有翅膀,羽毛等(類的屬性)
    •   過程抽象 -->表示世界中一類事物的行為,就是對象的行為.比如鳥會飛,會叫(類的方法)

  1.2繼承

  一個類可以從現有的類中派生,這個過程稱為類繼承;新類繼承了原始類的特性,新類稱為原始類的衍生類別(子類),原始類稱為新類的基類(父類)。子類可以從父類中繼承方法和變數,這裡注意,不會繼承父類的構造器!子類可以新增自己的方法與變數,同時擁有父類的方法與屬性;而且子類可以重寫父類的方法;

  1.3封裝

  就是把類中具體的方法和屬性封裝起來,用private私人化,通過類似於get/set的方法存取方法或者變數,最常見的就是javabean;

  1.4多態

  多態是指允許不同類的對象對同一訊息做出響應.多態性包括參數化多態性(重載)和包含多態性(重寫,繼承,介面實現);方法的重寫,重載與動態連結構成多態性。java引入多態的概念原因之一就是彌補類的單繼承帶來的功能不足;

    • 動態連結 -->對於父類中定義的方法,如果子類中重寫了該方法,那麼父類類型的引用將調用子類中的這個方法,這就是動態連結
    • 重載與重寫 --->比較直白的理解方式就是:重載是發生在同一個類中,同一個類的,同名的不同參數和傳回值類型的構造器/方法;重寫是發生在不同類中,有同一個方法,同一類傳回值,不同的方法實現;

 2.範圍public,private,protected,以及不寫時的區別

3.String 是最基本的資料類型嗎?String中常用的方法有什嗎?String是否可以被繼承?Stirng與Stringbuilder,StringBuffer的區別?

  • 不是,基礎資料類型只包含:整型(byte,short,int,long);浮點型(float,double);char型(char);boolean型(char);諧音:征服菜逼(成為大神的必然結果)

  包含的位元組(一個位元組包含8位,一位就是一個二進位位)分別是:

  byte-1;short-2;int-4;long-8;(很好記憶:笨死了,分別是1*2*2*2)

  float-4;double-8;

  char-2~4(這根編碼方式有關,因為語言太多的緣故);

  boolean-一般理論上佔1位元組,但是在java虛擬機器中由雩都用int類型代替,所以實際上是佔了4位元組;

  • String常用方法:String比較常用的包括兩方面:構造方法,方法;
    • 構造方法:
      • String(String value)
      • String(char chars[], int startIndex, int numChars)
      • String(StringBuilder builder)
      • String(StringBuffer buffer)
    • 常用方法
      • length()//返回該字串的長度
      • equalsIgnoreCase(String anotherString)//與equals方法相似,但忽略大小寫
      • charAt(int index)//返回字串中指定位置的字元;注意字串中第一個字元索引是0,最後一個是length()-1
      • substring(int beginIndex, int endIndex)//該方法從beginIndex位置起,從當前字串中取出到endIndex-1位置的字元作為一個新的字串返回
      • concat(String str)//將參數中的字串str串連到當前字串的後面,效果等價於“+”
      • indexOf(int ch/String str)//用於尋找當前字串中字元或子串,返回字元或子串在當前字串中從左邊起首次出現的位置,若沒有出現則返回-1
      •  toLowerCase()//返回將當前字串中所有字元轉換成小寫後的新串,對應的有大寫方法:toUpperCase()
      • replace(char oldChar, char newChar)//用字元newChar替換當前字串中所有的oldChar字元,並返回一個新的字串
      • trim()//截去字串兩端的空格,但對於中間的空格不處理
      • contains(String str)//判斷參數s是否被包含在字串中,並返回一個布爾類型的值
      • split(String str)//將str作為分隔字元進行字串分解,分解後的字字串在字串數組中返回
      • 將string轉化為各種基本類型的方法:各種基本類型封裝類的[parseXXX]方法
      • 將各種基本類型轉化為stirng方法:String類中的各種[valueOf]方法
  • String是final方法,不能被繼承,但是,不屬於Stirng本身的方法(比如從父類繼承的)是可以被重寫的,比如toString();這個平時比較有用
  • 在執行速度方面:StringBuilder>StringBuffer>String
    • String為字串常亮,StringBuilder和StringBuffer是字串變數,後兩者是變數支援對同一個對象進行修改,StringBuilder支援單線程(也就是線程不安全),StringBuffer支援多線程(安全執行緒);

4.基本類型與其對應的封裝類有什麼區別和聯絡:(瞭解思路:是什麼,為什麼,有什麼注意點)

  • 基本類型,是資料的基本屬性,而對應的封裝類,則是一個類,在使用的時候直接使用其對象;基礎資料型別 (Elementary Data Type)只能按值傳遞,而封裝類按引用傳遞;
  • 封裝類的出現,是為了更方便的使用一些基本類型不具備的方法,讓我們能夠用物件導向的方式進行編程
  • JDK5.0開始可以自動封包了 ,也就是基本資料可以自動封裝成封裝類,基礎資料型別 (Elementary Data Type)的好處就是速度快(不涉及到對象的構造和回收),封裝類的目的主要是更好的處理資料之間的轉換,方法很多,用起來也方便;

5.&和&&的區別?

&是位元運算符,表示按位與運算,&&是邏輯運算子,表示邏輯與,&&具有短路特性

6.heap 和stack 有什麼區別?[屬於JVM內容]

java中的堆(heap)和棧(stack),是一種記憶體的儲存機制,分別是堆記憶體和棧記憶體,在程式中定義的基本類型變數和對象的引用變數,都是儲存在stack記憶體中的,當執行超過變數的範圍之後,會自動釋放這個變數對應的記憶體空間,另做他用;heap記憶體主要儲存new出來的對象和數組,它們佔用的記憶體不會被自動釋放,只有沒有引用變數指向它的時候,才變為垃圾,在隨後的一定時間短被gc(記憶體回收行程)回收;

通俗點說:就是steap中存放的是java中的指標,可以指向heap中的實際儲存的資料;

7.Math.round(11.5) 等於多少? Math.round(-11.5)等於多少?

該方法返回與參數最接近的整數,Math.round(11.5)==12 Math.round(-11.5)==-11

8.數組有沒有length()這個方法? String 有沒有length()這個方法?

這是個陷阱,數組是一種資料結構,而不是一個類,而String是一個類,所以有方法length(),數組這種資料結構有的只是length屬性;

9.在JAVA 中,如何跳出當前的多重嵌套迴圈?

可以使用break;這裡注意普通的break只能跳出一層迴圈,而使用標號就可以跳出多重迴圈;使用return直接連下面所有的程式都不執行了,這點要注意!

10.構造器是否能被override,能夠被overload,能夠被繼承?override與overload的區別?

  • 構造器Constructor 不能被繼承,因此不能重寫Overrid,但可以被重載Overload
  • 前面“多態”裡講了的;同一個類與不同的類的區別;

11.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?[hashcode的儲存機制]

不對,有相同的hash code

結論(沒太明白,先記著):

  • 如果x.equals(y)返回“true”,那麼x和y的hashCode()必須相等
  • 如果x.equals(y)返回“false”,那麼x和y的hashCode()有可能相等,也有可能不等

12.以下二條語句傳回值為true 的有: 
A:“beijing”==“beijing”; 
B:“beijing”.equalsIgnoreCase(new String(“beijing”));

結論:A和B,A中兩個Beijing是沒有new出來的,所以指向的堆地址相同,但是後面B的new的指向不同的堆地址;==對比的是物理地址;equals對比的是值得大小;

13.我們在web 應用開發過程中經常遇到輸出某種編碼的字元,如iso8859-1等,如何輸出一個某種編碼的字串?

 1 public String translate(String str){ 2 String tempStr = ""; 3 try{ 4 tempStr = new String(str.getBytes("ISO-8859-1"), "GBK"); 5 tempStr = tempStr.trim(); 6 }catch (Exception e){ 7 System.err.println(e.getMessage()); 8 } 9 return tempStr;10 }

14.abstract class 和interface 有什麼區別?介面中是否可以定義靜態方法?

先瞭解抽象方法:它只有聲明,而沒有具體的實現,也就是方法體。例如:public void fun();

抽象類別(abstract class):

包含抽象方法的類稱為抽象類別,但並不意味著抽象類別中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變數和普通的成員方法。注意,抽象類別和普通類的主要有三點區別:

  • 抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),預設情況下預設為public;
  • 抽象類別不能用來建立對象;
  • 如果一個類繼承於一個抽象類別,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類;

抽象類別和普通的類並沒有區別;

介面(interface):

介面中可以有變數和方法,其中的變數會被隱式地指定為public static final變數,方法會被隱式地指定為public abstract方法且只能是public abstract方法;且所有的方法不能有具體的實現;如果一個非抽象類別遵循了某個介面,就必須實現該介面中的所有方法。但是對於遵循某個介面的抽象類別,可以不實現該介面中的抽象方法();

 兩者區別:

  • 抽象類別可以有自己的實現方法,但是介面只能有public abstract方法;
  • 介面中不能含有靜態代碼塊以及靜態方法,而抽象類別可以有靜態代碼塊和靜態方法;
  • 一個類只能繼承一個抽象類別,而一個類卻可以實現多個介面;
  • 設計層次上:
    • 抽象類別是對一種事物的抽象,即對類抽象,而介面是對行為的抽象。抽象類別是對整個類整體進行抽象,包括屬性、行為,但是介面卻是對類局部(行為)進行抽象;
    • 對於抽象類別,如果需要添加新的方法,可以直接在抽象類別中添加具體的實現,子類可以不進行變更;而對於介面則不行,如果介面進行了變更,則所有實現這個介面的類都必須進行相應的改動;

介面中不能定義靜態方法:一個類要實現介面中的方法,其實就是對介面方法的重寫。而要實現靜態方法,就必須重寫介面中的靜態方法;如果可以定義抽象靜態方法static,設 static abstract method(); 是抽象類別A的方法,那麼因為是靜態方法那可以用A.method(); 而這個方法又是抽象的沒有方法體,掉用了怎麼執行呢?

15.java問什麼不允許在靜態方法中訪問非靜態方法或變數?

靜態方法是屬於類的,而普通方法是屬於對象的。屬於類的靜態方法可以在對象不存在的時候就能訪問到,而普通方法必須先new一個對象才能用這個對象訪問。當我們訪問調用靜態方法的時候(使用類名.靜態方法名)這個時候就沒有對象建立,所以普通方法是訪問不到的。為了避免這種錯誤,所以java就不允許在靜態方法中訪問非靜態方法。

16.Static inner class(靜態嵌套類)與Inner Class(內部類)有什麼區別?

使用方式:

1 static class Outer {2     class Inner {}3     static class StaticInner {}4 }5 6 Outer outer = new Outer();7 Outer.Inner inner = outer.new Inner();8 Outer.StaticInner inner0 = new Outer.StaticInner();

靜態內部類的作用:只是為了降低包的深度,方便類的使用,靜態內部類適用於包含類當中,但又不依賴與外在的類,不用使用外在類的非靜態屬性和方法,只是為了方便管理類結構而定義。在建立靜態內部類的時候,不需要外部類對象的引用;

非靜態內部類的不同之處:可以自由使用外部類的所有變數和方法;

17.靜態變數和執行個體變數的區別?

靜態變數也稱為類變數,歸全類共有,它不依賴於某個對象,可通過類名直接存取;而執行個體變數必須依存於某一執行個體,只能通過對象才能訪問到它

18.寫clone()方法時,通常都有一行代碼,是什嗎?

clone的用途與含義:52345113

clone的實際使用:http://www.cnblogs.com/o-andy-o/archive/2012/04/06/2434904.html

19.GC 是什麼? 為什麼要有GC?GC會有記憶體流失嗎?

GC:記憶體回收行程,用於記憶體的管理,準確的說是用來管理heap記憶體的,Java 中的對象不再有“範圍”的概念,只有對象的引用才有“範圍”,如果沒有索引指向相應對象的記憶體地區,GC會在固定時間進行記憶體回收,但是stack記憶體的卻是根據代碼中變數是否超過了變數的範圍而被java回收。擴充:前面的stack記憶體和heap記憶體的區別;在擴充:研究JVM機制;

GC會發生記憶體流失,當存在沒有用卻又有索引指向他的時候就無法回收相應記憶體;

20.String s=new String(“xyz”);建立了幾個String Object?

兩個對象,一個是"xyx",一個是指向"xyx"的引用對象s;

20.介面是否可繼承介面? 抽象類別是否可實現(implements)介面? 抽象類別是否可繼承實體類(concrete class)? 

介面可以繼承介面。抽象類別可以實現(implements)介面,抽象類別可繼承實體類,但前提是實體類必須有明確的建構函式

21.說出一些常用的類,包,介面,請各舉5 個;

22.Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類?是否可以implements(實現)interface(介面)?

可以繼承其他類或實現其他介面

23.在java 中一個類被聲明為final 類型,表示了什麼意思?

表示該類不能被繼承,是頂級類

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.