Java基础(8) | static

# 什么是static?

static是Java中的一个保留关键字

# 用途

1.用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。
2.用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。
3.静态代码块

# 修饰变量或方法

## 定义Student类

package com.leerep.javabase.theStatic;

public class Student {
    private String name;
    private int age;
    private  int id;
    static String room;         //一个班级内所有的同学的教室应该是同一间教室
    private static int idCounter;       //id计数器
/*
* 使用static修饰的变量不在属于对象,而是属于所在的类。多个对象共享同一份数据。
*
* 使用static修饰成员方法,那么就变成了静态方法,静态方法不属于对象,而是属于所在的类。
* 静态方法推荐使用:类名.静态方法名()
* 对象.静态方法名() 这种写法虽然也可以,但是不推荐,其底层也是经过javac编译后翻译为类名称.静态方法名()
*
* 静态方法不能访问非静态变量,静态方法不能使用this关键字,this表示当前对象
* */
    public Student() {
        this.id = ++idCounter;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        this.id = ++idCounter;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                ", room=" + room +
                '}';
    }
    public static int getStudentCounter(){
        return idCounter;
    }
}

## demo代码

package com.leerep.javabase.theStatic;

import java.util.ArrayList;
/*
 *  使用static修饰成员方法,那么就变成了静态方法,静态方法不属于对象,而是属于所在的类。
 *  静态方法推荐使用:类名.静态方法名()
 *  对象.静态方法名() 这种写法虽然也可以,但是不推荐,其底层也是经过javac编译后翻译为类名称.静态方法名()
 * */
public class Demo {
    public static void main(String[] args) {
        Student s = new Student("libai", 18);
        Student t = new Student("dufu", 15);
        Student.room = "ak101";         //推荐使用  类名.静态变量名  访问静态变量
        System.out.println(s);
        System.out.println(t);
        int num = Student.getStudentCounter();          //调用静态方法
        System.out.println("Student类共有:" + num + "个对象");

        ArrayList<Student> students = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            students.add(new Student("学生" + i, 10 + i));
        }
        System.out.println("students的大小为:" + students.size());
        System.out.println("Student类共有:" + Student.getStudentCounter() + "个对象");        //调用静态方法
    }
}

# 静态代码块

##定义Person类

package com.leerep.javabase.theStatic;
/*
* 静态代码块
* static{}
* 特点:
* 当第一次用到本类时,静态代码块执行唯一的一次
* 静态内容总是优先于非静态内容,所以静态代码块比构造方法先执行
*典型用途:用来一次性的对静态成员变量进行赋值
*  */
public class Person {
    String name;
    int age;
    static String info;

    static {
        info = "对静态变量赋值";
        System.out.println(Person.info);
    }

    public Person() {
        System.out.println("构造方法执行!");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("构造方法执行!");
    }
}

## 代码演示

package com.leerep.javabase.theStatic;

public class StaticCode {
    public static void main(String[] args) {
        Person p = new Person("libai", 18);
        Person e = new Person("dufu", 15);
    }
}
posted @ 2021-02-06 21:46  扶-9  阅读(84)  评论(0)    收藏  举报