Java之static成员与代码块

Java之static成员与代码块_第1张图片

⭐️前言⭐️
本篇文章主要介绍JavaSE中一些不是很常见的知识点,但也会涉及,需要了解一下

博客主页: 【如风暖阳】
精品Java专栏【JavaSE】、【Java数据结构】、【备战蓝桥】、【JavaEE初阶】
欢迎点赞 收藏留言评论 私信必回哟

本文由 【如风暖阳】 原创,首发于 CSDN

博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

博客中涉及源码及博主日常练习代码均已上传码云(gitee)


内容导读

  • Java之static成员与代码块
    • 1.static成员
      • 1.1 static修饰成员变量
      • 1.2 static修饰成员方法
      • 1.3 static成员变量初始化
    • 2. 代码块
      • 2.1 代码块概念及分类
      • 2.2 代码块示例

Java之static成员与代码块

1.static成员

1.1 static修饰成员变量

假设学生类中有姓名、分数、年龄、班级等属性,但这两个同学都在同一个班级里。
在Student类中定义的成员变量,每个对象中都会包含一份(称之为实例变量),因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室,这个教室的属性并不需要每个学生对象中都存储一份,而是需要让所有的学生来共享。

class Student {
    String name;
    double score;
    int age;
    static String classes="1";

    public Student(String name, double score, int age) {
        this.name = name;
        this.score = score;
        this.age = age;
    }
}
public class Demo1 {
    public static void main(String[] args) {
        Student s1=new Student("小明",88.0,18);
        Student s2=new Student("小红",89.2,19);
    }
}

Java之static成员与代码块_第2张图片
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。

【静态成员变量特性】

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

1.2 static修饰成员方法

class Student {
    //......
    public static void staticFunc() {
        System.out.println("这是一个静态方法!");
    }
}
public class Demo1 {
    public static void main(String[] args) {
      Student.staticFunc();
    }
}
//这是一个静态方法!

【静态方法特性】

  1. 不属于某个具体的对象,是类方法
  2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  3. 不能直接在静态方法中访问任何非静态成员(可以通过实例化对象或者传参的方式获取非静态成员属性)

1.3 static成员变量初始化

注意:静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性

静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。

  1. 就地初始化
    就地初始化指的是:在定义时直接给出初始值
class Student {
    String name;
    double score;
    int age;
    static String classes="1";
    //.....
}
  1. 静态代码块初始化
    那什么是代码块呢?继续往后看

2. 代码块

2.1 代码块概念及分类

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

  • 本地代码块
  • 实例代码块
  • 静态代码块
  • 同步代码块(后续讲解多线程部分再谈)

2.2 代码块示例

class Student {
    String name;
    double score;
    int age;
    static String classes="1";

    public Student(String name, double score, int age) {
        this.name = name;
        this.score = score;
        this.age = age;
        System.out.println("构造方法!");
    }

    static {
        classes="2";
        System.out.println("静态代码块!");
    }

    {
        this.age=20;
        System.out.println("实例代码块!");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        Student s1=new Student("小明",91.2,19);
        System.out.println("===================");
        Student s2=new Student("小王",90,19);
        {
            System.out.println("本地代码块!");
        }
    }
}


//
静态代码块!
实例代码块!
构造方法!
===================
实例代码块!
构造方法!
本地代码块!

本地代码块:定义在方法中的代码块(比较少用)
实例代码块:定义在类中的代码块(不加修饰符)。一般用于初始化实例成员变量。
静态代码块:使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

注意事项

  • 先执行静态的【加载了类就会被执行】
    如果有多个静态的,看定义顺序,按顺序执行
    如果没有实例化对象,那么只会执行静态的
class Student {
    String name;
    double score;
    int age;
    static String classes="1";

    public Student(String name, double score, int age) {
        this.name = name;
        this.score = score;
        this.age = age;
        System.out.println("构造方法!");
    }

    static {
        classes="2";
        System.out.println("静态代码块!");
    }

    {
        this.age=20;
        System.out.println("实例代码块!");
    }
}
public class Demo1 {
    public static void main(String[] args) {
        System.out.println(Student.classes);
    }
}
//
静态代码块!
2

静态的只会执行一次

  • 再执行实例的数据【有多个实例的话要看定义的顺序】
  • 最后执行构造函数

⚡️最后的话⚡️

总结不易,希望uu们不要吝啬你们的哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正

在这里插入图片描述

你可能感兴趣的:(JavaSE,java,蓝桥杯,开发语言)