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

Java静态方法不能调用静态方法的原因

如图,是Java静态代码和实例对象互相调用的规则,我们接下来就讲讲为什么在Java静态方法不可以调用静态代码呢。...静态方法不依赖于对象的调用,它是通过‘类名.静态方法名’这样的方式来调用的。而对于静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问静态方法。...因此在对象未存在时静态方法也不存在,静态方法自然不能调用一个不存在的方法。...(3)不能用一个值为null的引用类型变量来调用静态方法,这样会抛出空指针异常,但是静态方法可以被一个值为null的引用类型变量调用而不会抛出空指针异常。...这和对象的创建和静态方法以及静态方法之间的关系有关。也就是上面说的那些。

5.4K50
您找到你想要的搜索结果了吗?
是的
没有找到

Java学习笔记之静态方法静态方法静态变量,静态变量四者之间的关系

Java学习笔记之静态方法静态方法静态变量,静态变量四者之间的关系 首先明白这几个名词的意思: 静态方法:即类方法,在类之中,以static关键字申明的方法。...使用方法:直接使用类名.类方法名来进行调用。 静态方法:即成员方法,没有static关键字申明。 使用方法:需要先创建类对象,使用类对象名.成员方法名来进行调用。...这四者之间的关系 静态方法中可以直接调用同类中的静态成员,但不能直接调用静态成员。...静态方法中调用静态变量,可以通过创建类的对象,然后通过对象来访问静态变量 静态方法中可以通过类名.静态方法名来调用,但不能直接调用静态方法,需要通过对象来访问静态方法 静态方法中可以通过类名....静态方法名来调用,但不能直接调用静态方法,需要通过对象来访问静态方法 以上是我在学习Java的过程觉得容易被弄晕的地方,所以总结了一下,如果有什么不对的地方,欢迎指出。

66120

类中的静态静态方法

C#的类中可以包含两种方法静态方法静态方法。   使用了static 修饰符的方法静态方法,反之荝是非静态方法。   ...静态方琺是①種 特殊的成園方琺,它不属纡类的某一个具体的实唎,而是属于类本裑。葰以对静态方法不需要首先创建一个类哋实例,而是采用类名.静态方法的格式 。   ...3.静态方法静态变糧创建后始终使用哃一赽内存,而使用實例的方式会创建多个内存.   4.C#中哋方法有两种:实例方法,靜态方法.   ...类的方法笩码只有一份,它们的生命周期和类是一致哋.实例方法是通过对象名调用的,静态方法与类关联而不是与对象名关联.   5.哪么在程序狆什么地方可以利用静态字段和静态构造方法,通常适用于于一些不会经常变化而又频繁使用的数据...对一个类无论创踺了多少 个实例,它的静态牸段永远都只有一个副本(副本我理解为只有一块内存   静态成员存在于内存,悱静态成员需要实例化才会分配内存,所以静态成员不能访问静态的成员..因潙静态成员存在于禸存

1.4K20

【面试题精讲】Java静态方法为什么不能调用静态成员?

什么是静态方法静态成员? 在 Java 中,静态方法(static method)是属于类的方法,而不是属于对象的方法。它可以通过类名直接调用,无需创建对象实例。...为什么静态方法不能调用静态成员? 静态方法不能调用静态成员的原因是:静态方法在没有对象实例的情况下就可以被调用,而非静态成员必须依赖于对象实例才能访问。...如果允许静态方法调用静态成员,那么在静态方法中无法确定要访问哪个对象的成员,这将导致逻辑上的混乱和错误。 3. 如何解决静态方法无法调用静态成员的问题?...如果在静态方法中需要使用静态成员,可以通过以下两种方式解决: 3.1 创建对象实例 可以在静态方法内部创建一个对象实例,然后通过该对象实例来访问和调用静态成员。...为了解决这个问题,可以在静态方法内部创建对象实例来访问和调用静态成员,或者将静态成员改为静态成员。但需要注意,在设计程序时要合理使用静态方法静态成员,并根据具体需求选择适当的方式。

28330

静态静态

Java静态静态的区别 这里的静态,指以static关键字修饰的,包括类,方法,块,字段。静态变量和静态方法都属于静态对象 静态,指没有用static 修饰的。...出来的对象调用 (2)访问上: 静态方法只能访问类中的静态成员(即静态成员变量和静态方法) 实例方法可以访问类中的任何成员 (3)外部调用...对象名.方法名” 的方式调用 1.静态方法方法用static关键字修饰,静态方法静态成员变量一样,属于类本身,在类装载的时候被装载到内存,不自动进行销毁,会一直存在于内存中,直到JVM关闭。...静态方法无法被重写 需要注意的是:在静态方法中只能访问类中的静态成员跟静态方法,不能直接访问类中的实例变量跟实例方法,原因是静态方法在JVM中的加载顺序也在对象之前,直接使用实例变量跟实例方法的话,可能实例变量跟实例方法所依附的对象并没有被创建...3、线程安全上: 静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发的问题。 静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

60220

Java内部类——静态静态内部类、匿名内部类、方法内部类

概念讲义转载自https://www.sxt.cn/Java_jQuery_in_action/five-inner-class.html -------------------------------...--------------------------------------------------------------------------------------------- 实验代码: 静态内部类...,同时也就屏蔽了外部类的操作 但是如果在内部类中写上外部类的引用和get方法,就可以在这种定义方式的前提下获得外部类的引用了。...静态内部类和静态内部类是有区别的: 内部类有外部类的this指针,但是静态内部类是没有外部类的this指针的,毕竟两者创建的时间也不用。...静态内部类和内部类的调用方法也不同(这是当然的) image.png image.png 匿名内部类 public class NoNameInnerClass { public static

89630

JavaJava中类的初始化顺序(静态方法静态块,静态块,最后有流程图)

我们通过方法运行Java程序,而这个方法中创建了i对象并且属于InitializeDemo 类,所以在main方法执行时会将我们的类进行初始化。...当你知道了上边的规则之后,我们来看代码,类中有五个静态属性,一个静态属性,一个静态块,一个静态块还有一个静态方法。我们优先构建静态方法、属性和静态块,之后在构建静态块。...类的一个对象进行初始化,按照代码顺序从上往下先构建静态的属性、方法静态块,之后在构建静态块和静态属性。...一个类中有静态的本类对象,创建的过程从上到下先执行本类的静态块和静态属性,最后在执行构造方法。...但你要知道,我们在上边初始化的静态块和静态属性所打印的语句是我们的t1和t2对象引起的,并非我们方法内构建的i对象引起的,接下来还要初始化我们的静态块和属性。

11410

(转) Java 静态代码块和静态代码块

参考:http://uule.iteye.com/blog/1558891 Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次。...静态代码块是在类new一个实例的时候执行,而且是每次new对象实例都会执行。...代码的执行顺序 主调类的静态代码块 对象父类的静态代码块 对象的静态代码块 对象父类的静态代码块 对象父类的构造函数 对象的静态代码块 对象的构造函数 示例代码 public class StaticBlockTest1...{ //主调类的静态代码块 { System.out.println("StaticBlockTest1 not static block"); }...zhangsan50 //主调main方法 1 2 3 4 5 6 7 8 9 总结: 按照前面提到的顺序执行 子类定义无参构造方法,调用的父类也是无参构造方法

1.1K10

java_自由块(静态块和静态块)

java中的自由块分为两种: 静态块和静态静态块: 1 public class Test { 2 static int x = 10; 3 //静态块:静态块的执行时机是在class...文件装载的时候;静态块只会执行一次 4 //多个静态块的时候,按出现顺序执行 5 static{ 6 x+=5; 7 } 8 } 静态块: 1 public class...Test { 2 //静态块:每次初始化一个对象,都会导致一次静态块的执行;在构造函数执行之前执行 3 //继承关系:父类的静态块->父类的构造函数->自己的自由块->自己的构造函数...:每次初始化一个对象,都会导致一次静态块的执行;在构造函数执行之前执行 21 //继承关系:父类的静态块->父类的构造函数->自己的自由块->自己的构造函数 22 { 23...System.out.println("before"); 24 } 25 } 控制台输出: before 构造函数 5 更多信息:java自由块

1.1K20

【小家java静态类、静态方法、内部类、匿名内部类、静态类的一些实践

静态内部类适用于不依赖于外部类,不用使用外在类的静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用。...静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法,对其外部类有个引用 有了这两个区别,各位看官应该知道什么时候使用什么样的类了吧 下面是静态方法静态方法的区别: 静态方法(Static...静态方法的使用效率比静态方法的效率高。静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。...静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。...我们会发现java的设计者在设计内部类的时候用心良苦,学会使用内部类,是掌握java高级编程的一部分,它可以让你更优雅的设计你的程序结构。

2.3K30

JNI--静态native方法使用及cc++调用Java变量

上次说到了JNI调用的具体步骤,先再JAVA类中定义了静态native方法,使用javah命令生成c/c++的head文件,再实现相应的c或者c++函数,今天来看下java静态native方法在JNI...image.png 对比上面的静态native方法发现:区别只有第二个参数,静态方法是jclass,静态是jobject 下面开始编写c++代码 #include "my_jni.h" #include...理解:我们java中可以直接使用类名.静态方法的方式在外部调用静态方法,但是非静态方法的外部调用必须使用一个实例化的对象。...反过来看native方法静态静态的区别其实是一样的 接下来,学习使用c/c++获取java的变量,并改变它的值 在JniDemo类中定义一个静态变量 public String javaStr...静态变量和静态变量的调用区别不大,有相应的static方法,设置java变量的具体步骤为:获取fieldId->调用GetXXXField方法获取java对象->如果是基本对象,直接使用,引用对象(jobect

1.6K10

java抽象方法静态方法,默认方法

(静态方法和默认方法除外) 抽象方法 没有具体的实现,实现由实现类(或子类)实现,且必须实现 定义 interface InterfaceDemo{ //默认方法 public abstract...void fun3(); void fun4(); } 因为接口里的方法默认是public abstract 所以修饰符可以省略不写 静态方法 java8允许接口中定义静态方法 通过接口名....方法即可调用静态方法,不能通过实例化实现类来调用方法 interface InterfaceDemo{ public static void fun1(){ System.out.println...("静态方法"); } } 默认方法 java8中允许接口中定义默认方法 java8之前接口与实现类之间的耦合度非常高,在接口中添加一个方法,所有的实现类都必须去实现这个方法,而默认方法的出现结局了这个问题...```java interface InterfaceDemo{ public default void fun2(){ System.out.println("默认方法");

2.6K20

java学习之路:14.类的构造方法静态变量,常量和方法,类的方法

2.静态变量,常量与方法 由static关键字修饰的变量,常量与方法被称做静态变量,常量与方法静态变量,常量与方法被称为静态成员,静态成员属于类所有。.../调用静态变量 array.fun1(); //调用静态方法 } } 虽然静态成员也可以使用“对象.静态成员”的形式进行调用,但是不建议这样做,因为这样容易混淆静态静态成员。...需要注意的点: 在静态方法中不可以使用this关键字。 在静态方法中不可以直接调用静态方法java规定不能将方法体内局部变量声明为static。...3.类的方法 public static void main(String[] args ) { } 方法是类的入口点,它定义了程序从何处开始,方法提供对程序流程的控制,java编译器通过方法来执行程序...方法静态的,所以在方法中调用其他方法,被调用方法也必须是静态的。 方法没有参数。 方法的形参为数组。

87341
领券