low-level——java基础 static关键字(8)

本文详细介绍了Java中的static关键字,包括静态变量、静态方法和静态代码块的使用及特点。强调了静态成员属于类而不属于对象,由所有实例共享,并在类加载时初始化。此外,还提及了Arrays类作为工具类的静态方法特性。
摘要由CSDN通过智能技术生成

static 关键字

  • static 具有静态的含义,它可以用来修饰成员变量,修饰成员方法,也可以修饰内部类,而且也可以在类中修饰一段代码。以上四种 static 的运用会产生类变量(静态变量),类方法(静态方法),静态内部类,静态代码块。
一、静态变量
  • 在类中,可以具有成员变量和成员方法,他们是在类中声明的,但是在使用过程中,只能通过类的对象来使用,因此我们认为成员变量和方法属于对象。
  • 从对象内存图来看,成员变量的值在堆中对象所在的位置,也就是对象的数据包含了所有成员变量的值。堆中的对象含有对方法区类中方法的引用,内部也有规定,如果是成员方法也只能通过对象去调用。因此,在成员方法中可以使用成员变量。
  • 如果类中存在静态变量,static int v ; 它与成员变量最大的区别在于静态变量存放在方法区(其中有个静态区) ,而类的字节码在方法区只能有一份,因此静态变量的个数也只有一个,因此我们就认为静态变量属于类,不属于对象。静态变量并没有被对象直接引用。从这一点看,成员变量可以有多个,因为同一个类可以派生出多个对象,不同的对象都可以拥有同名成员变量,它们各自属于不同的对象。
  • 静态变量被类的所有对象所共享,因此有的地方把静态变量称为全局变量。
package test;

public class People {
    private String name;
    public static String count;

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

}
package test;

public class Static_Test {
    public static void main(String[] args) {
        People p1 = new People();
        p1.setName("上海人");
        People p2 = new People();
        p2.setName("北京人");
        System.out.println(p1.getName());
        System.out.println(p2.getName());
        //静态变量的使用方式,建议用类名来使用,不要用对象名来使用(虽然可以但不妥当)
        People.count = "中国";
        System.out.println(p1.count);
        System.out.println(p2.count);
        System.out.println(People.count);
    }
}
二、静态方法
  • public static void 方法名() { } 。成员方法的调用一定是通过对象来调用的,因此成员方法与对象的具体属性有紧密的关系,这样可以推断出成员方法中基本上都会使用成员变量,因为成员变量属于对象所有。如果一个方法并不会使用到成员变量,建议把此方法声明为静态方法。
  • 静态方法的代码与成员方法的代码都存放在方法区中,但是使用静态方法还是要通过类名来调用,不建议用对象名调用(它与对象没有直接关系)。
  • 静态方法也是属于类所有,因此它与对象没有关系,那么在静态方法中就不能使用成员变量。可以使用静态变量。
三、静态代码快
  • 静态代码快也属于类的成员之一,static { 语句; },它是被 static 修饰的一段代码,它具有特殊的含义和作用。静态代码快在类被加载时做初始化执行,因此静态代码的执行时机早于构造方法的执行时机。还有一点,静态变量属于类,保证该类被加载后静态变量应该具有默认值或初值,因此静态代码块的作用就是对静态变量执行初始化的。静态代码块执行时,不可能存在类的对象,
  • 类的加载步骤:
    1. 加载:查找和导入Class文件
    2. 链接:其中解析步骤是可以选择的
      • (a)检查:检查载入的class文件数据的正确性
      • (b)准备:给类的静态变量分配存储空间
      • (c)解析:将符号引用转成直接引用
    3. 初始化:对静态变量,静态代码块执行初始化工作
package test;

public class People {
    private String name;
    public static String country;

    static {
        System.out.println("静态代码快执行了");
        country = "中国";
    }

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

    public String getName() {
        return name;
    }

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

    public static void printCount(){
        System.out.println("我是"+country+"人。");
    }

}
package test;

public class Static_Test {
    public static void main(String[] args) {
        People p1 = new People();
        p1.setName("上海人");
        People.printCount();

    }
}

Arrays 类

  • 该类是数组工具类,也在工具包中,它可以针对各种类型的数组实现一些常见的操作,比如排序,查找,转换,比较等。
  • 在java中凡是称为工具类的类,它的方法一般都是静态方法,这些方法直接通过类名调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Æ_华韵流风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值