static关键字的使用

本文详细介绍了Java中的static关键字,包括静态变量、静态方法和静态代码块的使用。通过示例展示了static如何影响类属性和对象属性,以及它们在多线程环境中的应用。此外,还探讨了static修饰方法的调用规则,并提到了在导入工具类时使用static的便捷方式。
摘要由CSDN通过智能技术生成

static关键字学习笔记

static修饰属性

public class Demo07 {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.num);
        System.out.println(Student.age);

    }
}

class Student{
	//在线程中使用比较常用
    public static int age; //静态的变量
    public int num;	//非静态的变量

}
  • 被static修饰的属性叫类属性(静态变量)—可以直接使用 类名.属性名 的方式调用类中的属性;没有static修饰的属性叫对象属性(非静态变量)— 必须通过创建对象之后才能调用。
//static关键字
public class Demo07 {
    public static void main(String[] args) {

        Student s1 = new Student();
        System.out.println(s1.age); //输出s1中的age值
        System.out.println(s1.num); //输出s1中的num值
        System.out.println("----------------------");

        Student s2 = new Student();
        System.out.println(s2.age);//输出s2中的age值
        System.out.println(s2.num);//输出s2中的num值
        System.out.println("----------------------");
        
        //修改s2的age与num值
        s2.age = 20;
        s2.num = 2;
        //输出s1,s2中的age值
        System.out.println("s1的age值 :"+s1.age);
        System.out.println("s2的age值 :"+s2.age);
        System.out.println("----------------------");
        //输出num值
        System.out.println("s1的num值 :"+s1.num);
        System.out.println("s2的num值 :"+s2.num);
    }
}

class Student{

    public static int age = 10; //静态的变量
    public int num = 1;	//非静态的变量

}

输出结果:

10                       
1
----------------------
10
1
----------------------
s1的age值 :20
s2的age值 :20
----------------------
s1的num值 :1
s2的num值 :2
  • 静态的变量共享的,属于当前类,所以静态变量也叫类变量该类的所有对象共同使用这一个变量。而非静态变量是每个对象私有的、不共享的,修改一个对象的非静态变量不会影响其它对象。

static修饰方法

public class Demo07 {
    public static void main(String[] args) {
        Student s = new Student();

        s.walk();//调用非静态方法
        Student.run();//调用静态方法
    }
}

class Student{
    
	public static int age; //静态的变量
    public int num;	//非静态的变量
    
    public static void run(){
        System.out.println("跑。。。");
        System.out.println(age); //访问静态变量
        jump(); //调用其他的静态方法
    }

    public static void jump(){
        System.out.println("跳。。。");
    }

    public void walk(){
        System.out.println("走。。。");
    }

}
  • 静态的方法可以使用类名.方法名实现调用
  • 静态的方法可以调用静态的属性,但不能调用非静态的属性。非静态方法可以调用所有属性
  • 在同一个类中,静态的方法之间可以互相调用非静态的方法可以调用静态的方法,但静态的方法不能调用非静态方法

static修饰代码块

public class Demo08 {
    public static void main(String[] args) {
        Student1 s1 = new Student1();
        System.out.println("-----------------------");
        Student1 s2 = new Student1();
    }
}

class Student1 {
    
    {
        System.out.println("调用匿名代码块");
    }

    public Student1() {
        System.out.println("调用无参的构造方法");
    }

    static {
        System.out.println("调用静态代码块");
    }

}

输出结果:

调用静态代码块
调用匿名代码块
调用无参的构造方法
-----------------------
调用匿名代码块
调用无参的构造方法

由上面可以得出下结论:

  • 当创建对象时,先运行静态代码块,再运行匿名代码块,最后才运行构造方法
  • 静态代码块在第一次创建对象的时候运行,只运行一次
  • 代码块运行的顺序与位置无关。

拓展(了解)

static关键字还可以在导包的时候使用(不常用),导入工具类中具体的一个方法。

package cn.jd.base1;

import static java.lang.Math.random;
import static java.lang.Math.PI;

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

这样就可以直接写random()而不使用Math.random()来调用方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值