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~"); } }
普通類別不能包含抽象方法,抽象類別可以包含抽象方法。
抽象類別不能直接實例化,普通類別可以直接實例化。抽象類別能使用 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中文網其他相關文章!