【Java面試高頻】i++和++i的區別,單例模式的多種實現以及區別,類和例項初始化順序,不看血虧
1.i++和++i的區別
分為區域性變數表和運算元棧
i++和++i的操作是直接修改的是區域性變數表中的值
2.單例模式
要點:
- 一個類只能有一個例項
- 私有化構造器
- 該單例類必須自主的建立這個例項
- 該類必須有一個靜態變數來儲存這個例項
- 該類需要自行的向整個系統提供這個例項
- 直接暴露
- 呼叫靜態變數的get方法
餓漢式:直接建立出這個類的單例,不管需不需要使用
- 直接例項化餓漢式(簡介直觀)
public class Singleton1 {
//靜態變數儲存這個類的單例
public static final Singleton1 INSTANCE = new Singleton1();
//私有化構造器
private Singleton1(){
}
}
- 列舉式
public enum Singleton2 {
INSTAANCE
}
- 靜態程式碼塊的方式
/**
* 使用靜態程式碼塊的方式建立單例模式
*/
public class Singleton3 {
public static final Singleton3 INSTANCE ;
static {
INSTANCE = new Singleton3();
}
private Singleton3(){
}
}
懶漢式:需要的時候再建立該類的單例,不需要就不建立
- 執行緒不安全的方式(適用於單執行緒的情況)
public class Singleton4 {
static Singleton4 INSTANCE;
private Singleton4(){
}
public static Singleton4 getInstance(){
if (INSTANCE ==null){
INSTANCE = new Singleton4();
}
return INSTANCE;
}
}
- 執行緒安全的方式(適用於多執行緒的情況)
/**
* @author 雷雨
* @date 2020/10/26 18:49
*/
public class Singleton5 {
static Singleton5 INSTANCE;
private Singleton5(){
}
public static Singleton5 getInstance(){
//為了效率
if (INSTANCE ==null){
//為了執行緒安全
synchronized (Singleton5.class){
if (INSTANCE ==null){
INSTANCE = new Singleton5();
}
}
}
return INSTANCE;
}
}
3.類初始化順序
由父及子,靜態先行,由上到下
- 有main方法的類優先初始化,但是如果該類是子類,那需要先初始化其父類
- 靜態分為:靜態變數和靜態程式碼塊,如果既有靜態變數又有靜態程式碼塊,那麼誰的位置靠上,誰先初始化
類初始化方法就是執行< clinit >()方法
4.例項初始化順序
例項初始化方法就是執行< init >()方法
- < init >()方法可能過載有多個,有幾個構造器就有幾個< init >()方法
- < init >()方法由非靜態例項變數顯示賦值程式碼和非靜態程式碼塊,對應構造器程式碼組成
順序:
- 非靜態例項變數顯示賦值程式碼和非靜態程式碼塊程式碼從上到下順序執行,而對應的構造器的程式碼最後執行
- 每次建立例項物件,呼叫對用構造器,執行的就是對應的< init >()方法
- 除此之外如果該類是子類,那麼父類的相關例項初始化先執行
也就是說:
子類的例項初始化方法:
- super()
- 順序執行子類的非靜態變數顯示賦值語句和非靜態程式碼塊
- 子類的無參構造
影響初始化順序的還有:重寫方法
- 非靜態方法前面有一個預設的物件this
- this在構造器(< init >()),它表示正在建立的物件,如果此時建立的是子類的物件,那麼執行的就是子類的非靜態方法
哪些方法不能被重寫?
- final方法
- 靜態方法
- private等子類中不可見的方法
重寫和過載的區別和聯絡?
重寫的要求
- 方法名
- 形參列表
- 返回值型別
- 丟擲的異常
- 修飾符
時建立的是子類的物件,那麼執行的就是子類的非靜態方法
哪些方法不能被重寫?
- final方法
- 靜態方法
- private等子類中不可見的方法
重寫和過載的區別和聯絡?
重寫的要求(和下面這些是否有關係,有什麼關係,希望讀者能夠自己也想一想)
- 方法名
- 形參列表
- 返回值型別
- 丟擲的異常
- 修飾符
我是一名普二本的軟體工程專業學生,秋招中拿到了一些offer,但是自己想要衝擊一下自己的極限,所以在春招之前再總結一下,給自己補充補充能量,查漏補缺。
如果本文對您有益,強烈建議關注我的專欄或者部落格
相關文章
- 類的例項化順序和分析
- 例項物件和函式物件的區別物件函式
- Cookie和Session的區別以及設計測試用例CookieSession
- 靜態方法和例項方法的區別以及如何恰當使用
- 常見的三種工廠模式區別及單例模式模式單例
- Volatile關鍵字&&DCL單例模式,volatile 和 synchronized 的區別單例模式synchronized
- Python中類方法和例項方法有什麼區別?Python
- Java類初始化和例項化Java
- Cookie、localStorage 和 sessionStorage 的區別及應用例項CookieSession
- java基礎總結(面試高頻問題)十:java抽象類和介面的區別Java面試抽象
- 【Java面試】@Resource 和 @Autowired 的區別Java面試
- 面試— !Doctype的作用,嚴格模式和混雜模式的區別、以及如何觸發兩種模式面試模式
- 設計模式:單例模式的使用和實現(JAVA)設計模式單例Java
- JS實現單例模式的多種方案JS單例模式
- php class中public,private,protected,static的區別,以及例項PHP
- 單例模式的各種實現方式(Java)單例模式Java
- Java 實現單例模式的 9 種方法Java單例模式
- 高可用架構例項:在多雲和多區域中穿行架構
- 初學Python過程中,例項方法和類方法的區別是什麼?Python
- 【Java面試】Spring中 BeanFactory和FactoryBean的區別Java面試SpringBean
- Java經典面試題: == 和 equals( )的區別Java面試題
- 前端框架路由實現的Hash和History兩種模式的區別前端框架路由模式
- JS中的單例模式及單例模式原型類的實現JS單例模式原型
- Python常見面試題006 類方法、類例項方法、靜態方法有何區別?Python面試題
- 美團一面問我i++跟++i的區別是什麼
- 單例模式的各種實現單例模式
- npm i和npm i --production的區別NPM
- 五種方式實現 Java 單例模式Java單例模式
- 【Java面試】Mybatis中#{}和${}的區別是什麼?Java面試MyBatis
- 【Java面試指北】單例模式Java面試單例模式
- 使用Thread類和Runnable介面實現多執行緒的區別thread執行緒
- PHP static 關鍵字和 self 關鍵字例項化的區別PHP
- [Python 基礎] Python 例項方法、靜態方法和類方法詳解 (包含區別和用法)Python
- ABAP和Java單例模式的攻防Java單例模式
- JAVA中實現單例(Singleton)模式的八種方式Java單例模式
- Java子類和父類的初始化執行順序Java
- Java設計模式——實現單例模式的七種方式[JZOF]Java設計模式單例
- Java普通程式碼塊,構造程式碼塊,靜態程式碼塊區別,執行順序的程式碼例項Java