• 浅谈一下:Java学习中不得不知道的:static (静态)成员


    下面笔者,按照之前的Student进行简单的说明:

    1. class Student {
    2. private String name ;
    3. private int age ;
    4. private String classRoom ;//上课教室
    5. public Student(String name, int age) {
    6. this.name = name;
    7. this.age = age;
    8. }
    9. public void doClass() {
    10. System.out.println("姓名 "+ name +" 年龄 " + age +"正在上课学习");
    11. }
    12. }
    13. public class Main {
    14. public static void main(String[] args) {
    15. Student student1 = new Student("小赵",21);
    16. student1.doClass();
    17. Student student2 = new Student("小吴",19);
    18. student2.doClass();
    19. Student student3 =new Student("小王",20);
    20. student3.doClass();
    21. }
    22. }

    上述代码的运行结果为:

    对于上述的代码,笔者画图简单解析一下:(堆区)

    但是,对于每个学生的classRoom(上课教室)都一样!!因此,我们可以:

    public static String classRoom ="山东大学数计学院!";

    因此,当我们加了static 以后,每个对象里面,就没有了classRoom 只有name 和age ,此时的classRoom 在方法区!

    因此,相当于,全部的学生,都在一个教室: 山东大学数计学院!

    在Java当中,被static修饰的成员变量称为静态成员,也可以称为:类成员!其不属于某个具体的对象,是所有对象所共享的

    static修饰的成员变量,称为静态成员变量

    静态成员变量特性 :

    1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
    2.  既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
    3.  类变量存储在方法区当中
    4.  生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁

     笔者将上面的代码;public static String classRoom ="山东大学数计学院!";,通过类名访问一下:

    1. class Student {
    2. private String name ;
    3. private int age ;
    4. //private String classRoom ;//上课教室
    5. public static String classRoom ="山东大学数计学院!";
    6. public Student(String name, int age) {
    7. this.name = name;
    8. this.age = age;
    9. }
    10. public void doClass() {
    11. System.out.println("姓名 "+ name +" 年龄 " + age +" 正在上课学习");
    12. }
    13. }
    14. public class Main {
    15. public static void main(String[] args) {
    16. System.out.println(Student.classRoom);
    17. }
    18. }

    上述代码的运行结果为:

     在上述的代码中,没有开辟对象,但是仍能打印出来结果,证明,静态类的成员不属于对象,所以不用通过对象的引用来访问,直接通过类名就可以访问!!(静态不依赖于对象

    下面讲解一下:用static修饰的成员方法

    打今儿起,开始接触静态成员修饰的方法,所以,对于成员方法的叫法,我们也该改改口了!!

     静态成员方法:大致的写法为:

    1. public static void func() {
    2. System.out.println("static func()");
    3. }

    非静态成员方法:大致的写法为:

    1. public void doClass() {
    2. System.out.println("姓名 "+ name +" 年龄 " + age +" 正在上课学习");
    3. }

    上述的区别主要在于:有无static !!

    输出静态成员方法跟输出静态成员变量一样:Main 函数里面的写法为:

    1. public static void main(String[] args) {
    2. Student.func();
    3. }

    然后就可以成功的输出最后的结果:

     因此,通过上述的代码可以看出:静态的成员方法,也不依赖于成员变量!

    在静态方法中,我们需要注意的是:

    1. 在静态方法内部,不能直接调用非静态的成员方法,所有的非静态方法,一定依赖于对象的引用才能调用!
    2. 在静态方法内部不能直接使用非静态的成员数据  原因:非静态的数据成员是属于对象的,当我们调用的时候,没有实列化任何对象!!
    3. 只要是非静态的数据成员,都需要通过对象的引用才能调用
    4. 静态方法里面是不能使用this的
    5. 普通成员方法内部是可以使用静态的成员方法的

    在我们一般进行Java项目的时候,一般类中的数据成员都设置为private ,而成员方法设置为public 

    1. class Student {
    2. private static int size = 10;
    3. //构建getter and setter 方法!!来对数据进行更改!
    4. public static int getSize() {
    5. return size;
    6. }
    7. public static void setSize(int size) {
    8. Student.size = size;
    9. }
    10. }
    11. public class Main {
    12. public static void main(String[] args) {
    13. Student.setSize(12);
    14. System.out.println(Student.getSize());
    15. }
    16. }

    获取静态的成员变量或者是设置静态的成员变量,此时的方法最好是静态的,否则,你要是非静态的,你还得实列化对象,这就好比,脱裤子放屁,多费手续!!

    下面讲解一下:对于静态变量的初始化!

    1.直接赋值

    public static String classRoom ="山东大学数计学院!";

    2.默认初始化

    1. public static int arr ; // arr---->0
    2. public static String classRoom ; //classRoom ------>null

    3.可以通过getter 和setter方法来进行初始化

    1. //构建getter and setter 方法!!来对数据进行更改!
    2. public static int getSize() {
    3. return size;
    4. }
    5. public static void setSize(int size) {
    6. Student.size = size;
    7. }

    4.在构造对象的时候,可以在构造方法中进行赋值(不建议这样写)

    5.通过代码块进行赋值!!(对于代码块是什么??请详见笔者下篇博客!)

  • 相关阅读:
    再有人说synchronized是重量级锁,就把这篇文章扔给他看
    口碑好的猫罐头有哪些?宠物店受欢迎的5款猫罐头推荐!
    推荐一个屏幕上鼠标高亮显示的小工具
    使用Oracle IMP导入数据
    C#实现一个万物皆可排序的队列
    面试:“索引背后的数据结构是什么样的?”,五分钟带你了解“B树,B+树”
    HTML5笔记
    Python---练习:封装一个函数,用于生成指定长度的验证码
    HTML表格学习
    Awesome GIS
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/127955702