前言:我认为这个问题本身是相对于实例方法而言的,因为实例方法可以访问所有全局变量,所有一个通过比较静态方法和实例方法的角度来解答这个问题。
一.语法不同
静态方法(被static修饰):static void a(){方法体};
实例方法(不被static修饰):void b(){方法体};
二.调用方法不同
调用静态方法:1.使用"类名.方法名"的方式,2.使用"对象名.方法名"的方式;
调用实例方法:只能通过"对象名.方法名"的方式;
也就是说,调用静态方法可以无需创建对象。
原因:
静态方法属于类对象,使用公共内存空间,线程执行"类名.方法名"这段代码时,JVM会执行这个类的字节码文件(.class文件),就是把字节码文件加载到内存中然后根据字节码文件(.class文件)创建类对象(Class对象),然后通过类对象(Class对象)调用这个静态方法。
扩展内容:
JVM加载字节码文件和
JVM创建类对象,是俩个步骤。
三.能访问的本类的类成员不同
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
原因:
静态方法不可以调非静态全局变量,从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中并被初始化,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被new的实例(对象)在内存中是不存在的,而非静态的全局变量是在new一个实例时才会被在内存中创建,所以静态方法是不能访问非静态的全局变量,除非在类被实例化的时候,就是new 了这个类的对象时候,在内存中给这个类开辟一些内存空间保存这个类的对象并创建并初始化了非静态全局变量,这个时候就可以用静态方法去访问非静态的全部变量。
java不可用怎么解决 java不能调用方法
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:主板的四种架构结构 主板结构组成
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python中样本熵函数输出inf
译者 | VK 【导读】:本文为大家介绍了Python机器学习算法的7个损失函数的详细指南,希望对大家有所帮助。概述学习什么是损失函数以及它们如何在机器学习算法中工作损失函数实际上是我们经常使用的技术的核心本文介绍了多种损失函数与它们的工作原理以及如何使用Python对它们进行编程介绍想象一下-你已经在给定的数据集上训练了机器学习模型,并准备好将它交付给客户。但是,你如
python中样本熵函数输出inf 为什么使用交叉熵代替二次代价函数 损失函数的意义和作用 损失函数 多分类