Static关键字详解

本文详细介绍了Java中的静态关键字,包括静态方法、静态属性和静态变量的使用。静态变量在内存中只存在一份,可被所有实例共享。静态方法可通过类名直接调用,而非静态方法需通过实例调用。同时,静态代码块在类加载时执行一次,用于初始化数据。此外,还讨论了final关键字修饰的类不可被继承。
摘要由CSDN通过智能技术生成

Static关键字详解

加在方法上:静态方法

加在属性上:静态属性

静态变量:在静态方法区中

public class Student {
    private static int age;//静态变量
    private double score;//非静态变量
    public static void main(String[] args){
        Student s1 = new Student();
        System.out.println(s1.score);
        System.out.println(s1.age);//通过对象调用

        System.out.println(Student.age);//通过类调用
        System.out.println(Student.score);//此行编译报错,非静态static属性,不可直接使用类名调用变量
    }
}

若类的属性定义时有static,则推荐使用类直接调用属性变量

静态变量对类而言在内存中只存在一个,唯一的,其可以被实例对象所共享。

对方法而言,若带static,静态方法,通过类即可调用:

public class Student {

	public void run(){
		//非静态方法
        go();//或Student.go();
    }
    public static void go(){
		//静态方法
    }

    public static void main(String[] args){
        Student.go();//可行
        Student.run();//编译报错
        
        Student s1 = new Student();
        s1.run();//可行
    }
}

即:static静态方法可以直接通过类名进行调用,而非静态方法需要通过创建实例对象,再通过实际对象进行调用。且非静态方法中,可以调用非静态方法。静态方法中可以调用静态方法,但不可调用非静态方法。

(static的方法在加载时会跟类一起加载,而非静态方法在加载时并未加载,因此static方法可以直接调用,而非静态方法不行)

静态代码块

public class Person {
    {
        //代码块(匿名,只创建,但并不加载)
        System.out.println("匿名代码块");
    }
    static{
        //静态代码块,类加载时一同加载,帮助初始化一些数据,且只执行一次
        System.out.println("静态代码块");
    }

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

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("========================");
        Person person1 = new Person();
    }
}
输出:
静态代码块
匿名代码块
构造方法
========================
匿名代码块
构造方法

静态代码块在类加载时一同加载,帮助初始化一些数据,且只执行一次

static{

}

public class Test {
    public static void main(String[] args) {
        System.out.println(Math.random());//Math类的random方法
    }
}
0.688664170417222

静态导入包:可省略类名直接通过 方法() 调用方法

import static java.lang.Math.random;
import static java.lang.Math.PI;
//静态导入包

public class Test {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }
}

final是常量的修饰符:通过final修饰的类不能被继承,没有子类

public final class Person {
    
}

public class Student extends Person{
    //会报错,因为Person通过final修饰,不可被继承
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值