java面向对象之static修饰符

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

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,则所有人姓名都一样了,显然是不合理的)

  

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

时间: 2024-10-12 20:38:29

java面向对象之static修饰符的相关文章

Java Basic Notes——static修饰符

1.static 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在.这样做有什么意义呢? 在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制). static 是

java final .static修饰符

static静态修饰符(使用static修饰符修饰的成员变量.常量.和成员方法成为静态变量.常量和方法,他们统称为静态成员,归整个类所有,不依赖于类的特定实例,被类的所有实例共享,只要这个类被加载,JVM就可以根据类名在运行时数据区的方法区找到他们) 静态变量 对于静态变量,运行时,JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配.在类的内部,可以在任何方法内直接访问静态变量:在其他类中,可以通过类名访问该类中的静态变量. 静态变量可以被类的所有实例共享,因此静态变量可以作

详解Java中的访问控制修饰符(public, protected, default, private)

Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获.如果文章中出现错误,欢迎评论指出,共同交流~ 说在前面:这篇文章只研究Java中访问控制修饰符声明类的变量/方法的情况. 先抛出结论: * 成员变量/方法的访问权限 *                                        private        default  

Java面向对象编程之Java语言中的修饰符

近日,读了孙卫琴老师的<Java面向对象编程>一书,心中颇有些感悟,想着将其记录下来. Java中的修饰符 在Java语言中,有这样一些单词(说得再准确点儿,应该是形容词):abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的)和final(不可改变的),它们被成为修饰符,这些修饰符可以修饰类.变量和

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用

1.27 Java基础总结 ①访问修饰符访问权限②类和方法的基本声明和使用 成员变量(属性)①类中添加成员变量 访问修饰符 类型 变量名 private String name ②实例化对象调用类的构造方法类构造对象,Teacher one = new Teacher(): 有static的可以直接调用,因为static是类级别的 ③JavaBean里边一般规则应该有公共的无参构造应该有符合命名规范的get/set方法 ④对象的回收:没有任何引用指向该对象时,GC会回收 主动回收:对象 = nu

关于Java语言中那些修饰符

一.在java中提供的一些修饰符,这些修饰符可以修饰类.变量和方法,在java中常见的修饰符有:abstract(抽象的).static(静态的).public(公共的).protected(受保护的).private(私有的).synchronized(同步的).native(本地的).transient(暂时的).volatile(易失的).final(不可改变的) 二.修饰顶层类的修饰符包括abstract.public和final,而static.protected和private不能修

(转) java中的访问修饰符

对Java中的修饰符一直记不住,现在结合网上的一些资料进行总结,并重点说明一下protected修饰符. 一. Java中的访问修饰符 Java面向对象的基本思想之一是封装细节并且公开接口.Java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节.访问控制分为四种级别: (1)public: 用public修饰的类.类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问: (2)protected: 用protected修饰的类.类属变量及

Java语言中的修饰符

类.方法.成员变量和局部变量的可用修饰符 修饰符 类 成员方法 构造方法 成员变量 局部变量 abstract Y Y _ _ _ static _ Y _ Y _ public Y Y Y Y _ protected _ Y Y Y _ private _ Y Y Y _ synchronized _ Y _ _ _ native _ Y _ _ _ transient _ _ _ Y _ volatile _ _ _ Y _ final Y Y _ Y Y 1.访问控制修饰符: Java语言

【面向对象】访问控制修饰符privat…(转载)

[面向对象]访问控制修饰符privat- 访问控制修饰符 1)访问控制修饰符可以修饰属性.方法.构造方法.类 2)private: 私有访问权限控制,被private修饰的属性.方法.构造方法.只能在本类的内部调用,外界无法访问 eg:   class Teacher { String name; int age; private double salary; Teacher(String name, int age, double salary){ this.name = name; this