java基礎面試(一)

1.JDK與JRE的區別

  JDK,Java Development Kit 的簡稱,java的開發工具包,提供了java開發和運行環境;java

  JRE,Java Runtime Environment 的簡稱,java運行環境,爲java的運行提供了所需環境,包含了java虛擬機,java基礎類庫;數組

  具體來講,JDK其實包含了JRE,同時還包含了編譯java源碼的編譯器javac,還包含了不少java程序調試和分析的工具。安全

  簡單來講:若是你須要運行java程序,只須要安裝JRE就能夠了,若是你須要編寫java程序,須要安裝JDK。多線程

2.==與equals的區別是什麼

  對於==,若是做用於基本數據類型的變量,則直接比較其存儲的值是否相等;工具

若是做用於引用類型的變量,則比較的是所指向的對象的地址性能

  對於equals方法,注意:equals方法不能做用於基本數據類型的變量開發工具

  若是沒有對equals方法進行重寫,則比較的是引用類型的變量所指向的對象的地址;ui

  諸如String、Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容spa

3.兩個對象的hashCode()相同,則equals()也必定爲true,對嗎?

  不對,兩個對象的hashCode()相同,equals也不必定爲true。  線程

  首先直接回答不必定。

  在java中,equals和hashcode是有設計要求的,equals相等,則hashcode必定相等,反之則否則。

  重寫equals()方法,必須重寫hashCode()方法,以保證equals方法相等時兩個對象 hashcode返回相同的值。

  若是重寫了hashCode方法就極可能出現hashCode相同equals爲false的狀況。

  比較兩個對象是否相等就能夠重寫hashCode和equals方法,使用equals就能判斷是否相等。

4.final在java中有什麼做用?

  final修飾的類叫最終類,該類不能被繼承

  final修飾的方法不能被重寫

  final修飾的變量叫常量,常量必須初始化,初始化以後不能被修改

5.Java中的Math.round(-1.5)等於多少?

  等於-1;由於數軸上取值時,中間值(0.5)向右取整,因此正0.5是往上取整,負0.5直接捨棄

6.String屬於基礎的數據類型嗎?

  不屬於。

  基礎數據類型有八種:

    整數型:byte、short、int、long

    浮點數型:float、double(默認是double類型,若加後綴F爲float類型)

    布爾類型:boolean

    字符類型:char

    而String屬於對象

7.java中操做字符串都有哪些類?它們之間有什麼區別?

  操做字符串的類有3個:String、StringBuffer、StringBuilder

  區別:

    String與其餘兩個的區別在於:String聲明的是不可變得對象,底層運用了一個不可變的字符數組(final char[]),每次操做都會生成新的String對象,而後將指針指向新的String對象,而其餘兩個能夠在原有對象的基礎上進行操做,因此在常常改變字符串內容的狀況下最好不要使用String。

    StringBuffer和StringBuilder最大的區別在於:StringBuffer是線程安全的,而StringBuilder是非線程安全的,但StringBuilder的性能卻高於StringBuffer,因此在單線程環境下推薦使用StringBuilder,多線程環境下推薦使用StringBuffer。

8.String str="i"與String str=new String("i")同樣嗎?

  不同,由於內存的分配方式不同。

  String str="i"的方式,java虛擬機會將其分配到常量池中

  String str=new String("i")則會被分到堆內存中

9.如何將字符串翻轉?

  使用StringBuilder或StringBuffer的reverse()方法

10.String類的經常使用方法有哪些?

  indexOf():返回指定字符的索引    charAt():返回指定索引處的字符

  replac():字符串替換        trim():去除字符串兩段的空白

  split():分割字符串,返回一個分割後的字符串數組

  getBytes():返回字符串的byte類型數組  length():返回字符串長度

  toLowerCase():將字符串轉成小寫字母  toUpperCase():將字符串轉成大寫字符

  substring():截取字符串  equals():字符串比較

11.抽象類必需要有抽象方法嗎?

  不是必須的

12.普通類與抽象類有哪些區別?

  普通類不能包含抽象方法,抽象類能夠包含抽象方法

  抽象類不能直接實例化,普通類能夠直接實例化

13.抽象類能使用final修飾嗎?

  不能

  定義抽象類就是讓其餘類繼承的,若是定義爲final該類就不能不被繼承,這樣彼此就會產生矛盾

14.接口與抽象類有什麼區別?

  他們都不能實例化對象,均可以包含抽象方法,並且抽方法必須被繼承的類所有實現

區別:

  1.抽象類的子類使用extends來繼承;接口必須使用implements來實現接口

  2.抽象類要被子類繼承,接口要被類實現

  3.接口只能作方法申明,抽象類中能夠作方法申明,也能夠作方法實現

  4.接口定義的只能公共靜態常量(public static final ),抽象類中的變量是普通變量

  5.抽象類裏的抽象方法必須所有被子類所實現,若是子類不能所有實現父類抽象方法,那麼該子類只能是抽象類。一樣,一個實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。

  6.接口中的方法默認使用public修飾;抽象類中的方法能夠是任意訪問修飾符

  7.類能夠實現多個接口,但只能繼承一個超類

相關文章
相關標籤/搜索