static final 枚举
static关键字
1.1 概述
static关键字在java中主要用来做内存管理的。被static修饰的数据在内存中只会存在一份数据。
可以用来修饰以下成分:
-
成员变量
-
成员方法
-
代码块
-
内部类
今天我们将会学习到静态的成员变量和静态成员方法。
1.2 成员变量
所学过的变量有哪些?
变量总结
成员变量:在类中方法外,类体中定义的变量
-
实例变量:每创建一个对象,在内存中都会有一份对应的数据
-
静态变量/类变量:被static修饰的成员变量,在内存中只会有一份数据。
局部变量:代码块中定义的变量
1.2.1 实例变量及其访问
没有static
修饰的成员变量属于每个对象的, 这个成员变量叫实例变量。
需要注意的是:实例变量访问必须创建该类的对象才可以访问。 而且每个对象的实例变量都有属于自己的值。
调用格式:对象.实例成员变量,如果封装了需要借助getter/setter进行访问
结论:同一个类的每个对象的实例变量都有自己专属值。
1.2.2 静态变量定义及访问
有static
修饰成员变量,是属于类本身的成分,这个成员变量称为类变量或者静态成员变量,简称静态变量。
==静态变量内存中只有一份数据,所以这个数据适合用来共享数据。==
场景举例
例如现在我们需要定义传智全部的学生类,那么这些学生类的对象的学校属性应该都是“传智”,这个时候我们可以把这个属性定义成static修饰的静态成员变量。
定义格式
在成员变量的修饰符中存在一个关键字:static
public class 类名{ 修饰符 static 类型 变量名 }
访问格式
-
直接使用类名访问【推荐】不用借助对象访问
类名.静态变量名 = 值; System.out.print(类名.静态变量名);
-
使用对象访问
对象名.静态变量名
结论:类的静态变量在内存中只有一份数据,适合用来共享数据。
1.3成员方法
成员方法:
-
实例方法:借助对象才能访问的方法
-
静态方法/类方法:被static关键字修饰了,可以直接使用类名进行访问【工具类中的方法就是静态方法】
1.3.1 实例方法及其访问
没有static修饰的成员方法叫实例方法。实例方法只能使用对象才能访问。
【访问格式】
对象名.方法名(实参);
1.3.2 静态方法及其访问
使用static修饰的方法就是静态方法,访问时可以直接类名访问,而不用创建对象访问,调用很方便。
例如一般在工具类中定义的方法都是静态方法。Arrays数组工具类中的sort方法等
【定义格式】
修饰符 static 返回值类型 方法名(参数列表){ 方法体 }
【访问方式】
-
可以直接用类名调用【建议】
-
可以用对象名调用
1.3.3静态方法内部使用注意
==静态方法内部使用可以直接访问本类中的其他静态成员,不能访问其他非静态成员。==
静态只能访问静态
1.3.4【扩展】
为什么静态方法只能访问本类静态的成分
思考:静态方法中能存在this么?
this实例对象,不能存在与静态方法中。
1.4 小结
-
什么是静态变量,静态方法,有什么特点?
被static修饰的成员变量叫做静态变量,被static修饰的成员方法叫做静态方法。
在内存中只会存在一个数据,访问可以直接使用类名访问。
-
一般工具类中的方法就是静态方法,方便调用:Arrays数组工具类
final关键字
final: 最终的,不可改变的
2.1 概述
学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了final
关键字,用于修饰不可改变内容。
那么,final作为一个关键字修饰符,可以修饰哪些成分呢?
-
final可以修饰类,这个类将不能被继承。
-
final可以修饰成员方法,这个方法将不能被重写。
-
final可以修饰变量,这个变量只能赋值一次。
2.2 使用方式
【目标】:掌握final修饰类,方法,变量的格式及特点
2.2.1 修饰类
【格式】
将final放在类的修饰符位置
[public] final class 类名{ }
【特点】
不能被继承,没有子类是一个最终类。
查询API发现像 public final class String
、public final class Math
、public final class Scanner
等,很多我们学习过的类,都是被final修饰的,目的就是供我们使用,而不让我们所以改变其内容。
2.2.2 修饰方法
【格式】
在修饰符位置加上final即可
修饰符 final 返回值类型 方法名(参数列表){ }
【特点】
子类不能重写该方法,子类可以调用这个方法
如果你定义的功能强制子类不能覆盖重写,可以使用final进行修饰。
2.2.3 修饰变量-局部变量
【格式】
只要类型前加上final
final 类型 变量名; final int a = 10;
【特点】
变量只能赋值一次
2.2.4 修饰变量-实例成员变量
【格式】
修饰符位置加上final
public class 类名{ public final int a; }
【特点】
-
只能赋值一次
-
一定要赋值
如何给final的实例变量赋值?
-
直接赋值
-
可以使用构造方法赋值,如果有多个重载的构造方法,每个构造方法都应该对final成员变量做赋值
-
构造代码块中赋值【在每次构造方法执行前会执行一次】
被final修饰的常量名称,一般都有书写规范,所有字母都大写。
枚举
1枚举
2 枚举类的使用入门
如果要表示季节的数据我们可以定义一个类型,对象固定四个用来分别表示春夏秋冬。如果要表示星期,我们可以定义一个类星期类只提供7个对象用来表示一个星期的每一天,这种实例有限而且固定的类,在Java里被称为枚举类。
2..1枚举的概念
枚举类是一种特殊的类,它一样可以有自己的成员变量、方法,可以实现一个或者多个接口,也可以定义自己的构造器。在JDK1.5开始增加了关键字 enum(它与关键字 class ,interface 处于同等位置)用来定义枚举类型。
关键字:enum (class interface )
2.2 定义枚举的格式
[public] enum 枚举名 { 第一行都是枚举实例,这些枚举实例直接写大写名字即可。 } 例如: public enum Sex{ BOY,GIRL; }
2.3 枚举的其他内容
枚举类型本质上也是一个类但是不能显式继承其他父类,但会默认继承java.lang.Enum类。
枚举中也可以有成员变量,成员方法,构造方法(构造方法缺省权限就是private,不能定义其他非私有权限)也可以去实现接口。
4 应用场景
当要描述若干数据,这些数据是固定的有限的数据,我们可以使用枚举类型进行表示。
5 枚举的练习
枚举的作用:枚举通常可以用于做信息的分类,如性别,方向,季度等。
6 小结
-
枚举类在第一行罗列若干个枚举对象。(多例)
-
第一行都是常量,存储的是枚举类的对象。
-
枚举是不能在外部创建对象的,枚举的构造器默认是私有的。
-
枚举通常用于做信息的标志和分类。