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

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

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

今天在開發(fā)的過(guò)程中,遇到j(luò)ava.lang.ExceptionInInitializerError異常,百度查了一下,順便學(xué)習(xí)學(xué)習(xí),做個(gè)筆記

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

要理解這個(gè)異常從Java類中的靜態(tài)變量初始化過(guò)程說(shuō)起,在Java類中靜態(tài)變量的初始化順序和靜態(tài)變量的聲明順序是一致的。示例程序?yàn)椋?/p>

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("初始構(gòu)造方法");
  }
  
  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();
  }
}

運(yùn)行結(jié)果:

初始化A
初始化B
初始化List
初始構(gòu)造方法

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

初始化B
初始化A
初始化List
初始構(gòu)造方法

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

復(fù)現(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("初始化構(gòu)造方法");
  }
  
  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初始化時(shí)就會(huì)產(chǎn)生異常:

初始化構(gòu)造方法
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)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論