Java的static关键字

static关键字

修饰成员变量

static修饰的成员变量称为静态成员变量。

public class Student {
    String name;
    String gender;
    int age;
    double score;

    public Student(String name, String gender, int age, double score) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.score = score;
    }

    public static void main(String[] args) {
        Student student1=new Student("Lihua","男",18,3.9);
        Student student2=new Student("Hanlei","女",17,4.2);
        Student student3=new Student("Jim","男",18,2.6);
    }
}


假设上面的三个学生在一个班级,只需要一个静态变量。
三个学生即三个对象。静态变量属于类,不属于对象,为所有对象共有。

static String classRoom="1班";

静态成员变量虽然属于类,但可以通过对象访问

   System.out.println(student1.classRoom);
        System.out.println(student2.classRoom);
        System.out.println(student3.classRoom);

打印结果都是1班,但不建议。因为静态变量属于类,可以直接用
类名. 访问静态成员变量

 System.out.println(Student.classRoom);

静态成员变量:1.通过对象访问;2.通过类名访问。推荐类名访问。
静态的,是类的属性,与有无对象无关(不依赖对象)。
静态成员变量存储在方法区。所有对象共用静态成员。
生命周期随着类加载诞生,随着类卸载销毁。

public class Student {
    String name;
    String gender;
    int age;
    double score;
    static String classRoom="1班";

    public Student(){

    }
    public Student(String name, String gender, int age, double score) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.score = score;
    }

    public static void main(String[] args) {
//        Student student1=new Student("Lihua","男",18,3.9);
//        Student student2=new Student("Hanlei","女",17,4.2);
//        Student student3=new Student("Jim","男",18,2.6);
//        System.out.println(student1.classRoom);
//        System.out.println(student2.classRoom);
//        System.out.println(student3.classRoom);

        Student s=new Student();
        s=null;
        System.out.println(s.classRoom);
    }
}

不依赖对象,不会报错:空指针异常。

修饰方法

Java中在类中static可以修饰成员方法,此时其被称为静态成员方法,是类的方法,不为某个对象每个成员特有。静态成员一般通过静态方法访问。

成员方法 + static = 静态成员方法。
静态成员方法属于类,不依赖对象
可以通过对象调用但与对象取何值无关。因为可以理解实质上把对象当作相应的类型在调用。

//Student.java
public class Student {
    private static String classRoom = "1班";
    public static String getClassroom(){
        return classRoom;
    }
}

//Test.java
public class Test{
    public static void main(String[] args) {
        System.out.println(Student.getClassroom());
    }
}

以上操作就通过静态成员方法访问到了Student类的静态成员变量classRoom。

静态成员方法特性

  • 不属于某个具体的对象,是类方法。
  • 可以创建对象调用静态方法,但我们更喜欢类名.静态成员方法名(参数)
  • 静态方法只能调用静态变量/静态方法。言外之意:不能调用非静态成员和方法。
    在这里插入图片描述

静态变量初始化

1.就地初始化

我们在类中定义静态变量时初始化给定一个值。

private static String classRoom = "1班";

2. IDEA自带的get,set方法初始化

在这里插入图片描述
在这里插入图片描述
静态非静态都适用

3.构造方法初始化

//Student.java
public class Student {
    String name;
    int age;
    public static String classRoom;

    public Student(String classroom ){
           classRoom = classroom;
    }

}

//Test.java
public class Test{
    public static void main(String[] args) {
        Student std1= new Student("2班");
        System.out.println(std1.classRoom);
    }
}

4.默认初始化

定义静态变量时啥也不做,它会默认有一个初始值。前面已经提过每种类型默认初始值是啥了。

5.静态代码块

详情看下面代码块的内容

代码块

普通代码块

普通代码块:定义在方法中的代码块。

//Test.java
    public static void main(String[] args) {
        {
            int x = 0;
            System.out.println("x = " + 10);
        }
        int x=10;
        System.out.println("x = "+ 20);
    }

实例代码块

//Student.java
public class Student {
    String name;
    int age;

    //类内方法外,不加修饰只有花括号括起来的部分。一般用于初始化实例(普通)成员变量
    {
        this.name="hello";
        this.age=10;
    }
    
    public static String classRoom;

    public Student(String classroom ){
           classRoom = classroom;
    }

}

静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量

 static {
        classRoom = "class 1";
        //name="fafa";error,静态代码只能初始化静态变量
    }
  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
  • 实例代码块只有在创建对象时才会执行
  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值