91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java常見面試題及答案有哪些

發布時間:2021-11-30 14:32:26 來源:億速云 閱讀:120 作者:iii 欄目:大數據

這篇文章主要介紹“Java常見面試題及答案有哪些”,在日常操作中,相信很多人在Java常見面試題及答案有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java常見面試題及答案有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.什么是Java虛擬機?為什么Java被稱作是“平臺無關的編程語言”?

Java 虛擬機是一個可以執行 Java 字節碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的字節碼文件。
Java 被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。
Java 虛擬機讓這個變為可能,因為它知道底層硬件平臺的指令長度和其他特性。

2.JDK和JRE的區別是什么?

JDK: java開發工具包,包含了JRE、編譯器和其它工具(如:javaDOc、java調試器)
JRE: java運行環境,包含java虛擬機和java程序所需的核心類庫。
如果只是想跑java程序,那么只需安裝JRE,如果要寫java程序并且運行,那就需要JDK了。

3.”static”關鍵字是什么意思?Java中是否可以覆蓋一個private或者是static的方法?

如果一個類的變量或者方法前面有static修飾,那么表明這個方法或者變量屬于這個類,也就是說可以在不創建對象的情況下直接使用
當父類的方法被private修飾時,表明該方法為父類私有,對其他任何類都是不可見的,因此如果子類定了一個與父類一樣的方法,這對于子類來說相當于是一個新的私有方法,且如果要進行向上轉型,然后去調用該“覆蓋方法”,會產生編譯錯誤

class Parent {
    private fun() {
        ...
    }   
}
class Child extends Parent {
    private fun() {
        ...
    }
}
class Test {
    public static void main(String[] args) {
        Parent c = new Child();
        c.fun(); //編譯出錯
    }
}

static方法時編譯時靜態綁定的,屬于類,而覆蓋是運行時動態綁定的(動態綁定的多態),因此不能覆蓋.

4.Java支持的基本數據類型有哪些?什么是自動拆裝箱?

java支持的基本數據類型有以下9種:byte,shot,int,long,float,double,char,boolean,void.
自動拆裝箱是java從jdk1.5引用,目的是將原始類型自動的裝換為相對應的對象,也可以逆向進行,即拆箱。這也體現java中一切皆對象的宗旨。
所謂自動裝箱就是將原始類型自動的轉換為對應的對象,而拆箱就是將對象類型轉換為基本類型。java中的自動拆裝箱通常發生在變量賦值的過程中,如:

    Integer object = 3; //自動裝箱
    int o = object; //拆箱

在java中,應該注意自動拆裝箱,因為有時可能因為java自動裝箱機制,而導致創建了許多對象,對于內存小的平臺會造成壓力。

覆蓋和重載是什么?

覆蓋也叫重寫,發生在子類與父類之間,表示子類中的方法可以與父類中的某個方法的名稱和參數完全相同,通過子類創建的實例對象調用這個方法時,將調用子類中的定義方法,這相當于把父類中定義的那個完全相同的方法給覆蓋了,這也是面向對象編程的多態性的一種表現。
重載是指在一個類中,可以有多個相同名稱的方法,但是他們的參數列表的個數或類型不同,當調用該方法時,根據傳遞的參數類型調用對應參數列表的方法。當參數列表相同但返回值不同時,將會出現編譯錯誤,這并不是重載,因為jvm無法根據返回值類型來判斷應該調用哪個方法。

5.Java支持多繼承么?如果不支持,如何實現?

在java中是單繼承的,也就是說一個類只能繼承一個父類。
java中實現多繼承有兩種方式,一是接口,而是內部類.

//實現多個接口 如果兩個接口的變量相同 那么在調用該變量的時候 編譯出錯
interface interface1 {
    static String field = "dd"; 
    public void fun1();
    }
interface interface2 {
static String field = "dddd";
    public void fun2();
    }
class child implements interface1,interface2 {
    static String field = "dddd";
    @Override
    public void fun2() {
    }

    @Override
    public void fun1() {
    }   
}

//內部類 間接多繼承
class Child {
class Father {
    private void strong() {
        System.out.println("父類");
    }
}
class Mother {
    public void getCute() {
        System.out.println("母親");
    }
}
public void getStrong() {
    Father f = new Father();
    f.strong();
    }
public void getCute() {
    Mother m = new Mother();
    m.getCute();
    }
}

6.什么是值傳遞和引用傳遞?java中是值傳遞還是引用傳遞,還是都有?

值傳遞 就是在方法調用的時候,實參是將自己的一份拷貝賦給形參,在方法內,對該參數值的修改不影響原來實參,常見的例子就是剛開始學習c語言的時候那個交換方法的例子了。
引用傳遞 是在方法調用的時候,實參將自己的地址傳遞給形參,此時方法內對該參數值的改變,就是對該實參的實際操作。
在java中只有一種傳遞方式,那就是值傳遞.可能比較讓人迷惑的就是java中的對象傳遞時,對形參的改變依然會意向到該對象的內容。 
下面這個例子來說明java中是值傳遞.

    public class Test {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("hello ");
        getString(sb);
        System.out.println(sb);
    }
    public static void getString(StringBuffer s) {
        //s = new StringBuffer("ha");
        s.append("world");
    }
}

在上面這個例子中,當前輸出結果為:hello world。這并沒有什么問題,可能就是大家平常所理解的引用傳遞,那么當然會改變StringBuffer的內容。但是如果把上面的注釋去掉,那么就會輸出:hello.此時sb的值并沒有變成ha hello. 假如說是引用傳遞的話,那么形參的s也就是sb的地址,此時在方法里new StringBuffer(),并將該對象賦給s,也就是說s現在指向了這個新創建的對象.按照引用傳遞的說法,此時對s的改變就是對sb的操作,也就是說sb應該也指向新創建的對象,那么輸出的結果應該為ha world.但實際上輸出的僅是hello.這說明sb指向的還是原來的對象,而形參s指向的才是創建的對象,這也就驗證了java中的對象傳遞也是值傳遞。

7.接口和抽象類的區別是什么?

不同點在于:

  1. 接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。

  2. 類可以實現很多個接口,但是只能繼承一個抽象類

  3. 類如果要實現一個接口,它必須要實現接口聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

  4. 抽象類可以在不提供接口方法實現的情況下實現接口。

  5. Java 接口中聲明的變量默認都是 final 的。抽象類可以包含非 final 的變量。

  6. Java 接口中的成員函數默認是 public 的。抽象類的成員函數可以是 private,protected 或者是 public 。

  7. 接口是絕對抽象的,不可以被實例化(java 8已支持在接口中實現默認的方法)。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。

8.構造器(constructor)是否可被重寫(override)?

構造方法是不能被子類重寫的,但是構造方法可以重載,也就是說一個類可以有多個構造方法。

9.Math.round(11.5) 等于多少? Math.round(-11.5)等于多少?

Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回與參數 最接近的長整數,參數加 1/2 后求其 floor.

10. String, StringBuffer StringBuilder的區別。

tring 的長度是不可變的;

StringBuffer的長度是可變的,如果你對字符串中的內容經常進行操作,特別是內容要修改時,那么使用 StringBuffer,如果最后需要 >String,那么使用 StringBuffer 的 toString() 方法;線程安全;

StringBuilder 是從 JDK 5 開始,為StringBuffer該類補充了一個單個線程使用的等價類;通常應該優先使用 StringBuilder 類,因>為它支持所有相同的操作,但由于它不執行同步,所以速度更快。 
使用字符串的時候要特別小心,如果對一個字符串要經常改變的話,就一定不要用String,否則會創建許多無用的對象出來. 
來看一下比較

String s = "hello"+"world"+"i love you";
StringBuffer Sb = new StringBuilder("hello").append("world").append("i love you");

這個時候s有多個字符串進行拼接,按理來說會有多個對象產生,但是jvm會對此進行一個優化,也就是說只創建了一個對象,此時它的執行速度要比StringBuffer拼接快.再看下面這個:

String s2 = "hello";  
String s3 = "world";  
String s4 = "i love you";  
String s1 = s2 + s3 + s4;

上面這種情況,就會多創建出來三個對象,造成了內存空間的浪費.

到此,關于“Java常見面試題及答案有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扎兰屯市| 邵阳县| 光山县| 综艺| 得荣县| 铜梁县| 上虞市| 双城市| 邛崃市| 东源县| 普定县| 荃湾区| 盐城市| 阳信县| 三穗县| 贵南县| 江华| 五家渠市| 高邑县| 建昌县| 深州市| 五原县| 邢台县| 清水河县| 北辰区| 南涧| 武宁县| 瑞昌市| 平遥县| 沾益县| 玉山县| 武山县| 河池市| 墨玉县| 兴国县| 彭水| 阜南县| 彝良县| 涿州市| 延寿县| 灵山县|