• 全国 [切换]
  • 二维码
    错改网

    手机WAP版

    手机也能找商机,信息同步6大终端平台!

    微信小程序

    微信公众号

    当前位置: 首页 » 行业新闻 » 热点新闻 » 正文

    Java中static与instance的区别

    放大字体  缩小字体 发布日期:2020-01-06 14:57:42   浏览次数:1213  发布人:5bc5****  IP:101.229.35.***  评论:0
    导读

    1.概念: java中有个关键字叫static,翻译为静态,用来修饰属性和方法。它所修饰的属性叫静态属性或类变量,修饰的方法叫静态方法或者类方法。而没有使用static修饰的属性和方法就叫实例变量和方法,即instance翻译为实例的意思。 2.static与instance的作用: static实现了在同一个类的对象中共享数据。即同一个类中的不同对象都需要用到的属性,就像一个班级类,它的每个学生

    1.概念:

    java中有个关键字叫static,翻译为静态,用来修饰属性和方法。它所修饰的属性叫静态属性或类变量,修饰的方法叫静态方法或者类方法。而没有使用static修饰的属性和方法就叫实例变量和方法,即instance翻译为实例的意思。

    2.static与instance的作用:

    static实现了在同一个类的对象中共享数据。即同一个类中的不同对象都需要用到的属性,就像一个班级类,它的每个学生对象都会用到班级名称,是他们所共有的,每一个学生对象都共享这个班级名称,就需要使用static来修饰。
    而instance则是每个学生对象自己所独有的属性,例如每个学生对象都有自己的名字、身高、年龄等属性就是instance修饰,但只有static才需要特别写出来,instance就不用写出来。

    3.static修饰属性和方法:

    1.static修饰属性(静态变量):

    1 static String className;

    2.static修饰方法(静态方法):

    1 public static void getScore(){ }

    4.instance属性和方法:

    1.实例属性:

    1 String name;

    2.实例方法:

    1 public void getScore(){ }

    4.static与instance的区别:

    1.加载时间不同:
    • 静态属性和方法是在首次出现类名时,为类的静态属性和方法分配内存。
    • 实例属性和方法是类new对象的时候,为类的实例属性和方法分配内存。
    2.份数不同:
    • 静态属性和方法只有一份多个对象享用,而实例属性和方法是有多少个对象就有多少份。
    3.初始化方法不同:
    • 静态变量是除了通过定义时手动确定外还可以通过static块(静态块)来初始化。
      例如:

    static int age=0; //定义时手动初始化。 //静态块,为static变量初始化,静态块在首次类名出现时调用,但后于分配静态变量。 static{ age = 20; }

    静态块:
    类名首次出现时,先为静态变量分配内存,然后调用静态块,静态块可以为静态变量初始化。静态块只在类名首次出现时调用一次,以后再也不调用了。

    • 动态变量则是除了定义时手动赋值外还通过构造方法赋值(一般用构造方法初始化)
      例如:

    String name= "张三"; //定义时手动初始化。 Test(String name){ //带一个参数的构造方法。 this.name=name; } public static void main(String[] args) { Test t1=new Test("张三"); //通过构造方法初始化。 }

    4.内存存放地址不同:
    • 静态变量被分配在方法区中,常驻内存,永不回收。
    • 实例变量被分配在堆中,用完回收。
    5.调用方法不同:
    • 静态方法只可以调静态方法和变量不可以调用实例方法和变量。
    • 实例方法既可以调用实例变量和方法还可以调用静态变量和方法。
      原因:静态方法是在首次出现类名时分配内存调用的此时并不知道有没有实例变量和方法。
      案例分析:

    public class Test { static int age; public static void main(String[] args) { age = 2; //此方法正确,都是静态的,类名首次出现就分内存 } }

    public class Test { public static void main(String[] args) { } public void sayHello(){ } public static void sayHi(){ //报错,不知道sayHello()有没有 sayHello(); } }

    public class Test { int age; public static void main(String[] args) { //报错,不知道age属性有没有。 age = 2; } }

    public class Test { int age; public static void main(String[] args) { //正确,创建对象new Test()调用属性age表明已存在age属性就能调用 new Test().age = 2; } }

    不推荐电脑端访问(用户少)
    请微信扫一扫,查看完整信息(记得微信收藏)
     
    (文/匿名(若涉版权问题请联系我们核实发布者) / 非法信息举报 / 删稿)
    打赏
    免责声明
    • 
    本文为昵称为 5bc5**** 发布的作品,本文仅代表发布者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,发布者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们154208694@qq.com删除,我们积极做(权利人与发布者之间的调停者)中立处理。郑重说明:不 违规举报 视为放弃权利,本站不承担任何责任!
    有个别老鼠屎以营利为目的遇到侵权情况但不联系本站或自己发布违规信息然后直接向本站索取高额赔偿等情况,本站一概以诈骗报警处理,曾经有1例诈骗分子已经绳之以法,本站本着公平公正的原则,若遇 违规举报 我们100%在3个工作日内处理!
    0 条相关评论
     

    (c)2008-现在 cuogai.com All Rights Reserved.