Java中static关键字的使用与练习

Java中static关键字的使用与练习

在Java编程中,static关键字是一个非常重要的概念,它用于修饰类的成员变量和方法。通过static关键字,我们可以创建与类本身关联而不是与类的实例关联的成员。下面,我们将详细探讨static关键字在Java中的使用,并通过一些简单的练习来加深理解。

一、static修饰变量

当使用static修饰变量时,这个变量就变成了类的静态变量,也叫类变量。静态变量属于类本身,而不是类的某个具体实例。无论创建多少个对象,静态变量都只有一份拷贝。

public class StaticDemo {
    // 静态变量
    public static int staticVar = 42;
    
    // 非静态变量
    public int instanceVar;
    
    public static void main(String[] args) {
        // 不需要创建对象,可以直接通过类名访问静态变量
        System.out.println(StaticDemo.staticVar); // 输出:42
        
        // 创建StaticDemo的实例
        StaticDemo obj1 = new StaticDemo();
        StaticDemo obj2 = new StaticDemo();
        
        // 通过对象也可以访问静态变量,但通常不推荐这样做
        System.out.println(obj1.staticVar); // 输出:42
        System.out.println(obj2.staticVar); // 输出:42
        
        // 修改静态变量的值
        StaticDemo.staticVar = 100;
        
        // 静态变量的值改变后,所有对象访问的都是修改后的值
        System.out.println(obj1.staticVar); // 输出:100
        System.out.println(obj2.staticVar); // 输出:100
    }
}

二、static修饰方法

使用static修饰方法时,这个方法就变成了类的静态方法。静态方法属于类本身,可以通过类名直接调用,无需创建对象。静态方法内部不能直接访问类的非静态成员,因为非静态成员依赖于具体对象实例。

public class StaticDemo {
    // 静态变量
    public static int staticVar = 42;
    
    // 静态方法
    public static void staticMethod() {
        // 静态方法内部可以访问静态变量
        System.out.println(staticVar);
        
        // 静态方法内部不能直接访问非静态变量
        // 下面这行会导致编译错误
        // System.out.println(instanceVar);
    }
    
    // 非静态方法
    public void instanceMethod() {
        // 非静态方法可以访问静态和非静态变量
        System.out.println(staticVar);
        System.out.println(instanceVar);
    }
    
    public static void main(String[] args) {
        // 不需要创建对象,可以直接调用静态方法
        StaticDemo.staticMethod(); // 输出:42
        
        // 创建StaticDemo的实例
        StaticDemo obj = new StaticDemo();
        
        // 通过对象也可以调用静态方法,但通常不推荐这样做
        obj.staticMethod(); // 输出:42
        
        // 调用非静态方法需要创建对象
        obj.instanceMethod(); // 假设instanceMethod内部有输出语句
    }
}

三、练习

下面是一个简单的练习,用于加深对static关键字的理解。请创建一个Student类,包含静态变量totalStudents用于记录学生总数,以及非静态变量nameage用于存储学生姓名和年龄。编写一个静态方法enrollStudent用于新增学生并更新学生总数,以及一个非静态方法printInfo用于打印学生信息。

public class Student {
    // 静态变量,记录学生总数
    public static int totalStudents = 0;
    
    // 非静态变量,存储学生姓名和年龄
    public String name;
    public int age;
    
    // 构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        enrollStudent(); // 在创建对象时自动调用enrollStudent方法增加学生总数
    }
    
    // 静态方法,用于新增学生并更新学生总数
    public static void enrollStudent() {
        totalStudents++;
        System.out.println("一名新学生已入学,当前学生总数:" + totalStudents);
    }
    
    // 非静态方法,用于打印学生信息
    public void printInfo() {
        System.out.println("学生姓名:" + name);
        System.out.println("学生年龄:" + age);
    }
    
    public static void main(String[] args) {
        // 创建学生对象
        Student student1 = new Student("张三", 20); // 输出:一名新学生已入学,当前学生总数:1
        Student student2 = new Student("李四", 21); // 输出:一名新学生已入学,当前学生总数:2
        
        // 打印学生信息
        student1.printInfo(); // 输出:学生姓名:张三 学生年龄:20
        student2.printInfo(); // 输出:学生姓名:李四 学生年龄:21
        
        // 输出当前学生总数
        System.out.println("当前学生总数:" + Student.totalStudents); // 输出:当前学生总数:2
    }
}

在上面的代码中,totalStudents是一个静态变量,它用来记录学生的总数。每次创建Student对象时,enrollStudent静态方法会被调用,从而增加学生总数。nameage是非静态变量,它们分别用来存储每个学生的姓名和年龄。printInfo方法用于打印单个学生的信息。

通过这个练习,我们学会了如何定义和使用静态变量和静态方法,并理解了它们与非静态成员之间的区别。在实际开发中,静态成员通常用于存储与类本身相关而非与对象实例相关的数据或执行与类相关的操作。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值