「java静态函数调用」java静态函数调用非静态函数

博主:adminadmin 2023-03-22 12:45:08 828

本篇文章给大家谈谈java静态函数调用,以及java静态函数调用非静态函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Java中静态函数包括主函数可以调用静态变量和静态函数还有生成非静态的类对象及调用对象的方法。

编译时候是生成class文件,执行时候类装载进内存,先开辟空间安放静态成员和方法,在实例化生成对象的时候再为非静态的成员等开辟空间

java中,静态方法被调用是,存储在内存的哪个区域?是栈?还是放大区?还是两者都有?

在JDK8之前,静态成员(静态变量和静态方法)都是存储在方法区(永久代)中的静态区中(这里指类被加载后,静态成员的存储位置)。但在JDK8之后,永久代被移除了,取而代之的是元空间(metaspace)。但元空间中存储的主要是.class文件的元数据信息,静态成员的存储位置由方法区转到了堆内存(heap)中。

不过,不管是JDK8,还是更早的版本中,静态方法的执行(不仅仅是静态方法,还有普通的成员方法)都是在栈内存(stack)中进行的。每个线程都会在栈内存中开辟一个栈,在调用方法时,对应的方法都会在执行这个方法的线程的栈中创建一个“栈帧”,栈帧中保存了局部变量表(基本数据类型和对象引用)、操作数栈、动态连接和返回地址等信息。等到方法执行完毕,栈帧被销毁,对应的内存也将被释放。

静态方法怎么调用

先在eclipse中创建一个Java工程文件。并在src下创建demo包,在demo包下创建类DemoClass。创建后的工程目录如图。

02

接下来在DemoClass类中添加一个静态属性和静态方法。被static修饰的属性或方法就是静态的。

03

对于静态方法的调用,可以使用调用非静态方法的方式去调用,即创建一个类的对象,然后再调用静态方法,具体代码如下图。

04

编辑好代码后,通过java应用程序的方式运行DemoClass.java文件,运行结果如图2,说明成功调用了静态方法。

05

不过,上面调用静态方法的方式是不推荐的。如果使用上面的方式调用静态方法,在eclipse中,你可以看到下图的警告,大概的意思是要你使用正确的调用静态方法的方式去调用该方法。

06

对于静态方法,正确调用的方式是直接通过类名来调用的。用调用例子中的staticFunction为例,正确调用该方法的代码为

DemoClass.staticFunction。当用类来调用静态方法时,可以看到eclipse就不报警告了。

07

再次运行该文件,运行结果和刚刚一样,说明也成功调用了静态方法。

08

多说一句,对于静态属性的调用,也是用类名+点+静态属性的方式来调用的,正常都不会先创建一个对象,然后再通过对象来调用静态属性。

java中,未创建对象时,静态函数不可以调用非静态函数,那要是创建对象后,静态函数可以调用非静态函

静态函数不能直接调用非静态函数这是指直接用类名调用;

如果创建了对象,是可以通过对象来调用对象的非静态函数的。

java,静态方法为什么不能调用类成员?

楼主想问的应该是不用调用成员变量吧

首先,这涉及到代码执行优先级的问题,在一个Java类中,存在的代码形式有静态代码块(花括号{}包裹住的代码片段),静态方法,构造函数,成员方法。不同形式的代码执行顺序不同:

1、静态代码块:当类被载入时,静态代码块被执行,且只被执行一次,静态代码块常用来执行类属性的初始化。

2、静态方法(也叫类方法):在类加载的时候,在不创建对象的情况下执行,可以直接用类名调用。

两者的区别是静态代码块是主动执行的,静态方法是被动执行,只有被调用时才执行。

3、构造函数在创建对象的时候执行。

4、成员方法在被调用的时候执行。

总结:Java代码执行先后顺序:静态代码块静态方法构造函数=非静态代码块。

在了解执行顺序后,楼主的问题就很容易解答了。

从层级上看,静态方法属于类级别,成员变量属于对象级别。同时静态方法也先于构造函数执行,内存也没给类成员分配空间,说白就是都不存在,你静态方法调用一个不存在的变量肯定不行的呀。

java中如何在静态方法中实现对非静态方法的调用,请问各位有没有具体的例子?

public class A{\x0d\x0a //类A中非静态方法\x0d\x0a\x0d\x0a public void func(){ ...... }\x0d\x0a \x0d\x0a //类A中静态方法(主函数)\x0d\x0a\x0d\x0a public static void main(String[] args){\x0d\x0a A a=new A();//需实例化A的对象后才可以调用A中非静态方法\x0d\x0a a.func();\x0d\x0a }\x0d\x0a\x0d\x0a如上面这个简单的例子,静态方法对非静态方法发起调用时,需实例化包含非静态方法的类的对象。如果类A中静态方法需调用类B中非静态方法时,也需实例化B的对象。\x0d\x0a\x0d\x0a原因解释:类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。所以在静态方法中调用非静态方法时,编译器会报错(Cannot make a static reference to the non-static method func() from the type A)。\x0d\x0a\x0d\x0a不知这么说你懂了没,如果还有什么不懂可以继续问我。

java静态函数调用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java静态函数调用非静态函数、java静态函数调用的信息别忘了在本站进行查找喔。