• 【Java SE】static成员及代码块


    🐳何为static成员?

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

    🐳static修饰成员变量

    static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。

    特点:

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

    这里定义一个学生类:

    1. public class Test {
    2. public static void main(String[] args) {
    3. System.out.println(Student.classes);// 静态成员变量可以直接通过类名访问
    4. Student s1 = new Student("Li leilei", "男", 18, 93);
    5. Student s2 = new Student("Han MeiMei", "女", 19, 90);
    6. Student s3 = new Student("Jim", "男", 18, 88);
    7. s1.print();
    8. s2.print();
    9. s3.print();
    10. System.out.println(s1.classes);
    11. s1.setAge(19);//修改字段
    12. s1.print();
    13. }
    14. }
    15. //定义一个学生类
    16. class Student{
    17. //字段
    18. private String name;
    19. private String sex;
    20. private int age;
    21. private int score;
    22. public static String classes="六年级";
    23. public Student(String name, String sex, int age, int score) {
    24. this.name=name;
    25. this.sex=sex;
    26. this.age=age;
    27. this.score=score;
    28. }
    29. //行为
    30. public void homework(){
    31. System.out.println(name+"在写作业");
    32. }
    33. public void eat(){
    34. System.out.println(name+"在吃饭");
    35. }
    36. public void setStudent(String name,String sex,int age,int score){
    37. this.name=name;
    38. this.sex=sex;
    39. this.age=age;
    40. this.score=score;
    41. }
    42. public void setName(String name) {
    43. this.name = name;
    44. }
    45. public void setAge(int age) {
    46. this.age = age;
    47. }
    48. public static void setClasses(String classes) {
    49. Student.classes = classes;
    50. }
    51. public String getName() {
    52. return name;
    53. }
    54. public int getAge() {
    55. return age;
    56. }
    57. public static String getClasses() {
    58. return classes;
    59. }
    60. public void print(){
    61. System.out.println(name+"->"+sex+"->"+age+"->"+score+"->"+classes);
    62. }
    63. }

    我们并没有在类外给他们赋值,所以 这也体现了静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。

    当static修饰的成员变量由public变为private的时候,类外就无法通过上述方式访问了。

    🐳static修饰成员方法

    Java中,被static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。

    如:

     


     特点:

    1. 不属于某个具体的对象,是类方法
    2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
    3. 不能在静态方法中访问任何非静态成员变量

    4. 静态方法中不能调用任何非静态方法

    5.在静态方法中调用时候无法传递this引用

    🐳static成员变量初始化

    注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性
     静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

    🐳就地初始化

    要说静态代码块初始化我们就要了解一下代码块:

    🐳代码块

    使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:

    1、普通代码块
    2、构造块
    3、静态块
    4、同步代码块

    🐳普通代码块:

    定义在方法中的代码块。


    🐳构造块:

    定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量

    🐳静态代码块: 

     使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

     

     注意:

    1、静态代码块不管生成多少个对象,其只会执行一次
    2、静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
    3、如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
    4、实例代码块只有在创建对象时才会执行

  • 相关阅读:
    字节首席架构师整合面试痛点,成就399页Java框架核心宝典
    第四章 特定功能单元 第八节 其他不重要内容 (SpringMVC)
    10 个你必须要知道的重要JavaScript 数组方法
    python中的asyncio使用详解与异步协程的处理流程分析
    XTuner InternLM-Chat 个人小助手认知微调实践
    BSA/HSA表面修饰二甘醇酐,人血清白蛋白HSA、牛血清白蛋白BSA偶联二甘醇酐
    Pythonmock基本使用
    邮件群发软件
    【论文阅读|深读】DRNE:Deep Recursive Network Embedding with Regular Equivalence
    【漏洞复现】某厂商明御安全网关sslvpn命令执行漏洞
  • 原文地址:https://blog.csdn.net/m0_67995737/article/details/126167036