JAVA 静态方法不能访问直接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 静态方法不能访问直接相关的知识,希望对你有一定的参考价值。

JAVA 静态方法不能访问直接访问本类的实例变量与实例方法,为什么,写个程序说明下。谢谢

我想就不用代码来说明了
首先静态方法的调用是类调用,而不是对象,在虚拟机中加载类的时候会把静态方法和静态块都放在代码存储块的内存区域里
而实例变量和方法是某个对象的,调用它当然是对象调用
所以当然不可以直接访问
从内存分析来看,当你把一个类new出来的时候虚拟机会会在内存堆栈中给你分配空间来存储地址的引用和值,
而你直接访问的是在内存中的代码存储块里的数据(这个区域里装的都是static的)所以你当然不可以访问new出来的属性,一句话,连内存中都还没的东西你怎么可以访问呢
参考技术A public class smp
int a;
public void aa()
a=1;

public static void ee()
//a=2;

public static void main(String args[])
smp.bb();/*由于ee()是静态方法,在程序运行时会被自动分配内存,所以在main中可以直接访问静态方法ee(),但是这里并没有实例化类smp;既smp中的非静态方法和变量并不存在;如果在ee中有访问到变量a或者方法aa()则会出错*/

参考技术B 静态方法,是跟具体对象无关的,假如现在有一个实例变量a,有两个对象A,B,它们各都有各自的a,如果你在静态方法中访问a,你怎么知道是要访问A的a,还是B的a呢

java函数加不加static有何不同

java中声明为static的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。静态方法不能被子类的静态方法覆盖。
例如:
static class CompanyEmployee{
public static string GetCompanyName(string name) { ... }
public static string GetCompanyAddress(string address) { ... }
}
一般来说,类中标注了static的函数能在类外直接引用,比如说:
String M_string1 =CompanyEmployee.GetCompanyName(M_string2)
而没有标注static的函数则必须声明一个类的实体,有实体来引用。比如说:
static class CompanyEmployee{
public string GetCompanyName(string name) { ... } //没有Staticpublic static string GetCompanyAddress(string address) { ... }
}
CompanyEmployee M_CompE = new CompanyEmployee();
String M_string1 =M_CompE.GetCompanyName(M_string2);//静态类


说白了,就是调用时候方便 不加static是非静态函数,访问需要new出该类的对象来调用,加上static是静态函数 可直接访问或者通过类名访问

你也知道,static method是类的方法,也就是在Class Loader 类加载的时候JVM会生成相应的字节码。它的生命周期是整个application。所以会一直占用内存。如果不经常使用,没有必要用static。

不加static的method就是对象的方法,必须用对象的实例来调用。并随着对象的消亡而消亡。如果频繁使用该方法,内存会不断地开辟空间、释放空间,性能会受影响。

如果一个方法在多处被调用,而且该方法的功能是一些Utility功能,比如格式化等,对于这类方法可以声明为static。

如果方法和对象关系比较紧密,需要用到对象的某些属性,就声明为该对象的方法。
























以上是关于JAVA 静态方法不能访问直接的主要内容,如果未能解决你的问题,请参考以下文章

Java语法基础常见疑惑解答

java内部类可以访问外部类的静态方法吗

java函数加不加static有何不同

java复习路4

Java中的静态方法是啥?

方法的声明和调用——java