Java语言static,this和super关键字

一.static

static是 Java 中的一个关键字,用于修饰类的成员(变量、方法、代码块)和内部类,它的核心作用是将成员与类本身关联,被 static 修饰的成员属于类级别,而不是实例级别。它由该类的所有实例共享,不依赖于某个具体对象。可以直接通过类名访问,无需创建类的实例。在类加载时就会被初始化,早于对象的创建。下面介绍一些常见用法:

1.修饰变量

class Student {
    static int totalCount; // 静态变量:所有学生共享的总人数
    String name; // 实例变量
}

public class Test {
    public static void main(String[] args) {
        Student.totalCount = 0; // 直接通过类名访问
        
        Student s1 = new Student();
        s1.name = "张三";
        Student.totalCount++; // 总人数+1
        
        System.out.println(Student.totalCount); 
    }
}

被static修饰的变量是所有对象共享同一份的静态变量,一个对象修改后,其他对象访问的是修改后的值。可以直接通过类名访问

2.修饰方法

class MathUtil {
    public static int add(int a, int b) {
        return a + b;
    }
}

public class Test {
    public static void main(String[] args) {
        int sum = MathUtil.add(3, 5); // 直接通过类名调用,无需创建对象
        System.out.println(sum);
    }
}

被static修饰的方法属于类,可通过类名.方法名直接调用,无需创建对象。注意不能直接访问类中的非静态成员

3.修饰代码块(变为静态代码块)

class Config {
    static String appName;
    
    // 静态代码块:初始化静态变量
    static {
        appName = "MyApp";
        System.out.println("静态代码块执行:初始化appName");
    }
}

public class Test {
    public static void main(String[] args) {
        System.out.println(Config.appName); // 首次访问类,触发静态代码块执行
        // 输出:静态代码块执行:初始化appName → MyApp
    }
}

类加载时自动执行,且只执行一次(无论创建多少对象)。多个静态代码块按定义顺序执行。static修饰的方法在main方法之前先入栈

注意static不能this和super一起使用。


二.this

this代指当前对象。Java 中为解决变量的命名冲突和不确定性问题,引入关键字 this 代表其所在方法的当前对象的引用。
this.属性名称 代表当前对象调用某一变量。
this.方法名 代表当前对象调用某一方法。
this()this访问构造方法,使用时要注意:
1.不能在普通方法当中使用,只能在构造方法当中使用。
2.在构造方法当中必须是第一条语句。
3.不能和super()一起使用

1.对于构造方法和普通方法:

class Person {
    String name; // 成员变量

    // 构造方法:参数name与成员变量同名
    public Person(String name) {
        this.name = name; // this.name 指向成员变量,name 指向参数
    }

    // 普通方法:局部变量与成员变量同名
    public void setName(String name) {
        this.name = name; // 用this区分,将参数值赋值给成员变量
    }
}

2.对于调用方法:

class Dog {
    public void bark() {
        System.out.println("汪汪叫");
    }

    public void play() {
        this.bark(); // 调用当前对象的bark()方法,等效于 bark()
        System.out.println("玩耍");
    }
}

三.super

super代表父类,调用父类当中的方法和变量。super()若使用,必须放在构造方法第一行,并且依赖继承,只有子类中才能使用。
1.对于访问父类的成员变量:
class Animal {
    String name = "动物"; // 父类成员变量
}

class Cat extends Animal {
    String name = "猫咪"; // 子类成员变量(与父类同名)

    public void printName() {
        System.out.println(name); // 访问子类自己的name:输出 "猫咪"
        System.out.println(super.name); // 访问父类的name:输出 "动物"
    }
}

2.对于调用父类的成员方法:

class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}

class Dog extends Animal {
    // 重写父类的eat()方法
    @Override
    public void eat() {
        super.eat(); // 调用父类的eat()方法:输出 "动物吃东西"
        System.out.println("狗吃骨头"); // 子类自己的逻辑
    }
}

3.对于调用父类的构造方法:

class Person {
    String name;

    // 父类有参构造
    public Person(String name) {
        this.name = name;
    }
}

class Student extends Person {
    int score;

    // 子类构造方法
    public Student(String name, int score) {
        super(name); // 调用父类的有参构造(必须在第一行)
        this.score = score;
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值