十三:静态

1静态关键字(static)

不管实例化几个对象都是共享的,值存储方法区中,在不同类中通过 类名.静态方法 直接使用

static存储在方法区可以直接调用

2静态变量

1,有static修饰的成员变量就是静态变量。

【修饰符】 class 类{
    【其他修饰符】 static 数据类型  静态变量名;
}

2,特点

  1. 静态变量的默认值规则和实例变量一样。

  2. 静态变量值是所有对象共享。

  3. 静态变量的值存储在方法区。

  4. 静态变量在本类中,可以在任意方法、代码块、构造器中直接使用。

  5. 如果权限修饰符允许,在其他类中可以通过“类名.静态变量”直接访问,也可以通过“对象.静态变量”的方式访问(但是更推荐使用类名.静态变量的方式)。

  6. 静态变量的get/set方法也静态的,当局部变量与静态变量重名时,使用“类名.静态变量”进行区分。

3,静态类变量和非静态实例变量、局部变量
  1. 静态类变量(简称静态变量):存储在方法区,有默认值,所有对象共享,生命周期和类相同,还可以有权限修饰符、final等其他修饰符

  2. 非静态实例变量(简称实例变量):存储在中,有默认值,每一个对象独立,生命周期每一个对象也独立,还可以有权限修饰符、final等其他修饰符

  3. 局部变量:存储在中,没有默认值,每一次方法调用都是独立的,有作用域,只能有final修饰,没有其他修饰符

3静态方法

有static修饰的成员方法就是静态方法

【修饰符】 class 类{
	【其他修饰符】 static 返回值类型 方法名(形参列表){
        方法体
    }
}
2、静态方法的特点
  1. 静态方法在本类的任意方法、代码块、构造器中都可以直接被调用。

  2. 只要权限修饰符允许,静态方法在其他类中可以通过“类名.静态方法“的方式调用。也可以通过”对象.静态方法“的方式调用(但是更推荐使用类名.静态方法的方式)。

  3. 静态方法可以被子类继承,但不能被子类重写。

  4. 静态方法的调用都只看编译时类型。

4 静态代码块

如果想要为静态变量初始化,可以直接在静态变量的声明后面直接赋值,也可以使用静态代码块。

1、语法格式

在代码块的前面加static,就是静态代码块。

【修饰符】 class 类{
	static{
        静态代码块
    }
}
2、静态代码块的特点

每一个类的静态代码块只会执行一次。

静态代码块的执行优先于非静态代码块和构造器。

3、静态代码块和非静态代码块

静态代码块在类初始化时执行,只执行一次

非静态代码块在实例初始化时执行,每次new对象都会执行

5类初始化

6静态和非静态

1、本类中的访问限制区别

静态的类变量和静态的方法可以在本类的任意方法、代码块、构造器中直接访问。

非静态的实例变量和非静态的方法==只能==在本类的非静态的方法、非静态代码块、构造器中直接访问。

即:

  1. 静态直接访问静态,可以

  2. 非静态直接访问非静态,可以

  3. 非静态直接访问静态,可以

  4. 静态直接访问非静态,不可以

2、在其他类的访问方式区别

静态的类变量和静态的方法可以通过“类名.”的方式直接访问;也可以通过“对象."的方式访问。(但是更推荐使用类名的方式)

非静态的实例变量和非静态的方法==只能==通过“对象."方式访问。

3、this和super的使用

静态的方法和静态的代码块中,==不允许==出现this和super关键字,如果有重名问题,使用“类名.”进行区别。

非静态的方法和非静态的代码块中,可以使用this和super关键字。

2枚举

1概述

枚举类型本质上也是一种类,只不过是这个类的对象是固定的几个,而不能随意让用户创建。

在JDK1.5之后,Java支持enum关键字来快速的定义枚举类型。

1、enum关键字声明枚举
【修饰符】 enum 枚举类名{
    常量对象列表
}

【修饰符】 enum 枚举类名{
    常量对象列表;
    

    其他成员列表;

}
3、枚举类型常用方法
1.String toString(): 默认返回的是常量名(对象名),可以继续手动重写该方法!
2.String name():返回的是常量名(对象名)
3.int ordinal():返回常量的次序号,默认从0开始
4.枚举类型[] values():返回该枚举类的所有的常量对象,返回类型是当前枚举的数组类型,是一个静态方法
5.枚举类型 valueOf(String name):根据枚举常量对象名称获取枚举对象

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐