zoukankan      html  css  js  c++  java
  • 可遇不可求的Question之类型初始值设定项引发异常篇

    总结在前头:

    “频繁”引发此类异常一般是由于静态方法初始化失败导致的,可以查找代码中的"一次性静态"初始化方法着手排查问题。迅速解决此类异常,可以直接让程序重新初始化,即尝试重启程序。

    TypeInitializationExeption在MSND中的描述为:当类初始值设定项不能初始化类型时,将创建 TypeInitializationException 并向其传递由该类型的类初始值设定项引发的异常引用。

    我们知道,类型初始化或者访问类型的静态成员时,都会对类中的其他静态成员进行初始化,并执行静态构造函数(如果有的话)。在这些过程中如果任一环节出现例如下面的代码:


        class ClassHelper
        {
            
    public static string Field = Do("Initial the static field");
            
    public static string StaticString = "Initaial static string";
            
    public string NonStaticString = "Initial non static string";
            
    public ClassHelper()
            {
                NonStaticString 
    = "Change non static string in instance constructor";
                StaticString 
    = "Change static string in instance constructor";
            }
            
    public static string Do(string field)
            {
                Console.WriteLine(field);
                
    throw new Exception();
                
    return field;
            }
        }

        

    那么产生TypeInitializationException的情况就包含以下几种:

    1. 访问类的某一静态成员,而其他静态成员的初始化(或静态构造函数中)产生异常。例如访问ClassHelper.StaticString,由于静态成员Field的初始化产生异常,因此调用ClassHelper.StaticString会抛出TypeInitializationException。

    2. 访问类的某一静态成员,该静态成员的初始化(或静态构造函数中)产生异常。例如访问ClassHelper.Field。

    3. 对该类进行初始化,而类中的某个静态成员初始化(或静态构造函数中)产生异常。例如ClassHelper helper = new ClassHelper()。

    请参考:http://www.cnblogs.com/kirinboy/archive/2007/11/07/951903.html

  • 相关阅读:
    Antlr与Regex
    c_str()
    C++ 友元
    C++ 操作符重载
    Remote 'attachhome' failed on nodes:XXX
    RAC安装GI时运行root.sh脚本结果
    clscfg.bin: error while loading shared libraries: libcap.so.1:
    RAC安装重新运行root.sh
    libXext.so.6 libXp.so.6 libXt.so.6 is needed by openmotif21-2.1.30-11.el7.i686
    向数据库中导入AWR数据
  • 原文地址:https://www.cnblogs.com/tigerjacky/p/1858198.html
Copyright © 2011-2022 走看看