不应该通过实例访问静态成员_Java静态变量和实例变量

一、静态变量

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

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

d87ea49f5238f35e89f2693b351e8b54.png

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);     }  }

54d6eaf3ec62e6ecc65c9f3d5b063ac6.png

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

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);

ecb378143c8e30f77fa090b922d7d677.png

此时只需要修改一个对象的学校信息就可以影响到其他使用Student类创建学生对象的学校信息。说明了静态变量是每个使用该类创建的实例对象共享的变量。

DEMO:观察代码

67fadbf4d0073c38ea7b0d5a254d52cd.png

发现了静态属性(静态变量)可以使用“类名.属性名”的方式引用(所以还被叫做类变量),还可以使用“对象名.属性名”的方式引用,但是普通的属性(实例变量)不能使用“类名属性名”的方式引用。

静态变量没有实例化对象(创建对象)也可以访问,所以我们把静态变又叫做类变量,非静态属性需要实例化对象之后才能访问,所以他叫做实例变量。

DEMO:记住

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

总结:

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

2、静态变量可以使用“类名.属性名”和“对象名.属性名”的方式访问,所以静态变量又叫做类变量

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

73da9c5f9f3bfed7e08bfbc8ee2c44c1.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值