java静态方法与非静态方法的区别,java中静态和非静态的区别

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: