JavaSE13——static、final关键字

本文介绍了Java中的static关键字,用于声明静态变量、静态方法和静态代码块,这些成员属于类而非对象。同时,final关键字用于修饰类、方法和变量,强调安全性和性能,尤其是final变量,常用于表示常量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 static关键字

1.1 static概述

static 关键字它可以用来修饰的成员变量成员方法被修饰的成员是属于类的,而不是单单是属于某个对象的。被static修饰的成员由该类的所有实例(对象)共享;

Java中的static关键字用于声明静态变量静态方法和静态代码块。下面分别介绍一下它们的作用:

  1. 静态变量(static variable):使用static关键字声明的变量称为静态变量,也叫类变量。静态变量属于类而不是对象,它在类加载时初始化,并且所有对象共享相同的静态变量。静态变量可以直接通过类名访问,无需创建对象。
  2. 静态方法(static method):使用static关键字声明的方法称为静态方法,也叫类方法。静态方法没有this指针,无法访问实例成员变量和非静态成员方法,只能调用其他静态方法或访问静态变量。可以通过类名直接调用静态方法。
  3. 静态代码块(static block):使用static关键字定义的代码块称为静态代码块。静态代码块在类加载时被执行,用于对静态变量进行初始化或进行一些静态操作。静态代码块只会执行一次

1.2 定义和使用格式

类变量

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

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

定义格式:

static 数据类型 变量名;

举例:

static int numberID;

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

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

public class demo01 {
    public static void main(String[] args) {

        Student s1 = new Student("张三", 23);
        Student s2 = new Student("李四", 24);
        Student s3 = new Student("王五", 25);
        Student s4 = new Student("赵六", 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
    }
}

class Student {
    // 存储到底创建了多少个学生
    static int numberID = 0;
    int sid;
    String name;
    int age;

    public Student() {
        // 每次创建一个学生,id都自增1
        numberID++;
        sid=numberID;
    }

    public Student(String name, int age) {
        // 每次创建一个学生,id都自增1
        numberID++;
        sid=numberID;
        this.name = name;
        this.age = age;
    }

    public void show() {
        System.out.println("sid: " + sid + "-name: " + name + "-age: " + age);
    }
}

静态方法

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

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

定义格式:

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

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

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

  • 静态方法调用的注意事项:
    • 静态方法可以直接访问类变量(被static修饰的变量)和静态方法。(静态方法能够访问静态资源)
    • 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。
    • 静态方法中,不能使用this关键字。

tips:静态方法只能访问静态成员。

调用格式

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

格式:

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

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

调用演示,代码如下:

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

2 final关键字

2.1 final介绍

fianl是Java中的一个关键字,中文含义是"最终的",fianl可以修饰类、方法、变量等;

在Java中,final关键字可以用来修饰类、方法和变量,具有不同的含义和用法。

  1. final类:使用final关键字修饰的类称为final类。final类是最终的类,不能被继承。通常情况下,final类是为了安全和性能考虑而设计的,例如Java标准库中的String类就是一个final类。
  2. final方法:使用final关键字修饰的方法称为final方法。final方法不能被子类重写或覆盖。通常情况下,final方法是为了避免子类对其进行修改,保证方法的行为一致性。
  3. final变量:使用final关键字修饰的变量称为final变量。final变量是一个常量,只能被赋值一次,赋值后不能再改变。通常情况下,final变量用大写字母命名,用于表示常量或不可变的值。

使用final关键字可以带来以下好处:

  • 增加安全性:final类、方法和变量可以避免被修改或继承,保护代码的安全性。
  • 提高性能:对于final变量和方法,JVM可以进行优化,提高程序的执行效率。
  • 提供清晰的语义:final关键字可以明确表示某个类、方法或变量的用途和行为,提高代码的可读性和可理解性。

2.2 fianl关键字的特点

修饰类:

  • final修饰的类不能被继承。提高安全性,提高程序的可读性;
final class A{
}
class B extends A{     // 错误,被final修饰的类不能被继承。
}

修饰方法:

  • final修饰的方法不能被子类重写
class A{
    public final void method(){
        System.out.println("hello");
    }
}
class B extends A{
    public void method(){   // 错误,被final修饰的方法不能被重写
        System.out.println("Hi");
    }
}

修饰变量:

  • final修饰的变量(成员变量或局部变量)只能被赋值一次;因此被final修饰的变量我们称为常量,通常全大写命名;

    class  A{
        private final double PI = 3.14;     //  声明常量
        public void print(){
            PI = 3.15;          // 错误,被final修饰的变量是常量(不可更改值)
        }
    }
    
    

注意事项:

需要注意的是,final关键字并不会使对象或变量本身不可变,它只是确保引用不能改变。如果引用的对象是可变的,那么对象的状态仍然可以改变。若要实现不可变对象,可以通过其他方式,如使用不可变类或不可变字段等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值