目錄:
- JDK 和 JRE 有什么區別?
- == 和 equals 的區別是什么?
- 兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?
- final 在 java 中有什么作用?
- java 中的 Math.round(-1.5) 等於多少?
- String 屬於基礎的數據類型嗎?
- java 中操作字符串都有哪些類?它們之間有什么區別?
- String str="i"與 String str=new String(“i”)一樣嗎?
- 如何將字符串反轉?
- String 類的常用方法都有那些?
- 抽象類必須要有抽象方法嗎?
- 普通類和抽象類有哪些區別?
- 抽象類能使用 final 修飾嗎?
- 接口和抽象類有什么區別?
- java 中 IO 流分為幾種?
- BIO、NIO、AIO 有什么區別?
- Files的常用方法都有哪些?
純自己的見解+網上的資料的整理,如有問題請各位大佬指出 (ಥ_ಥ)
JDK 和 JRE 有什么區別?
JDK是java development kit,java開發工具包,JDK中包含JRE。
JRE是java runtime environment,java運行時環境。
JDK面向開發人員使用,JRE面向Java程序使用;如果你只需要運行java程序的話,按照JRE就可以了,如果你還要編寫java程序,就需要安裝JDK了。
== 和 equals 的區別是什么?
==判斷兩個變量或實例內存地址是否相等,equals判斷兩個變量或實例的值是否相等。
但equals本質是一個方法,最底層是在Object定義的,向Integer、Long這種包裝類重寫了邏輯,所以會相等;
若沒有重寫的話,調的是Object的equals。
public boolean equals(Object obj) { return (this == obj); }
兩個對象的 hashCode()相同,則 equals()也一定為 true,對嗎?
不一定,equals是對象的一個方法,如果內部實現不一致是不會相同的。
final 在 java 中有什么作用?
對於class來說,定義成final的class是不能被繼承的
對於方法來說,定義成final的方法也是不能被重寫的
對於屬性來說,定義成final的屬性是常量,不能被修改
java 中的 Math.round(-1.5) 等於多少?
等於-1,round就是四舍五入,將原值加上0.5后再向下取整就可以了。
String 屬於基礎的數據類型嗎?
不屬於,String是引用類型。
java 中操作字符串都有哪些類?它們之間有什么區別?
常用的有String、StringBuffer、StringBuilder
String被final修飾,所有的方法返回new String,即對String修改不會影響到原對象
String可以說是Stringbuffer和StringBuilder的基類,后兩者是對String的增強;但StringBuffer對於StringBuilder來說更適用於並發的場景,它在方法上都加了鎖來保證線程安全。
String str="i"與 String str=new String(“i”)一樣嗎?
不一樣,我們用==比較,得出的結果為false;
首先str = "i"表示將字符串i的內存地址給到str,而new String("i")是將一個對象的內存地址給到str。
然后我們通過實驗來驗證:
String str = "i"; String str2 = "i"; String str3 = new String("i"); System.err.println(str==str2); System.err.println(str==str3); System.err.println(str2==str3);
結果為:true、false、false
如何將字符串反轉?
通過StringBuilder或StringBuffer的reverse()方法。
String 類的常用方法都有那些?
valueOf()
concat()
split()
substring()
equals()
indexOf()
replace()
...
抽象類必須要有抽象方法嗎?
不是必須要有抽象方法,抽象類其實和普通的類本質上沒有區別,只是可以擁有未實現的抽象方法,來讓繼承自己的類實現。
它對於普通的類來說不能實例化,即不能構造該類的對象。
普通類和抽象類有哪些區別?
類定義上:普通類class className,抽象類abstract class className
方法實現上:普通類的方法都必須要有實現,而抽象類可以只定義不實現
實例化:普通類能夠直接實例化,而抽象類不能實例化
方法定義上:普通類可以擁有private方法,而抽象類的抽象方法不能是private,因為抽象方法需要子類實現,若是private的話子類無法實現該方法。
抽象類能使用 final 修飾嗎?
不能;因為被final修飾的類是不能被繼承的,而抽象類中可能包含抽象方法,抽象方法是必須要被重寫的,所以不能用final修飾抽象類。
接口和抽象類有什么區別?
方法實現:接口只能聲明方法,抽象類還可以實現方法。
屬性和方法:接口的屬性都是public static final的,抽象類可以自己定義;接口的方法都是public abstract的,抽象類也是自己定義的。
承接關系:抽象類是繼承,接口是實現
java 中 IO 流分為幾種?
按照數據的流向分為:input(輸入流用於讀數據)、output(輸出流用於寫數據)。
按照流數據的格式分為:字符流、字節流。
常用的有InputStream、OutputStream、Reader、Writer,java中其它各種各樣的流均是他們派生出來的。
BIO、NIO、AIO 有什么區別?
BIO:Blick IO,同步阻塞式IO;也就是傳統的IO,特點是使用簡單,缺點是處理並發能力差;它是一個連接一個線程。(關鍵字:傳統的、並發能力差)
NIO:Non IO,同步非阻塞IO;是傳統IO的優化IO,客戶端和服務端通過channel通訊,實現類多路復用;它是一個請求一個線程。(關鍵字:以channel通訊、多路復用IO)
AIO:Asynchronous IO,異步非阻塞,NIO的升級;實現了異步非阻塞IO,基於事件和回調機制;它是一個有效的請求一個線程。(關鍵字:異步非阻塞IO、基於事件和回調機制)
參考:https://blog.csdn.net/zhcswlp0625/article/details/93461137
Files的常用方法都有哪些?
1、Files.exists() 檢測文件路徑是否存在
2、Files.createFile() 創建文件
3、Files.createDirectory() 創建文件夾
4、Files.delete() 刪除文件或者目錄
5、Files.copy() 復制文件
6、Files.move() 移動文件
7、Files.size() 查看文件個數
8、Files.read() 讀取文件
9、Files.write() 寫入文件