旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

java静态要领和非静态要领的区分【JAVA教程】,java,静态方法,区别

作者:搜教程发布时间:2019-11-27分类:JAVA教程浏览:32评论:0


导读:java静态要领和非静态要领的区分1、静态要领(staticmethod)与静态成员变量一样,属于类自身,在类装载的时刻被装载到内存中,不自动举行烧毁,会一向存在内存...

java静态要领和非静态要领的区分

1、静态要领(static method)

与静态成员变量一样,属于类自身,在类装载的时刻被装载到内存中,不自动举行烧毁,会一向存在内存中,直到JVM封闭;

2、非静态要领(non-static method)

又称实例化要领,属于实例对象,实例化以后才会分派内存,必需经由过程类的实例来援用,当实例对象被JVM接纳以后,也随着消逝

静态要领和实例要领的区分

1.生命周期

静态要领的生命周期从历程建立时就最先,一向到历程完毕,所以说静态要领是全局的,贯串全部历程

实例要领的生命周期,从实例化对象最先,一向到实例化对象被注销接纳以后完毕

所以实例要领的生命周期是短于静态要领的生命周期,这也是实例要领中不能挪用静态要领的缘由

2.挪用体式格局

在外部挪用静态要领时,能够运用 “类名.要领名”的体式格局,也能够运用“对象.要领名”的体式格局,也就是说挪用静态要领时无需建立对象

实例要领只能运用“对象.要领名的体式格局”

//-----------hasStaticMethod.java-----------------
public class hasStaticMethod{
//定义一个静态要领
public static void callMe(){
  System.out.println("This is a static method.");
}
}

下面这个递次运用两种情势来挪用静态要领。

//-----------invokeStaticMethod.java-----------------
public class invokeStaticMethod{
  public static void main(String args[]){
  hasStaticMethod.callMe(); //不建立对象,直接挪用静态要领 
  hasStaticMethod oa = new hasStaticMethod();  //建立一个对象
  oa.callMe();   //应用对象来挪用静态要领
}
}

3.接见限定

静态要领在接见本类的成员时,只许可接见静态成员(即静态变量和静态要领),而不许可接见实例成员变量和实例要领;而实例要领则无此限定

实例成员变量是属于某个对象的,在静态要领实行时,并不一定存在该对象;同理,假如许可静态要领接见实例成员要领,就间接的能够接见实例成员变量,所以也不能接见实例成员要领;基于一样的原理,静态要领中也不能运用关键字this

//-----------accessMember.java-----------------
class accessMember{
private static int sa; //定义一个静态成员变量
private int ia; //定义一个实例成员变量
//下面定义一个静态要领
static void statMethod(){
  int i = 0;  //准确,能够有本身的局部变量sa = 10;  
  //准确,静态要领能够运用静态变量
  otherStat(); 
  //准确,能够挪用静态要领
  ia = 20;  //毛病,不能运用实例变量
  insMethod(); //毛病,不能挪用实例要领
}
static void otherStat(){} 
//下面定义一个实例要领 
void insMethod(){
  int i = 0;  //准确,能够有本身的局部变量
  sa = 15;  //准确,能够运用静态变量
  ia = 30;  //准确,能够运用实例变量
  statMethod();  //准确,能够挪用静态要领
}
}

4.实行递次

当一个class文件被ClassLoader load进入JVM以后,要领指令保存在Stack中,此时Heap区并没有数据。然后递次手艺器最先实行指令,假如是静态要领,直接顺次实行指令代码,固然此时指令代码是不能接见Heapshuju数据区的;假如是实例要领(实例要领有一个隐含的传入参数,该参数是JVM给它的,这个参数就是实例对象在Stack中的内存地址,因而实例要领才能够找到在Heap中属于本身的数据),则在挪用前必需实例化该对象,在Heap中分派数据,并将Stack中的内存指针经由过程JVM的隐含参数传给实例要领。若不实例化直接挪用,因为隐含参数没有值,会报错。

以上就是java静态要领和非静态要领的区分的细致内容,更多请关注ki4网别的相干文章!

标签:java静态方法区别


欢迎 发表评论: