java静态方法与非静态方法的区别,java中静态和非静态的区别
java静态方法和非静态方法的区别
1、静态方法(static method)
像静态成员变量一样,它们属于类本身,并且在类被加载时被加载到内存中。它们不会被自动销毁,并将一直保留在内存中,直到JVM关闭。
2、非静态方法(non-static method)
也叫实例化方法,属于实例对象,实例化后才会分配内存。它必须被一个类的实例引用,当实例对象被JVM回收时,它也会消失。
静态方法和实例方法的区别
1.生命周期
静态方法的生命周期从创建一个流程开始,到结束,所以它是全局的,贯穿整个流程。
方法的生命周期从对象的实例化开始,在对象的实例化被取消和回收之后结束。
所以实例方法的生命周期比静态方法短,这也是静态方法不能在实例方法中调用的原因。
2.调用方式
在外部调用静态方法时,可以使用“类名”的方法。方法名“或”对象。方法名”,这意味着在调用静态方法时不需要创建对象。
实例只能使用“对象方式”。方法名称"
hasStaticMethod.java
公共类hasStaticMethod{
//定义静态方法
公共静态void callMe(){
System.out.println(这是静态方法。);
}
}下面的程序使用两种形式调用静态方法。
invokeStaticMethod.java
公共类invokeStaticMethod{
公共静态void main(String args[]){
hasstaticmethod . call me();//不创建对象,直接调用静态方法
hasStaticMethod OA=new hasStaticMethod();//创建一个对象
OA . call me();//使用对象调用静态方法
}
}3.访问限制
访问该类成员时,静态方法只允许访问静态成员(即静态变量和静态方法),不允许访问实例成员变量和实例方法;实例方法没有这样的限制。
实例变量属于一个对象,在执行静态方法时不一定存在;同样,如果允许静态方法访问实例成员方法,就可以间接访问实例成员变量,所以也不能访问实例成员方法。同样,关键字this不能用在静态方法中。
accessMember.java
类访问成员{
私有静态int sa//定义静态成员变量
private int ia//定义实例成员变量
//在下面定义一个静态方法
静态void statMethod(){
int I=0;//正确,可以有自己的局部变量sa=10
//正确,静态方法可以使用静态变量
other stat();
//正确,可以调用静态方法
ia=20//错误,不能使用实例变量。
ins method();//错误,无法调用实例方法。
}
静态void otherStat(){}
//定义下面的示例方法
void in method(){
int I=0;//正确,可以有自己的局部变量
sa=15//正确,可以使用静态变量
ia=30//正确,可以使用实例变量
stat method();//正确,可以调用静态方法
}
}4.执行顺序
当类加载器将类文件加载到JVM中时,方法指令保存在堆栈中,此时堆区域中没有数据。然后程序技术员开始执行指令。如果是静态方法,直接依次执行指令代码。当然,此时指令代码无法访问Heapshuju数据区;如果是实例方法(实例方法有一个隐式传入参数,是JVM给它的,这个参数是实例对象在栈中的内存地址,所以实例方法可以在堆中找到自己的数据),它必须实例化对象,在堆中分配数据,通过JVM的隐式参数将栈中的内存指针传递给实例方法。如果没有实例化就直接调用,将会报告一个错误,因为隐含的参数没有值。这就是java静态方法和非静态方法区别的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。