首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当第一次访问静态类是基类上的静态方法时,为什么我的静态对象没有被实例化?

当第一次访问静态类上的静态方法时,静态对象没有被实例化的原因可能有以下几点:

  1. 静态方法是属于类而不是对象的,因此在调用静态方法时不需要实例化对象。静态方法可以直接通过类名调用,而不需要创建对象实例。因此,静态对象不会被实例化。
  2. 静态方法中无法访问非静态成员,包括非静态属性和非静态方法。因此,静态方法中无法直接操作静态对象的实例化。
  3. 静态对象的实例化是在类加载的过程中完成的,而不是在调用静态方法时。当第一次访问静态类时,类会被加载到内存中,静态对象会被实例化。因此,如果静态对象没有被实例化,可能是因为该类还没有被加载到内存中。

总结起来,静态对象没有被实例化可能是因为静态方法不需要实例化对象来调用,或者是因为类还没有被加载到内存中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C# .NET面试系列二:面向对象

面向对象1. 什么构造函数?构造函数(Constructor)一种特殊类型方法,它在创建实例对象调用,用于初始对象状态。...对象实例通过引用访问。struct 值类型,它在栈分配内存。结构体实例通过直接访问值来操作。...需要注意静态成员初始静态构造函数只会在第一次使用时执行,而实例构造函数和非静态成员初始在每次创建实例都会执行。这确保了在使用前得到正确初始。7. 接口是否可继承接口?...重载和重写分别应用于不同场景,取决于你解决问题内提供多个版本方法(重载)还是在继承体系中提供对方法新实现(重写)。17. 静态方法可以访问静态变量吗?如果不可以为什么?...在C#中,静态方法不能直接访问静态变量。这是因为静态方法关联,而非静态变量实例关联。在静态方法中,没有隐式 this 实例,因为静态方法属于整个而不是实例

14610

Java进阶篇设计模式之一 ----- 单例模式

LSP 继承复用基石,只有当派生可以替换掉,且软件单位功能不受到影响才能真正被复用,而派生也能够在基础增加新行为。...缺点:该类加载时候,会初始实例静态变量并创建并分配内存空间,并且会一直占用内存。 2.饱汉式 优点:写起来很简单,在第一次调用时候才会初始,节省了内存。...,除了对外公布公共静态方法getInstance(),无法访问。...进行同步代码块,防止对象未初始化时,在多线程访问对象第一次创建后,再次重复创建;然后第二次对该对象实例化时与否判断,如果未初始,则初始,否则直接返回该实例。...构造方法私有(private); 定义一个私有(private)静态(static)实例对象; 对外提供一个公共(public)静态(static)方法得到该实例; 如果感觉不错,希望点赞、分享转发

47320

.NET面试题系列 - C# 基础知识(1)

因为程序还没运行到第二行,所以栈暂时还没有那个整型对象year。运行完前2行,栈中多了2个成员。一个Employee对象e创建,但其没有指向任何东西。 ?...类型对象由CLR在堆中一个特殊地方(加载堆)创建(在第一次使用前),其中包括了类型静态字段和方法表。创建完之后,就不会改变,通过这个事实,可以验证静态字段全局(所有同类型实例共享)性。...1.6.4 静态构造函数 静态构造函数一个特殊构造函数,它会在这个类型第一次实例或引用任何静态成员之前,CLR在堆上创建类型对象执行,它具有以下特点: 静态构造函数既没有访问修饰符,也没有参数...在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始类型对象)。这个静态构造函数只会执行一次。 无法直接调用静态构造函数。它访问修饰符private(不需要写明)。...因为类型对象只需要建立一次,所以这个静态构造函数也只能运行一次。 为什么静态构造函数既没有访问修饰符,也没有参数?

1.8K20

(16) 继承细节

第一次输出在new过程中输出,在new过程中,首先是初始,父构造方法调用test(),test被子类重写了,就会调用子类test()方法,子类方法访问子类实例变量a,而这个时候子类实例变量赋值语句和构造方法没有执行...重名与静态绑定 上节我们说到,子类可以重写父非private方法调用时候,会动态绑定,执行子类方法。那实例变量、静态方法、和静态变量呢?它们可以重名吗?如果重名,访问哪一个呢?...对于private变量和方法,它们只能在访问访问也永远当前,即在子类中,访问子类,在父中,访问,它们只是碰巧名字一样而已,没有任何关系。...这里需要说明静态变量和静态方法一般通过名直接访问,但也可以通过对象访问。...Base) 访问访问Base变量和方法通过c (静态类型Child)访问访问Child变量和方法,这称之为静态绑定,即访问绑定到变量静态类型,静态绑定在程序编译阶段即可决定,而动态绑定则要等到程序运行时

67290

Java基础8:深入理解内部类

因为某个外围对象创建内部类对象,此内部类会捕获一个隐式引用,它引用了实例该内部对象外围对象。通过这个指针,可以访问外围对象全部状态。...2 静态内部类也是在第一次用到时加载。但是它加载完以后就会将静态成员变量初始,运行静态代码块,并且只执行一次。当然,非静态成员和代码块每次实例化时也会执行。...总结一下Java代码加载顺序,万变不离其宗。 规律一、初始构造,先父后子;只有在父所有都构造完后子类才初始 规律二、加载先是静态、后非静态、最后构造函数。...规律四、java只有在字节码加载后才可以构造成对象实例 成员内部类 在方法中定义内部类称为局部内部类。...直到这里还没有解释为什么final 在内部类中属性和外部方法参数两者从外表看是同一个东西,但实际却不是,所以他们两者可以任意变化,也就是说在内部类中对属性改变并不会影响到外部形参,而然这从程序员角度来看这是不可行

1.3K00

夯实Java基础系列18:深入理解Java内部类及其实现原理

因为某个外围对象创建内部类对象,此内部类会捕获一个隐式引用,它引用了实例该内部对象外围对象。通过这个指针,可以访问外围对象全部状态。...2 静态内部类也是在第一次用到时加载。但是它加载完以后就会将静态成员变量初始,运行静态代码块,并且只执行一次。当然,非静态成员和代码块每次实例化时也会执行。...总结一下Java代码加载顺序,万变不离其宗。 规律一、初始构造,先父后子;只有在父所有都构造完后子类才初始规律二、加载先是静态、后非静态、最后构造函数。...、java只有在字节码加载后才可以构造成对象实例 成员内部类 在方法中定义内部类称为局部内部类。...直到这里还没有解释为什么final 在内部类中属性和外部方法参数两者从外表看是同一个东西,但实际却不是,所以他们两者可以任意变化,也就是说在内部类中对属性改变并不会影响到外部形参,而然这从程序员角度来看这是不可行

1.2K10

夯实Java基础系列18:深入理解Java内部类及其实现原理

因为某个外围对象创建内部类对象,此内部类会捕获一个隐式引用,它引用了实例该内部对象外围对象。通过这个指针,可以访问外围对象全部状态。...2 静态内部类也是在第一次用到时加载。但是它加载完以后就会将静态成员变量初始,运行静态代码块,并且只执行一次。当然,非静态成员和代码块每次实例化时也会执行。...总结一下Java代码加载顺序,万变不离其宗。 规律一、初始构造,先父后子;只有在父所有都构造完后子类才初始 规律二、加载先是静态、后非静态、最后构造函数。...规律四、java只有在字节码加载后才可以构造成对象实例 成员内部类 在方法中定义内部类称为局部内部类。...直到这里还没有解释为什么final 在内部类中属性和外部方法参数两者从外表看是同一个东西,但实际却不是,所以他们两者可以任意变化,也就是说在内部类中对属性改变并不会影响到外部形参,而然这从程序员角度来看这是不可行

40910

继承和多态(1)(继承部分)

子类继承父之后,必须要新添加自己特有的成员,体现出与不同,否则就没有必要继承了 在子类中访问成员变量 在子类方法中或者通过子类对象访问成员变量: 如果访问成员变量子类本身就有(不带继承...没有构造方法,默认有隐含无参数构造方法并且其内部为空语句。 对于父构造方法,里面隐藏依然this....有了继承关系 通过分析执行结果,得出以下结论: 1、父静态代码块优先于子类静态代码块执行,且它们都是最早执行 2、然后执行父实例代码块,再执行父构造方法 3、紧接着执行子类实例代码块,然后子类构造方法...除此之外其他第一次实例对象一模一样。 初始进阶版(重点) 这里涉及了构造方法和成员变量以及代码块初始先后顺序。...如果在用该类创建实例对象之前没被加载,那么不管如何,因为加载都在创建对象之前,所以同理即可,先静态成员变量初始静态代码块初始实例成员变量初始实例代码块初始,构造方法初始(有继承关系前提下顺序就不说了

8210

【Java基本功】一文读懂Java内部类用法和原理

因为某个外围对象创建内部类对象,此内部类会捕获一个隐式引用,它引用了实例该内部对象外围对象。通过这个指针,可以访问外围对象全部状态。...2 静态内部类也是在第一次用到时加载。但是它加载完以后就会将静态成员变量初始,运行静态代码块,并且只执行一次。当然,非静态成员和代码块每次实例化时也会执行。...总结一下Java代码加载顺序,万变不离其宗。 规律一、初始构造,先父后子;只有在父所有都构造完后子类才初始 规律二、加载先是静态、后非静态、最后构造函数。...规律四、java只有在字节码加载后才可以构造成对象实例 成员内部类 在方法中定义内部类称为局部内部类。...直到这里还没有解释为什么final 在内部类中属性和外部方法参数两者从外表看是同一个东西,但实际却不是,所以他们两者可以任意变化,也就是说在内部类中对属性改变并不会影响到外部形参,而然这从程序员角度来看这是不可行

97930

为什么要用单例模式?

(摘自《你必须知道.Net》)   由此我们就明白了,静态方法和非静态方法,在内存里其实都放在Method Table里了,在一个第一次加载时候,它会在Loader Heap里把静态方法,非静态方法都写入...在内存中区别是,非静态方法在创建实例对象,因为属性值对于每个对象都各不相同,因此在new一个实例,会把这个实例属性在GC Heap里拷贝一份,同时这个new出来对象放在堆栈,堆栈指针指向了刚才拷贝那一份实例内存地址...早期结构编程,几乎所有的方法都是“静态方法”,引入实例方法概念面向对象概念出现以后事情了,区分静态方法实例方法不能单单从性能上去理解,创建c++,java,c#这样面向对象语言大师引入实例方法一定不是要解决什么性能...从另一个角度考虑,如果一个方法和他所在实例对象无关,那么它就应该是静态,否则就应该是非静态。因此像工具,一般都是静态。   二、 为什么使用单例模式而不用静态方法?   ...如果一个方法和他所在实例对象无关,那么它就应该是静态,反之他就应该是非静态。如果我们确实应该使用非静态方法,但是在创建又确实只需要维护一份实例,就需要用单例模式了。

1K20

(17) 继承实现基本原理 计算机程序思维逻辑

Child继承了Base,也定义了和类同名静态变量s和实例变量a,静态初始代码块,实例初始代码块,构造方法,重写了方法step。 这是使用代码: ?...加载 在Java中,所谓加载指将相关信息加载到内存。在Java中,动态加载第一次使用这个时候才会加载,加载一个,会查看其父是否已加载,如果没有,则会加载其父。...一个信息主要包括以下部分: 变量(静态变量) 初始代码 方法静态方法实例变量 实例初始代码 实例方法信息引用 初始代码包括: 定义静态变量赋值语句 静态初始代码块...实例初始代码包括: 定义实例变量赋值语句 实例初始代码块 构造方法 加载过程包括: 分配内存保存信息 给变量赋默认值 加载父 设置父子关系 执行初始代码 需要说明,关于初始代码...变量访问 对变量访问静态绑定,无论变量还是实例变量。代码中演示变量:b.s和c.s,通过对象访问变量,系统会转换为直接访问变量Base.s和Child.s。

56760

解析C#构造函数

(2).希望仅通过调用某个静态成员函数来实例对象实例化工厂方法)   4.构造函数使用:   编译器在调用构造器前,会初始任何使用了简化语法字段,以维持源代码给人留下...构造引用类型对象,在调用类型实例构造器之前,为对象分配内存总是先归零,构造器没有显示重写所有字段保证都有一个0或null值。实例构造器永远不能继承。 C....为了使代码“可验证”,实例构造器在访问集成任何字段之前,必须先调用构造器。如果派生构造器没有显示调用一个构造器,C#编译器会自动生成对默认构造器调用。 2.   ...,当前面的构造函数实例构造函数,只要创建对象,就会执行它。  ...(3).静态构造函数调用: 静态构造函数没有访问修饰符,其他C#代码从来不调用它,但是在加载,总是又.NET运行库调用它。静态构造函数只能访问静态成员,不能访问实例成员。

3.1K50

Java Nested Classes(内部类~第一篇英文技术文档翻译)

使用嵌套有以下几个明显优势: 仅会在一处用到某个,通过嵌套可以在逻辑(外部类)保持一种紧密联系关系:一个只会在另一个中使用,那么就可以把这个嵌入到另外一个中,可以使得两者之间有着紧密联系...静态嵌套-Static Nested Classes 静态嵌套不能直接引用外部实例变量和实例方法,对于这样实例变量仅可以通过对象引用来获取。...括号,跟一般初始一个实例别无二致,需要填入构造方法构造参数,注:用匿名实现接口没有构造方法,那么括号中不需要填参数即可。 主体,即匿名实现。...因为匿名当做表达式一样使用,如在定义frenchGreeting对象,匿名全部定义都是该表达式一部分, 这也解释了为什么匿名定义最后要以;结尾,因为表达式以分号;结尾。...不能在匿名中声明静态代码块,或者再定义内部成员接口 匿名中仅变量为常量,才可以出现静态成员 小结,在匿名中可以声明如下内容 列表项目 字段 额外方法(即使不实现任何父方法实例代码块

37020

c#面试题抽象和接口区别-金三银四面试:C#程序员经常遇到30道基础面试题,想你所想

由重写声明重写方法称为重写方法。重写方法必须与重写方法具有相同签名。   不能重写非虚方法静态方法。重写方法必须虚拟、抽象或重写。   重写声明不能更改虚方法访问性。...它们也有静态和非静态方法它们装箱,会从System.继承虚方法,并可实现零个或更多接口。值类型密封,这意味着不能从它们派生出其他类型。....;   11、C#中有没有静态构造函数,如果有做什么用?   有。静态构造函数用于初始。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始。...静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。   ...静态构造函数典型用途使用日志文件,将使用这种构造函数向日志文件中写入项。   12、在C#中如何实现多态?

1.9K20

一道关于实例顺序C#面试题,有点难度

最后问题:请写出Main()方法中,a1-a5,b1-b5这十个实例顺序。(MyTest自己添,方便查看结果,原题实例一个object。)...每当我们对一个创建第一个实例访问静态字段前,JIT编译器就会调用该类静态构造方法。当然,静态变量也可以使用上面说内联方法进行赋值。...这里可以看出,第一次实例某个,会首先调用该类静态构造方法。 C#中和子类实例顺序 这个知识点比较简单,那就是在调用子类实例构造方法之前会调用实例构造方法。...new修饰符作用 看过不少关于new以修饰符形式用在方法声明中题目,关于new用法在MSDN也都查到,官方说法“显式隐藏从继承成员”。...个人理解比较简单:子类中,一个方法签名(指参数,方法名,返回值)与一个方法相同,通过加入new修饰符,可以让子类不做更改去使用该方法

16240

C++纯虚函数与抽象

虚函数必须静态成员函数(且非构造函数),其访问权限public。那么: (1)为什么静态成员函数不能为虚函数?...如果不定义虚析构函数,删除一个指向派生对象指针,会调用析构函数,派生析构函数未被调用,造成内存泄露。...虚析构函数工作方式:最底层派生析构函数最先调用,然后各个析构函数调用。这样,删除指向派生指针,就会首先调用派生析构函数,不会有内存泄露问题了。...所以纯虚函数声明就是在告诉子类设计者,“你必须实现这个函数,但我不知道你会怎样实现它”。 值得特别注意,由于抽象至少有一个函数没有实现,所以抽象无法实例,否则编译器会报错。...,因为抽象并不能实例,不能调用该方法

1.5K20

Java基础-甲骨文系列

接口和抽象相同点和区别? 相同点 都不能实例。 接口实现或抽象子类需实现接口或抽象中相应方法才能实例。...覆盖:覆盖指派生重写方法,使用指向其子类实例对象,或接口引用变量指向其实现实例对象,在程序调用运行期根据引用变量所指具体实例对象调用正在运行那个对象方法,即需要到运行期才能确定调用哪个方法...JVM在加载时候会执行static代码块。static代码块常用于初始静态变量。static代码块只会被执行一次。 修饰内部类。static内部类可以不依赖外部类实例对象实例。...JDK8扩容机制 HashMap容量变化通常存在以下几种情况: 空参数构造函数:实例HashMap默认内部数组null,即没有实例。...Collections一个包装,包含了很多静态方法、不能实例,而是作为工具使用,比如提供排序方法: Collections.sort(list);提供反转方法:Collections.reverse

82310

Java知识面试题复习(二)Java基础语法

static独特之处 1、static修饰变量或者方法独立于该类任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是实例对象所共享。...,所有的对象共享,不像成员变量自个【自个指的是这个单个实例对象】…觉得已经讲很通俗了,你明白了咩?...2、在该类第一次加载时候,就会去加载static修饰部分,而且只在第一次使用时加载并进行初始,注意这是第一次用就要初始,后面根据需要是可以再次赋值。...4、static修饰变量或者方法优先于对象存在,也就是说一个加载完毕之后,即便没有创建对象,也可以去访问。...static应用场景 因为static实例对象所共享,因此如果某个成员变量所有对象所共享,那么这个成员变量就应该定义为静态变量。

30920

JAVA知识基础(四):深入理解static关键字

2、static独特之处 static修饰变量或者方法独立于该类任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是实例对象所共享。...在该类第一次加载时候,就会去加载static修饰部分,而且只在第一次使用时加载并进行初始,注意这是第一次用就要初始,后面根据需要是可以再次赋值。...static修饰变量或者方法优先于对象存在,也就是说一个加载完毕之后,即便没有创建对象,也可以去访问。...Singleton 加载静态内部类 SingletonHolder 没有加载进内存。...8、静态变量和实例变量 static修饰成员变量叫做静态变量【也叫做变量】,静态变量属于这个,而不是属于是对象没有static修饰成员变量叫做实例变量,实例变量属于这个实例对象

33220

设计模式篇之一文搞懂如何实现单例模式

这个提供了一种访问其唯一对象方式,可以直接访问,不需要实例该类对象。 要求 单例只能有一个实例。 单例必须自己创建自己唯一实例。 单例必须给所有其他对象提供这一实例。...我们首先要明白,private他私有的,也就是不让外部其他访问,那我们自己还是可以访问,所以在上文要求中就说到了:单例必须自己创建自己唯一实例。 同时我们还需要抛出单例获取方法。...) { } } 静态初始对象 我们饿汉式延迟加载,即要用,然后第一次去调用时才会创建对象,而饿汉式恰恰相反,他在初始时候就去创建。...有缺分析 双重锁模式一种用于延迟初始优化模式,在第一次调用时创建单例对象,并在之后访问中直接返回该对象。...此外,静态内部类中静态变量和静态方法加载初始,而静态内部类本身是非常轻量级,加载和初始时间和开销都非常小。因此,静态内部类模式既能够实现懒加载,又不会带来太大性能损失。

4.4K41
领券