Java SE day 11 面向对象基础

static final 枚举

static关键字

1.1 概述

static关键字在java中主要用来做内存管理的。被static修饰的数据在内存中只会存在一份数据

可以用来修饰以下成分:

  1. 成员变量

  2. 成员方法

  3. 代码块

  4. 内部类

今天我们将会学习到静态的成员变量和静态成员方法。

1.2 成员变量

所学过的变量有哪些?

变量总结

成员变量:在类中方法外,类体中定义的变量

  • 实例变量:每创建一个对象,在内存中都会有一份对应的数据

  • 静态变量/类变量:被static修饰的成员变量,在内存中只会有一份数据。

局部变量:代码块中定义的变量

1.2.1 实例变量及其访问

没有static修饰的成员变量属于每个对象的, 这个成员变量叫实例变量

需要注意的是:实例变量访问必须创建该类的对象才可以访问。 而且每个对象的实例变量都有属于自己的值。

调用格式:对象.实例成员变量,如果封装了需要借助getter/setter进行访问

结论:同一个类的每个对象的实例变量都有自己专属值。

1.2.2 静态变量定义及访问

static修饰成员变量,是属于类本身的成分,这个成员变量称为类变量或者静态成员变量,简称静态变量

==静态变量内存中只有一份数据,所以这个数据适合用来共享数据。==

场景举例

例如现在我们需要定义传智全部的学生类,那么这些学生类的对象的学校属性应该都是“传智”,这个时候我们可以把这个属性定义成static修饰的静态成员变量。

定义格式

在成员变量的修饰符中存在一个关键字:static

public class 类名{
  修饰符 static 类型 变量名
}

访问格式

  1. 直接使用类名访问【推荐】不用借助对象访问

    类名.静态变量名 = 值;
    System.out.print(类名.静态变量名);
  2. 使用对象访问

    对象名.静态变量名

结论:类的静态变量在内存中只有一份数据,适合用来共享数据。

1.3成员方法

成员方法:

  1. 实例方法:借助对象才能访问的方法

  2. 静态方法/类方法:被static关键字修饰了,可以直接使用类名进行访问【工具类中的方法就是静态方法】

1.3.1 实例方法及其访问

没有static修饰的成员方法叫实例方法。实例方法只能使用对象才能访问。

【访问格式】

对象名.方法名(实参);

1.3.2 静态方法及其访问

使用static修饰的方法就是静态方法,访问时可以直接类名访问,而不用创建对象访问,调用很方便。

例如一般在工具类中定义的方法都是静态方法。Arrays数组工具类中的sort方法等

【定义格式】

修饰符 static 返回值类型 方法名(参数列表){
  方法体
}

【访问方式】

  1. 可以直接用类名调用【建议】

  2. 可以用对象名调用

1.3.3静态方法内部使用注意

==静态方法内部使用可以直接访问本类中的其他静态成员,不能访问其他非静态成员。==

静态只能访问静态

1.3.4【扩展】

为什么静态方法只能访问本类静态的成分

思考:静态方法中能存在this么?

this实例对象,不能存在与静态方法中。

1.4 小结

  1. 什么是静态变量,静态方法,有什么特点?

    被static修饰的成员变量叫做静态变量,被static修饰的成员方法叫做静态方法。

    在内存中只会存在一个数据,访问可以直接使用类名访问。

  2. 一般工具类中的方法就是静态方法,方便调用:Arrays数组工具类

 final关键字

final: 最终的,不可改变的

2.1 概述

学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了final 关键字,用于修饰不可改变内容。

那么,final作为一个关键字修饰符,可以修饰哪些成分呢?

  1. final可以修饰类,这个类将不能被继承。

  2. final可以修饰成员方法,这个方法将不能被重写。

  3. final可以修饰变量,这个变量只能赋值一次。

2.2 使用方式

【目标】:掌握final修饰类,方法,变量的格式及特点

2.2.1 修饰类

【格式】

将final放在类的修饰符位置

[public] final class 类名{ }

【特点】

不能被继承,没有子类是一个最终类。

查询API发现像 public final class Stringpublic final class Mathpublic 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;
}

【特点】

  1. 只能赋值一次

  2. 一定要赋值

如何给final的实例变量赋值?

  1. 直接赋值

  2. 可以使用构造方法赋值,如果有多个重载的构造方法,每个构造方法都应该对final成员变量做赋值

  3. 构造代码块中赋值【在每次构造方法执行前会执行一次】

被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 小结

  • 枚举类在第一行罗列若干个枚举对象。(多例)

  • 第一行都是常量,存储的是枚举类的对象。

  • 枚举是不能在外部创建对象的,枚举的构造器默认是私有的。

  • 枚举通常用于做信息的标志和分类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

在下张仙人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值