哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是Java的static关键字。

1. 我们是怎么使用static关键字的

我们其实一直在用static关键字,比如main方法:

public static void main(String[] args) {

}

static关键字可以用来修饰方法,main方法也是方法。它还可以修饰成员变量。

回到之前Car的例子,我们新增一个价格属性,价格用double类型。

你有没有发现,用static修饰的变量,在IDEA中是斜体的。那么和其他变量有啥区别呢,我们来看一个例子你就明白了。

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

        Car car1 = new Car();
        car1.price = 200000;
        
        Car car2 = new Car();
        car2.price = 300000;

        System.out.println("car1.price = " + car1.price);
        System.out.println("car2.price = " + car2.price);

    }
}

此段代码中,定义了Car类,创建了两个实例car1和car2,并为car1和car2分别设置了price属性,然后输出了这两个实例的price属性值。

结果:

car1.price = 300000.0

car2.price = 300000.0

代码中其实给出了警告信息:

意思是你用实例对象去访问一个静态变量,编译器对你提出了警告。虽然不影响运行,但是结果和我们预想的有出入,price的值都是30w。

static关键字用于定义静态变量和静态方法,可以通过类名直接调用,不需要实例化对象。

因为static修饰的变量是类变量,类变量是属于整个类的,与类的实例对象无关,所以不需要实例化对象,可以直接通过类名调用。

对Car类来说,静态的price属性是所有实例对象共享的一块内存,所以不管是car1还是car2,访问的和操作的都是同一块内存。

我们访问静态变量,是可以直接用类名去访问的,比如:

System.out.println("car1.price = " + Car.price);

2.静态方法

static除了可以修饰成员变量,还可以修饰成员方法,典型的就是main方法。

需要注意的是,static修饰的方法只能访问其他静态静态成员变量和静态方法,不能访问普通成员变量和普通方法,也不能访问this关键字。

因为this关键字代表当前对象,而static修饰的方法是所有实例对象共有的,所以this没办法代表其中某一个实例。

#3. 总结

static关键字用于定义静态变量和静态方法,可以通过类名直接调用,不需要实例化对象。

例子1 - 静态方法访问静态成员变量:

public class Test {
    public static int count = 0; //定义静态变量
    public static void main(String[] args) {
        count++;
        System.out.println("count值为:"+count);
    }
}

例子2 - 静态方法访问其他静态方法:

public class Test {
    public static void printMessage() { //定义静态方法
        System.out.println("Hello World!");
    }
 
    public static void main(String[] args) {
        printMessage(); //通过类名调用
    }
}

当然,在静态方法中,你依然可以用new的方式创建实例对象,然后去调用其普通方法。

public static void test(){
    Car car = new Car();
    car.setBrand("五菱宏光");
    System.out.println(car);
}

3.代码块问题

代码块:代码块是指由花括号括起来的语句块,每当创建类的实例时,代码块都会被执行。

实际作用:可以用来给实例变量赋值,或者调用方法,用来初始化实例变量,提高代码的复用性。

举例:

public class Person {
    private String name;
    private int age;
    { 
        System.out.println("这是代码块"); 
    }
    public Person() {
        System.out.println("这是构造方法");
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

静态代码块:静态代码块是指由static关键字和花括号括起来的语句块,只会在类加载的时候执行一次,一般用于初始化类的静态变量。

实际作用:可以用来给类变量赋值,或者调用方法,用来初始化类变量,提高代码的复用性。

举例:

public class Person {
    private static String name;
    private static int age;
    static{ 
        System.out.println("这是静态代码块"); 
    }
    public Person() {
        System.out.println("这是构造方法");
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}

4.课后作业

1.static关键字的作用是?(多选)

A、修饰类

B、修饰变量

C、修饰方法

D、修饰块

有任何不懂的地方,可以点击下方的“发消息”给我留言。

PS:从这一节开始,欢迎你使用任何你喜欢的IDE完成作业,比如eclipse,IDEA,如果不会使用工具,可以去B站搜索相关的视频进行学习哈。

posted on 2023-01-27 12:57  剽悍一小兔  阅读(5)  评论(0编辑  收藏  举报  来源