Java静态变量和实例变量

1、静态变量

在以前咱们学习了变量能够分为局部变量(方法中定义的)和成员变量(成员变量是在类中定义的),其中成员变量又能够细分为两种:静态变量和实例变量。java

静态变量是使用static 修饰的成员变量(属性)就是静态变量,静态变量保存在一块共享空间(方法区),这个区叫作全局数据区,保存在这个区的数据是共享的。,到目前为止咱们见过了哪些内存空间啊?堆、栈、方法区(保存static修饰的变量或者方法信息)面试

DEMO:观察代码

 package com. bai . demo;
public class Student {
      //为 了咱们方便操做数据暂时不定义为私有属性(严格来讲是要定义为私有属性的)
      String name;
      int    age ;
      String school;
}
   package com. bai . demo;
public class Hello {
   public static void main(String[] args) {
       //建立第一个学生对象
      Student    s1=new Student();
      s1. name="李四";
      s1. age=19;
      s1. school="南京大学";
      //建立第二个学生对象.
      Student   s2=new   Student();
      s2. name="张三";
      s2. age=20;
      s2.school1="南京大学";
      //建立第三个学生对象
      Student s3=new Student( );
      s3. name="赵柳" ;
      s3.age=17;
      s3. school="南京大学";
      System. out. println("第- -个学生信息:名字---》 "+s1.name+" ,年龄---》"+s1.age+"学
校----》"+s1. school);
      System. out . println("第二个学生信息:名字---》"+s2.name+", 年龄---》"+s2.age+"学
校----》"+s2. school);
      System. out . println("第三个学生信息:名字---》"+s3. name+",年龄---》"+s2. age+"学
校----》"+s3. school);
     }
  }

 

思考:假若有一千个学生对象,可是全部学生的学校信息都是同样的,此时若是要将全部学生的学校信息进行修改,则要在每一个对象中修改,要修改1000次。这样的就增大了工做量,不方便代码的维护,此时最好的作法是将学校信息声明为静态变量,以后静态变量是每一个对象共享的,只须要在一个地方进行修改其余对象也会共享到修改的数据。spring

 

DEMO:声明为静态变量设计模式

 

  package com. bai . demo;
public class Student {
    //为了咱们方便操做数据暂时不定义为私有属性(严格来讲是要定义为私有属性的)
    String  name ;
    int    age ;
    static String school;
}
  package com. bai. demo;
public class Hello {
    public static void main(String[] args) {
       //建立第-一个学生对象
       Student    s1=new Student();
       s1. name="李四";
       s1.age=19;
       s1. school="北京大学";
       //建立第二个学生对象
       Student s2=new Student();
       s2. name="张三";
       s2. age=20;
       //建立第三个学生对象
       Student s3=new Student();
       s3. name="赵柳" ;
       s3. age=17 ;
       System. out. println("第- -一个学生信息:名字---》"+s1. name+",年龄---》"+s1. age+"学
校----》"+s1. school);
       System. out . println("第二个学生信息:名字--》"+s2.name+" ,年龄---》"+s2.age+"学
校----》"+s2. school);
       System. out. println("第三个学生信息:名字---》 "+s3.name+", 年龄---》"+s2.age+"学
校----》"+s3.school);

 

此时只须要修改一个对象的学校信息就能够影响到其余使用Student类建立学生对象的学校信息。说明了静态变量是每一个使用该类建立的实例对象共享的变量。微信

DEMO:观察代码分布式

发现了静态属性(静态变量)能够使用“类名.属性名”的方式引用(因此还被叫作类变量),还能够使用“对象名.属性名”的方式引用,可是普通的属性(实例变量)不能使用“类名属性名”的方式引用。学习

静态变量没有实例化对象(建立对象)也能够访问,因此咱们把静态变又叫作类变量,非静态属性须要实例化对象以后才能访问,因此他叫作实例变量。spa

 

DEMO:记住设计

package com. bai . demo;
public class Student {
   //为了咱们方便操做数据暂时不定义为私有属性(严格来讲是要定义为私有属性的)
   String name;//实例变量 需 要先建立对象以后才能经过“对象名.属性名”方式访问
   int    age; //实例变量 须要先建立对象以后才能经过“对象名.属性名”方式访问
   static String   school;//静态变量,属于类的,使用该类建立的对象共享,能够使用“类名.
属性名”的方式访问
}

 

总结:3d

一、静态变量的概念:使用static 修饰的变量就是静态变量,静态变量保存在,方法区(全局数据区)

二、静态变量能够使用“类名.属性名”和“对象名.属性名”的方式访问,因此静态变量又叫作类变量

三、非静态变量只能使用“对象名.属性名”的方式访问,依赖于对象(实例)存在,因此叫作实例变量。

 

 

 

 

有完整的Java初级,高级对应的学习路线和资料!专一于java开发。分享java基础、原理性知识、JavaWeb实战、spring全家桶、设计模式、分布式及面试资料、开源项目,助力开发者成长!


欢迎关注微信公众号:码邦主

 

相关文章
相关标签/搜索