java中抽象类 为什么不能定义为static型 在静态方法中为什么不能直接访问所属类的实例方法和实例变量,

但是可以访问静态的
2025-02-12 09:12:13
推荐回答(2个)
回答1:

分两个阶段
阶段一:先载入类
阶段二:然后才能依据类来实例化对象
而static的方法、变量都是属于类的,非static的则属于对象
如果在阶段一,访问非static的方法,因为还没有对象,所以不能访问成功
如果在阶段二,一个类有那么多对象在内存生存着,类也不知道该访问哪个对象的实例变量

回答2:

首先,静态的方法和静态的变量都是一个类只有一份的,因而可以用 类名.方法名,或类名.变量名来访问它们,而实例方法和实例变量是每一个实例有一份的,只能用 实例.方法名或实例.变量名来访问,所以静态的方法无法与某个实例相关联(虽然也可以用实例.静态变量 这么用,但是归根结底还是调用这个类的 静态变量),而且在没有实例的情况下,实例变量和方法都是不能被使用的,那么在静态方法里使用 实例变量就找不到这些变量所属的实例。
对于第一个问题,几乎所有的类都不能定义成为 静态的,但有一个例外就是内部类,把内部类定义成静态的话,如果能得到它的外部类的实例那么就不需要用new来实例化内部类