1.面向對象和面向過程的區別對比:
面向對象易維護、易擴展、易復用,由於面向對象繼承、封裝、多態的特性,可以設計低耦合的系統易於維護,但因為類的實例化開銷較大,所以面向過程性能更高,一般性能是最主要的因素時采用面向過程開發,它沒有面向對象那么易維護易擴展易復用。
2.java語言的特點
跨平台、面向對象,支持多線程、支持網絡編程。
3.JVM,JDK,JRE都是什么
jvm是運行java字節碼的虛擬機,對不同的系統又不同的實現,讓相同的代碼在不同的機器上都能出一樣的結果。
JRE是java的運行環境,它是運行已編譯 Java 程序所需的所有內容的集合,包括 Java虛擬機(JVM),Java類庫,java命令和其他的一些基礎構件。
JDK是Java Development Kit,它是功能齊全的Java SDK。它擁有JRE所擁有的一切,還有編譯器(javac)和工具(如javadoc和jdb)。它能夠創建和編譯程序。
4.什么是java字節碼
jvm可以理解的代碼就是字節碼,(就是擴展名是.class文件),它不需要任何特定的處理器,只面向虛擬機。jvm和字節碼實現一次編譯隨處運行。
5.從java代碼到運行起來又哪些步驟?
java源代碼通過jdk中的編譯器編譯生成jvm理解的lava字節碼,然后jvm可以運行字節碼。
6.java和c++區別是什么?
都是面向對象語言,都支持封裝、繼承和多態。c++可以操作指針,Java 不提供指針來直接訪問內存。Java 的類是單繼承的,C++ 支持多重繼承;java的接口可以多繼承。Java 有自動內存管理機制,不需要程序員手動釋放無用內存。
7.構造器是否可以被重寫?
構造器不可以,在繼承的時候,子類也無法獲得父類的構造器和私有的屬性。一般要用父類的構造器都是用super,加載順序?先加載父類吧,那super什么時候執行?
補充:可以重載。
8.說說面向對象
面向對象有封裝、多態繼承三個特征。
封裝是屬性私有化,對外提供訪問的方法,繼承可以通過繼承父類實現方法的復用,多態是聲明父類指向子類的實例。
好處是什么?常用的場景
9.String,StringBuffer,StringBuilder的區別,為什么String不可變
1.String是不可變的,StringBuffer,StringBuilder可變
從設計層面上看,抽象類提供了一種 IS-A 關系,子類對象必須能夠替換掉所有父類對象(里氏替換)。而接口更像是一種 LIKE-A 關系,它只是提供一種方法實現契約,並不要求接口和實現接口的類具有 IS-A 關系。看不 明白
從使用上來看,一個類可以實現多個接口,但是不能繼承多個抽象類。
接口的字段只能是 static 和 final 類型的,而抽象類的字段沒有這種限制。
接口的成員只能是 public 的,而抽象類的成員可以有多種訪問權限。
抽象類一般會包含抽象方法,抽象方法一定位於抽象類中。
接口是抽象類的延伸,在 Java 8 之前,它可以看成是一個完全抽象的類,從 Java 8 開始,接口也可以擁有默認的方法實現,因為不支持默認方法的接口的維護成本太高了。在 Java 8 之前,如果一個接口想要添加新的方法,那么要修改所有實現了該接口的類。
備注:在JDK8中,接口也可以定義靜態方法,可以直接用接口名調用。實現類和實現是不可以調用的。如果同時實現兩個接口,接口中定義了一樣的默認方法,必須重寫,不然會報錯。
13.對象相等和引用相等的區別:對象相等比較的是內存中的內容,引用比較的是地址
14.==和equals,==對於基本類型比較值,對於引用類型比較地址;equals方法如果沒有被覆蓋和==一樣,如果被覆蓋了就根據內容比較。42 == 42.0為什么是true
15.為什么重寫equasl的時候也要重寫hashCOde?