码迷,mamicode.com
首页 > 编程语言 > 详细

java面向对象之static修饰符

时间:2020-04-06 20:56:52      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:调用   重复   个数   代码   font   public   过程   导致   strong   

在摆实例之前,先搞一些总结上去。。。。

static(静态\修饰符)

1. static修饰成员变量 :如果有数据需要被共享给所有对象使用时,那么就可以使用static修饰。

  静态成员变量的访问方式:

    方式1: 可以使用对象进行访问。
      格式: 对象.变量名。

    方式二: 可以使用类名进行访问。
      格式: 类名.变量名;

注意:
  1. 非静态的成员变量只能使用对象进行访问,不能使用类名进行访问。
  2. 千万不要为了方便访问数据而使用static修饰成员变量,只有成员变量的数据是真正需要被共享的时候
  才使用static修饰。

  static修饰成员变量的应用场景: 如果一个数据需要被所有对象共享使用的时候,这时候即可好实用static修饰。

2. static修饰成员函数:(后续补充)

---------------------------------------------------------------------------------------------------------------------------------------------

  明白了以上东西后可以写一个例子;描述一个女子学校的学生

  首先我们看下没有static修饰的情况下,代码执行时的内存情况:

先上代码:

 1 class Student{
 2     String name;  
 3     String  sex;      
 4     public Student(String name,String sex){
 5         this.name = name;
 6     }
 7 }
 8 
 9 class Main{
10     public static void main(String[] args) 
11     {
12         Student s1 = new Student("周芷若","女");
13         Student s2 = new Student("周敏","女");
14         
15         System.out.println("名字:"+ s1.name+"性别"+s1.sex);
16         System.out.println("名字:"+ s2.name+"性别"+s2.sex); 

17    }
18 }

如上代码在执行时在内存中的存储情况如图

技术图片

 

  可以看到在上面的代码执行过程中每创建一个对象,就会在堆内存中保存一份姓名,一份性别,但是看需求,我们是要描述一个女子学校,那么女子学校当然只有女生了

那么这种写法不想当于浪费内存了?

  解决办法:将性别作为一个可以公共访问的属性,让其在内存中只存一份

那么代码来了。。。

 1 class Student{
 2     String name;  //非静态成员变量
 3     static String sex = "女";      //静态的成员变量        
 4     public Student(String name){
 5         this.name = name;
 6     }
 7 }
 8 
 9 class Main {
10     public static void main(String[] args) 
11     {
12         Student s1 = new Student("周芷若");
13         Student s2 = new Student("赵敏");
14         System.out.println("名字:"+ s1.name+"性别"+s1.sex);
15         System.out.println("名字:"+ s2.name+"性别"+s2.sex);
16     }
17 }

如上将成员变量使用静态修饰符static修饰之后,它会在内存中存一份,所有对象都会调用到该成员变量,在内存中保存如下:

技术图片

  说明:在内存中会有一个方法区(数据共享区),专门存放供公共调用得到数据或者方法

  当使用静态修饰符static修饰成员变量的时候,会把这个变量存放在方法区中,供所有对象去调用(当然它被修改,则其他对象调用时获取到的数据也会修改),当然我们在使用static的时候也一定要在需要的时候添加,否则会导致获取到重复数据(比如如果在上面例子中给name成员变量添加了static,则所有人姓名都一样了,显然是不合理的)

  

 

java面向对象之static修饰符

标签:调用   重复   个数   代码   font   public   过程   导致   strong   

原文地址:https://www.cnblogs.com/qkblogs/p/12643973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!