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

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

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


class Student {
    private String name ;
    private int age ;
    private String classRoom ;//上课教室
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void doClass() {
        System.out.println("姓名 "+ name +" 年龄 " + age +"正在上课学习");
    }
}
public class Main {
    public static void main(String[] args) {
       Student student1 = new Student("小赵",21);
       student1.doClass();
       Student student2 = new Student("小吴",19);
       student2.doClass();
       Student student3 =new Student("小王",20);
       student3.doClass();
    }
}


上述代码的运行结果为:


0a2653c851af460fa595bd959398a8f1.png


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


2d65d23f6d4748949b924e4057485923.png


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


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

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


6de278e6d6694ce5bb08e7e842b7e74b.png


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


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



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


静态成员变量特性 :


不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中

既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问

类变量存储在方法区当中

生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁

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


class Student {
    private String name ;
    private int age ;
   //private String classRoom ;//上课教室
   public static String classRoom ="山东大学数计学院!";
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void doClass() {
        System.out.println("姓名 "+ name +" 年龄 " + age +" 正在上课学习");
    }
}
public class Main {
    public static void main(String[] args) {
        System.out.println(Student.classRoom);
    }
}


上述代码的运行结果为:


34e8d716411043c08c7ffba9fbba23de.png


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


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


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


92ba0822ed0b46e1ae72df8a17d3a45b.png


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


x

class Student {
    private String name ;
    private int age ;
   //private String classRoom ;//上课教室
   public static String classRoom ="山东大学数计学院!";
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public void doClass() {
        System.out.println("姓名 "+ name +" 年龄 " + age +" 正在上课学习");
    }
}
public class Main {
    public static void main(String[] args) {
        System.out.println(Student.classRoom);
    }
}

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


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

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


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


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

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


d79b274929334152a6d38be91e2d1be3.png


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


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


在静态方法内部,不能直接调用非静态的成员方法,所有的非静态方法,一定依赖于对象的引用才能调用!

在静态方法内部不能直接使用非静态的成员数据  原因:非静态的数据成员是属于对象的,当我们调用的时候,没有实列化任何对象!!

只要是非静态的数据成员,都需要通过对象的引用才能调用

静态方法里面是不能使用this的

普通成员方法内部是可以使用静态的成员方法的

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


class Student {
    private static int size = 10;
    //构建getter and setter 方法!!来对数据进行更改!
    public static int getSize() {
        return size;
    }
    public static void setSize(int size) {
        Student.size = size;
    }
}
public class Main {
    public static void main(String[] args) {
        Student.setSize(12);
        System.out.println(Student.getSize());
    }
}

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


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


1.直接赋值


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

2.默认初始化


 

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

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


 

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

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


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


相关文章
|
3月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
111 43
Java学习十六—掌握注解:让编程更简单
|
2月前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
34 3
|
2月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
57 8
|
3月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
52 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
2月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
47 3
|
3月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
44 0
【Java入门提高篇】Day6 Java内部类——成员内部类
  内部类是什么,简单来说,就是定义在类内部的类(一本正经的说着废话)。   一个正经的内部类是长这样的: public class Outer { class Inner{ } }   这是为了演示而写的类,没有什么luan用,可以看到Inner类置于Outer类的内部。
917 0