java静态要领和非静态要领的区分【JAVA教程】,java,静态方法,区别
作者:搜教程发布时间:2019-11-27分类:JAVA教程浏览:32评论:0
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经典面试题集锦(五)_JAVA教程,java,面试题
- java中的换行符是什么_JAVA教程,java,换行符
- Java中变量必须先定义后使用么_JAVA教程,java,变量
- java中怎么定义接口_JAVA教程,java,接口
- java中静态代码块有什么特点_JAVA教程,java,静态代码块
- java中return语句有什么作用_JAVA教程,java,return
- Java对文件的读写操作(图文详解)_JAVA教程,java
- java经典面试题集锦(四)_JAVA教程,java,面试题
- 八种基本数据类型分别是什么?_JAVA教程,java,基本数据类型
- java如何将字符串转为数组_JAVA教程,java,字符串,数组
你 发表评论:
欢迎- JAVA教程排行
-
- 1接口中只能定义常量和抽象方法,对么_JAVA教程,接口,常量,抽象方法
- 2java文件不能删除文件怎么办_JAVA教程,java
- 3java中sleep的用法是什么?_JAVA教程,java,sleep
- 4java eclipse无法运行怎么办_JAVA教程,java
- 5java图片显示不出来怎么办_JAVA教程,java
- 6java后台乱码怎么办_JAVA教程,java
- 7javascript和java的区别是什么_JAVA教程,javascript,java
- 8java生成随机数的三种方法_JAVA教程,java,随机数
- 9在java中,负责对字节代码解释执行的是什么_JAVA教程,java
- 最新文章
- 广而告之