首頁 >Java >Java面試題 >Java常見的基礎面試題

Java常見的基礎面試題

(*-*)浩
(*-*)浩原創
2019-12-14 15:06:172331瀏覽

Java常見的基礎面試題

JDK 和 JRE 有什麼不同?

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

JRE:Java Runtime Environment 的簡稱,java 運行環境,為 java 的運作提供了所需環境。 (推薦學習:java常見面試題

具體來說JDK 其實包含了JRE,同時也包含了編譯java 原始碼的編譯器javac,也包含了許多java 程式偵錯和分析的工具。簡單來說:如果你需要執行 java 程序,只要安裝 JRE 就可以了,如果你需要寫 java 程序,需要安裝 JDK。

== 和 equals 的差別是什麼?

對於基本型別和參考型別== 的作用效果是不同的,如下所示:

基本型別:比較的是值是否相同;

#引用類型:比較的是引用是否相同;

quals 本質上就是==,只不過String 和Integer 等重寫了equals 方法,把它變成了值比較。 == 對於基本類型來說是值比較,對於引用類型來說是比較的是引用;而equals 預設是引用比較,只是很多類別重寫了equals 方法,例如String、Integer等把它變成了值比較,所以一般情況下equals 比較的是值是否相等。

兩個物件的 hashCode()相同,則 equals()也一定為 true,對嗎?

不對,兩個物件的 hashCode()相同,equals()不一定 true。

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

執行的結果:

str1:1179395 | str2:1179395
false

程式碼解讀:很明顯「通話」和「重地」的hashCode() 相同,然而equals() 則為false,因為在散列表中,hashCode()相等即兩個鍵值對的雜湊值相等,然而雜湊值相等,並不一定能得出鍵值對相等。

final 在 java 中有什麼作用?

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

final 修飾的方法不能被重寫。 final 修飾的變數叫做常數,常數必須初始化,初始化之後值就不能被修改。

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

等於 -1。

String 屬於基礎的資料型別嗎?

String 不屬於基礎類型,基礎型別有 8 種:byte、boolean、char、short、int、float、long、double,而 String 屬於物件。

java 中操作字串有哪些類別?它們之間有什麼區別?

操作字串的類別有:String、StringBuffer、StringBuilder。

String 和StringBuffer、StringBuilder 的區別在於String 聲明的是不可變的對象,每次操作都會生成新的String 對象,然後將指針指向新的String 對象,而StringBuffer、StringBuilder 可以在原有對象的基礎上進行操作,所以在經常改變字串內容的情況下最好不要使用String。 StringBuffer 和StringBuilder 最大的區別在於,StringBuffer 是線程安全的,而StringBuilder 是非線程安全的,但StringBuilder 的效能卻高於StringBuffer,所以在單執行緒環境下推薦使用StringBuilder,多執行緒環境下推薦使用StringBuffer。

String str="i"與 String str=new String(“i”)一樣嗎?

不一樣,因為記憶體的分配方式不一樣。 String str="i"的方式,java 虛擬機會將其分配到常數池中;而 String str=new String(“i”) 則會被分到堆記憶體中。

如何將字串反轉?

使用 StringBuilder 或 stringBuffer 的 reverse() 方法。

範例程式碼:

// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba

String 類別的常用方法都有那些?

indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的 byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。

抽象類別必須要有抽象方法嗎?


不需要,抽象類別不一定要有抽象方法。

範例程式碼:

abstract class Cat {
    public static void sayHi() {
        System.out.println("hi~");
    }
}
上面程式碼,抽象類別並沒有抽象方法但完全可以正常運作。

普通類別和抽象類別有哪些不同?

普通類別不能包含抽象方法,抽象類別可以包含抽象方法。 Java常見的基礎面試題

抽象類別不能直接實例化,普通類別可以直接實例化。

抽象類別能使用 final 修飾嗎?

不能,定義抽象類別就是讓其他類別繼承的,如果定義為final 該類別就不能被繼承,這樣彼此就會產生矛盾,所以final 不能修飾抽象類別,如下圖所示,編輯器也會提示錯誤訊息:##################介面和抽象類別有什麼不同? #########實作:抽象類別的子類別使用 extends 來繼承;介面必須使用 implements 來實作介面。 ###

构造函数:抽象类可以有构造函数;接口不能有。

main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。

实现数量:类可以实现很多个接口;但是只能继承一个抽象类。

访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。

java 中 IO 流分为几种?

按功能来分:输入流(input)、输出流(output)。

按类型来分:字节流和字符流。

字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。

BIO、NIO、AIO 有什么区别?

BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。

NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。

AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

Files的常用方法都有哪些?

Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。

以上是Java常見的基礎面試題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn