Java基础 第二节 第八课

举报
我是小白呀iamarookie 发表于 2021/09/10 00:42:41 2021/09/10
【摘要】 static 关键字 概述定义和使用格式类变量静态方法注意事项 调用格式 静态原理图解静态代码块 概述 关于 static 关键字的使用, 它可以用来修饰的成员变量和成员方法. ...

概述

关于 static 关键字的使用, 它可以用来修饰的成员变量和成员方法. 被修饰的成员是属于类的, 而不是单单属于某个对象的. 也就是说, 既然属于类, 就可以不靠创建对象来调用了.

定义和使用格式

类变量

当 static 修饰成员变量时, 该变量称为类变量. 该类的每个对象都共享一个类变量的值. 任何对象都可以更改该变量的值. 但也可以在不创建该类的对象的情况下对类变量进行操作.

类变量: 使用 static 关键字修饰的成员变量.

定义格式:

static 数据类型 变量名;

  
 
  • 1

举例:

static int numberID;

  
 
  • 1

比如说, 基础班新班开班, 学员报到. 现在想为每一位新来报到的同学编学号 ( sid ), 从第一名同学开始, sid 为 1, 以此类推. 学号必须是唯一的, 连续的, 并且与班级的人数相符, 这样便知道要分配给下一名新同学的学号是多少. 这样我们就需要一个变量, 与单独的每一个学生对象无关, 而是与整个班级同学数量有关.

所以, 我们可以这样定义一个静态变量 numberOfStudent, 代码如下:

public class StudentPlus {
    private String name;
    private int age;

    // 学生的id
    private int sid;
    // 类变量, 记住学生数量, 分配学号
    public static int numberOfStudent = 0;

    public StudentPlus(String name, int age){
        this.name = name;
        this.age = age;
        // 通过 numberOfStudent 给学生分配学号
        this.sid = ++numberOfStudent;
    }
    // 打印属性值
    public void show(){
        System.out.println("Student: name=" + name + ", age=" + age + ", sid=" + sid);
    }
}
class Demo{
    public static void main(String[] args) {
        StudentPlus s1 = new StudentPlus("张三", 23);
        StudentPlus s2 = new StudentPlus("李四", 24);
        StudentPlus s3 = new StudentPlus("王五", 25);
        StudentPlus s4 = new StudentPlus("赵六", 26);
        s1.show();  // Student : name=张三, age=23, sid=1
        s2.show();  // Student : name=李四, age=24, sid=2
        s3.show();  // Student : name=王五, age=25, sid=3
        s4.show();  // Student : name=赵六, age=26, sid=4
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

静态方法

当 static 修饰成员方法时, 该方法称为类方法. 静态方法在声明中有 static, 建议使用类名来调用, 而不需要创建类的对象. 调用方式非常简单.

类方法: 使用 static 关键字修饰的成员方法, 习惯称为静态方法.

定义格式:

修饰符 static 返回值类型 方法名 (参数列表){
// 执行语句
}

  
 
  • 1
  • 2
  • 3

举例: 在 Student 类中定义静态方法

public static void showNum() {
System.out.println("num:" + numberOfStudent);
}

  
 
  • 1
  • 2
  • 3

注意事项

  1. 静态方法可以直接访问类变量和静态方法
  2. 静态方法不能直接访问普通成员变量或者方法. 反之, 成员方法可以直接访问类变量或静态方法
  3. 静态方法中, 不能使用 this 关键字

注: 静态方法只能访问静态成员

调用格式

被 static 修饰的成员可以并建议通过类名直接访问. 虽然也可以通过对象名访问静态成员, 原因即多个对象均属于一个类, 共享使用同一个静态成员. 但是不建议, 会出现警告信息.

格式:

// 访问类变量
类名.类变量名;

// 调用静态方法
类名.静态方法名(参数);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

调用演示, 代码如下:

public class Test71 {
    public static void main(String[] args) {
        // 访问类变量
        System.out.println(StudentPlus.numberOfStudent);
        // 调用静态方法
        StudentPlus.showNum();
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

静态原理图解

static 修饰的内容:

  • 是随着类的加载而加载的, 且只加载一次
  • 存储于一块固定的内存区域 (静态区), 所以, 可以直接被类名调用
  • 它优先于对象存在, 所以, 可以被所有对象共享

静态代码块

静态代码块: 定义在成员位置, 使用 static 修饰的代码块 {}.

  • 位置: 类中方法外
  • 执行: 随着类的加载而执行且执行异常, 优先于 main 方法的执行

格式:

public class ClassName{
    static {
        // 执行语句
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

作用: 给类变量进行初始化赋值. 代码如下:

import java.util.ArrayList;

public class Game {
    private static int number;
    private static ArrayList<String> list;
    static {
        // 给类变量赋值
        number = 2;
        list = new ArrayList<String>();
        // 添加元素到集合中
        list.add("张三");
        list.add("李四");
    }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

注: static 关键字, 可以修饰变量, 方法和代码块. 在使用过程中, 其主要目的还是想在不创建对象的情况下, 去调用方法.

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/110099503

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。