欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java.lang.ExceptionInInitializerError異常的解決方法

 更新時間:2017年10月31日 15:17:11   作者:面條啊Andrew  
這篇文章主要為大家詳細介紹了java.lang.ExceptionInInitializerError異常的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

今天在開發(fā)的過程中,遇到java.lang.ExceptionInInitializerError異常,百度查了一下,順便學習學習,做個筆記

靜態(tài)初始化程序中發(fā)生意外異常的信號,拋出ExceptionInInitializerError表明在計算靜態(tài)初始值或靜態(tài)變量的初始值期間發(fā)生異常。

要理解這個異常從Java類中的靜態(tài)變量初始化過程說起,在Java類中靜態(tài)變量的初始化順序和靜態(tài)變量的聲明順序是一致的。示例程序為:

package com.lang.ininitialException;

import java.util.ArrayList;
import java.util.List;

public class StaticParams {

  private static int NUM_A = getA();
  private static int NUM_B = getB();
  private static List<String> LIST_A = getListA();
  
  
  private StaticParams() {
    System.out.println("初始構造方法");
  }
  
  public static StaticParams getInstance() {
    return new StaticParams();
  }
  
  private static int getA(){
    System.out.println("初始化A");
    return 5;
  }
  
  private static int getB() {
    System.out.println("初始化B");
    return 10;
  }
  
  private static List<String> getListA() {
    System.out.println("初始化List");
    return new ArrayList<String>();
  }
  
  public static void main(String args[]){
    StaticParams.getInstance();
  }
}

運行結果:

初始化A
初始化B
初始化List
初始構造方法

如果交換NUM_A和NUM_B的位置,那么結果就是:

初始化B
初始化A
初始化List
初始構造方法

即:在某個靜態(tài)變量的初始化還未執(zhí)行之前就使用該靜態(tài)變量。

復現(xiàn)ExceptionInInitializerError異常的程序如下:

package com.lang.ininitialException;

import java.util.ArrayList;
import java.util.List;

public class StaticParamsSingle {

  private static StaticParamsSingle sps = buildStaticParams();
//  private static StaticParamsSingle sps = new StaticParamsSingle();
  private static int NUM_A = getA();
  private static int NUM_B = getB();
  private static List<String> LIST_A = getListA();
  
  private StaticParamsSingle(){
    System.out.println("初始化構造方法");
  }
  
  private static StaticParamsSingle buildStaticParams() {
    if (sps == null) {
      sps = new StaticParamsSingle();
    }
    
    int result = NUM_A + NUM_B;
    System.out.println("result is:" + result);
    LIST_A.add("haha");
    return sps;
  }
  
  public static StaticParamsSingle getInstance() {
    return sps;
  }
  
  private static int getA(){
    System.out.println("初始化A");
    return 5;
  }
  
  private static int getB() {
    System.out.println("初始化B");
    return 10;
  }
  
  private static List<String> getListA() {
    System.out.println("初始化List");
    return new ArrayList<String>();
  }
  
  public static void main(String args[]) {
    StaticParamsSingle.getInstance();
    
  }
}

sps變量初始化中使用到的其他的變量,但其他的靜態(tài)變量還未初始化,故而在sps初始化時就會產生異常:

初始化構造方法
result is:0
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
    at com.lang.ininitialException.StaticParamsSingle.buildStaticParams(StaticParamsSingle.java:25)
    at com.lang.ininitialException.StaticParamsSingle.<clinit>(StaticParamsSingle.java:8)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 使用反射方式獲取JPA Entity的屬性和值

    使用反射方式獲取JPA Entity的屬性和值

    這篇文章主要介紹了使用反射方式獲取JPA Entity的屬性和值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java魔法值處理的四種方式

    Java魔法值處理的四種方式

    這篇文章主要介紹了Java魔法值處理的四種方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • java 格式化輸出數(shù)字的方法

    java 格式化輸出數(shù)字的方法

    在實際工作中,常常需要設定數(shù)字的輸出格式,如以百分比的形式輸出,或者設定小數(shù)位數(shù)等,現(xiàn)稍微總結如下
    2014-01-01
  • Java面向對象基礎知識之抽象類和接口

    Java面向對象基礎知識之抽象類和接口

    這篇文章主要介紹了Java面向對象的抽象類和接口,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • Spring Boot 2.0快速構建服務組件全步驟

    Spring Boot 2.0快速構建服務組件全步驟

    這篇文章主要給大家介紹了關于Spring Boot 2.0快速構建服務組件的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Spring Boot 2.0具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Java中常用修飾符的使用方法匯總

    Java中常用修飾符的使用方法匯總

    下面小編就為大家?guī)硪黄狫ava中常用修飾符的使用方法匯總。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 使用@Transactional 設置嵌套事務不回滾

    使用@Transactional 設置嵌套事務不回滾

    這篇文章主要介紹了使用@Transactional 設置嵌套事務不回滾問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java如何利用Socket傳輸信息或文件

    Java如何利用Socket傳輸信息或文件

    這篇文章主要介紹了Java如何利用Socket傳輸信息或文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java實現(xiàn)文件加密解密多種方法

    java實現(xiàn)文件加密解密多種方法

    這篇文章主要給大家介紹了關于java實現(xiàn)文件加密解密多種方法的相關資料,?Java支持多種加密解密算法,常用的有DES、AES、RSA等,需要的朋友可以參考下
    2023-07-07
  • 微信、支付寶二碼合一掃碼支付實現(xiàn)思路(java)

    微信、支付寶二碼合一掃碼支付實現(xiàn)思路(java)

    這篇文章主要為大家詳細介紹了微信、支付寶二碼合一掃碼支付實現(xiàn)思路,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論