最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

今天在開發(fā)的過程中,遇到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)變量初始化過程說起,在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)論

九江县| 巩留县| 攀枝花市| 青铜峡市| 东山县| 长子县| 凯里市| 平远县| 呼和浩特市| 大关县| 长沙市| 儋州市| 金秀| 鹤山市| 西畴县| 博湖县| 顺平县| 灵寿县| 扎囊县| 扎鲁特旗| 宾阳县| 蒙自县| 台湾省| 兴安盟| 上蔡县| 武宣县| 蒙城县| 高唐县| 九台市| 吉安县| 昌黎县| 二连浩特市| 台北县| 壶关县| 嘉义市| 喀喇| 互助| 隆回县| 滨海县| 定日县| 盱眙县|