static-多个包含静态变量类的加载顺序???

问题描述

多个包含静态变量类的加载顺序???

有三个类,SingletonCounter、Test、Singleton,里面都包含了静态变量,SingletonCounter、Test结构差不多,Singleton包含了静态构造函数,静态属性等,将三个类的行都打上断点(需要断点的行有注释——加断点调试),当调试的时候,为什么总是最后执行到SingletonCounter的静态变量instance上???

测试了很多,和Singleton类的静态构造函数有关,望指点一二,谢谢!!!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _04_Singleton3
{
class Program
{
[STAThread]
static void Main()
{//加断点调试
var temp = Singleton.Instance;
var str = Test.str;
for (int i = 0; i < 20; i++)
{
Console.WriteLine("Next singleton value: {0}", SingletonCounter.Instance.NextValue());
}
Console.ReadKey();
}
}

//1、sealed 类
sealed class SingletonCounter
{
    private int Count = 0;//加断点调试

    //2、私有构造函数
    private SingletonCounter()
    {//加断点调试 

    }

    //3、公开静态实例对象
    public static readonly SingletonCounter Instance = new SingletonCounter();//加断点调试 

    public long NextValue()
    {
        return ++Count;
    }
}

sealed class Test
{
    private int count = 0;//加断点调试

    public static string str = "aaa";//加断点调试

    public static readonly Test Instance = new Test();//加断点调试
}

sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();//加断点调试
    static Singleton()
    {//加断点调试
    }

    private Singleton()
    {//加断点调试
    }

    public static Singleton Instance//加断点调试
    {
        get
        {
            return instance;
        }
    }
    /*
     *
     *
     *
     *
     *
     */

}

}


解决方案

好久没来有点不太会用了,不知道代码怎么搞的,格式弄错了,重发一遍!


 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _04_Singleton3
{
    class Program
    {
        [STAThread]
        static void Main()
        {//加断点调试
            var temp = Singleton.Instance;
            var str = Test.str;
            for (int i = 0; i < 20; i++)
            {
                Console.WriteLine("Next singleton value: {0}", SingletonCounter.Instance.NextValue());
            }
            Console.ReadKey();
        }
    }

    //1、sealed 类
    sealed class SingletonCounter
    {
        private int Count = 0;//加断点调试

        //2、私有构造函数
        private SingletonCounter()
        {//加断点调试 

        }

        //3、公开静态实例对象
        public static readonly SingletonCounter Instance = new SingletonCounter();//加断点调试 

        public long NextValue()
        {
            return ++Count;
        }
    }

    sealed class Test
    {
        private int count = 0;//加断点调试

        public static string str = "aaa";//加断点调试

        public static readonly Test Instance = new Test();//加断点调试
    }

    sealed class Singleton
    {
        private static readonly Singleton instance = new Singleton();//加断点调试
        static Singleton()
        {//加断点调试
        }

        private Singleton()
        {//加断点调试
        }

        public static Singleton Instance//加断点调试
        {
            get
            {
                return instance;
            }
        }
        /*
         *
         *
         *
         *
         *
         */

    }
}

解决方案二:

这是什么语言?java?

解决方案三:

我看了一下,类 Singleton 貌似并没有引用 类 SingletonCounter 但是你的这几个类都写在了同一个.CS文件中,那么我猜测,你在调试时,系统会编译并加载所有的类。
当加载类时,就会触发其静态部分的代码(静态字段,静态构造函数,或许还有静态属性),所以你的断点就触发在 SingletonCounter 中了

解决方案四:

SingletonCounter是单实例的,所以用了私有的构造函数,整个执行过程中凡是用到的地方都是这一个实例,所以会始终定位到那里

解决方案五:

SingletonCounter是单实例的,所以用了私有的构造函数,整个执行过程中凡是用到的地方都是这一个实例,所以会始终定位到那里

时间: 2024-11-03 01:57:38

static-多个包含静态变量类的加载顺序???的相关文章

类的加载顺序

问题描述 在java中,例如在一个Student类中,其属性和方法就不详细的介绍了,在Students1=newStudent();和Students2=newStudent()他们的加载顺序?是怎么加载的? 解决方案 解决方案二:按照创建的顺序加载,由ClassLoader加载的解决方案三:建议多看书,你这提问说实话看不懂,只有Student一个类,何谈顺序解决方案四:按你写代码的顺序加载咯解决方案五:肯定有Object了,然后在加载你运行的那个类的字节码,然后在加载Studet的字节码,初始

php实现全局静态变量类的一种实现方式

变量|静态 下面是一个全局静态变量类,类里面的函数都是静态函数, 注意里面的符号"&",他用来进行地址引用的.如果对引用方式不熟悉,请先参考php手册中的相关的章节. 另外本例是仿照php的pear类库中,pear.php中的静态全局error的方法实现的. <?class StatVar{  function &setInit(){    static $static = '';    return $static;  }  function set($key,

我知道类中静态成员变量一被加载就存在,问题是:它的初始值是什么时候被赋的????

问题描述 静态成员变量在被加载的同时就被赋个初始值?还是该静态成员变量在被引用时或所在类被实例化时,由静态构造函数对其赋初值啊???????????? 解决方案 解决方案二:什么时候无法确定,但一般当类被调用时初始化解决方案三:你只要知道在你用之前肯定会初始化就行了解决方案四:类第一次被调用时就会按顺序依次初始化静态变量.调用静态构造函数

jvm系列(一):java类的加载机制

java类的加载机制   1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个类被"首次主动使用"时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载

代码分析-一道Java笔试题,求解答(关于类的加载与初始化)

问题描述 一道Java笔试题,求解答(关于类的加载与初始化) 自己查了一些资料,还是看不懂这个程序的输出结果,求各位详细解释初始化和执行过程,谢! public class Alibaba { public static int k = 0; public static Alibaba t1 = new Alibaba("t1"); public static Alibaba t2 = new Alibaba("t2"); public static int i =

举例讲解Java的内部类与类的加载器_java

内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加载后,Inner1没有加载,所以这个 静态变量j 无法立即使用,报错 final int z = 0; /*static void say1() { }*/ void say2() { } } //Inner2 在A加载好后就可以使用了 static class Inner2 { int k = 0

Class类的加载以及类的产生原理java学习 第十天

/*当类产生一个实例的时候会加载类的Clsaa对象  JVM根据类名加载class字节码文件 文件 java中所有类都是从object产生的 为什么这么说呢  ?   比如说我们自己定义的类  的 Class对象会自动调用 newInstance函数来返回object类对象  然后 转换成我们的类  当然我们也可以利用这点来获取 一个 我们定义的类的对象 然后进行操作  类的静态代码段是在类加载的时候才会执行 也就是 new Class() */class  Test{ public  stat

android: 静态XML和动态加载XML混合使用,以及重写Layout控件

近期对android里面控件修改做了很多实验,由于公司需求很多,不得不重写很多控件.程序目标无非是:高效.轻巧.清晰.标准化   完成动态加载Layout有两种方法,依据个人喜好进行选择:   方法1:静态主Layout动态加载静态子Layout   首先构建子Layout:main2 [xhtml] view plaincopy <?xml version="1.0" encoding="utf-8"?>   <!--布局可以任意定义,此处拿线性

mvc-MVC发布类无法加载,MVC新手请教!

问题描述 MVC发布类无法加载,MVC新手请教! 网站发布后提示类无法加载 解决方案 IIS是否选择.net framework4.0. 解决方案二: 检查两个,一个是你如果后安装的iis,需要注册下asp.net 运行 Aspnet_iisreg.exe 具体用法google下 还有就是你的程序的程序池的.net版本,如guwei说的那样,是不是设置的2.0