Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包

文章目录

  • 一、final
  • 二、命名规范&注释模板
    • 1. 命名规范
      • 1.1 通用规定
      • 1.2 包名规定
    • 2. 注释模板
      • 2.1 类注释
      • 2.2 属性注释
      • 2.3 方法注释
      • 2.4 构造方法注释
  • 三、权限修饰符
  • 四、内部类
    • 1. 内部类的定义格式
    • 2. 内部类的使用
      • 提示:内部类的编译
    • 3. 重名变量访问
    • 4. 局部内部类
    • 5. 类的权限修饰符
    • 6. 局部内部类的final问题
    • 7. 匿名内部类 【重点!】
      • 注意
    • 8. 类作为成员变量类型
    • 9. 接口作为成员变量类型
  • 五、Test:继续发红包
    • 1. 准备复制
    • 2. 红包实现
    • 2.1 创建红包
    • 2.2 测试程序
    • 2.3 实现平均红包
    • 2.4 随机红包

一、final

final最终的,最后的,不可变的

  • final的四种应用场景:
  1. 修饰类 : 太监化,不能有子类
    与abstract关键字矛盾(抽象类不能直接用,一定要有子类)
    在这里插入图片描述

  2. 修饰成员方法 : 最终方法,不能被覆盖重写
    与abstract关键字矛盾(抽象方法一定要覆盖重写,所以冲突)
    在这里插入图片描述

  3. 修饰局部变量(局部常量) :只能赋值一次
    对于基本数据类型而言,不可变指:值不可变
    对于引用数据类型而言,不可变指:地址不可变
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第1张图片

  4. 修饰全局变量(全局常量) :在创建时就必须手动赋值(使用final关键字,不会再有默认值,所以需要手动赋值)。要么使用直接赋值 ,要么通过构造方法 赋值
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第2张图片

二、命名规范&注释模板

1. 命名规范

1.1 通用规定

类别 命名规范
项目名 全部小写
包名 全部小写
类名 大驼峰
变量名,方法名 小驼峰
常量名 全部大写,下划线分隔

所有命名规则必须遵循以下规则 :

  1. 名称只能由字母、数字、下划线、$符号组成.
  2. 不能以数字开头.
  3. 名称不能使用Java中的关键字.
  4. 坚决不允许出现中文及拼音命名.

1.2 包名规定

在Java编程规范中要求开发人员在自己定义的包名前加上唯一的前缀(为了保障每个Java Package命名的唯一性)。由于互联网上的域名称是不会重复的,所以多数开发人员采用自己公司在互联网上的域名称(一般是反过来用,比如com.baidu)作为自己程序包的唯一前缀

  1. com:公司项目,copyright由项目发起的公司所有.
      包名 : com.公司名.项目名.模块名
  2. team : 团队项目,指由团队发起,并由该团队开发的项目,copyright属于该团队所有.
      包名 : team.团队名.项目名.模块名

  1. indi : 个体项目,指个人发起,但非自己独自完成的项目,可公开或私有项目,copyright主要属于发起者(也有公司写作onem
      包名 : indi.发起者名.项目名.模块名…

  2. pers : 个人项目,指个人发起,独自完成,可分享的项目,copyright主要属于个人.
      包名 : pers.个人名.项目名.模块名…

  3. priv : 私有项目,指个人发起,独自完成,非公开的私人使用的项目,copyright属于个人.
      包名 : priv.个人名.项目名.模块名

2. 注释模板

2.1 类注释

Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第3张图片

2.2 属性注释

在这里插入图片描述

2.3 方法注释

Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第4张图片

2.4 构造方法注释

Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第5张图片

三、权限修饰符

Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第6张图片

四类分别对应: 我自己我邻居我儿子陌生人


  • private私有的意思,只能自己内部调用
  • (default)缺失的意思,之前说过,同包连导包语句都可省,省个权限修饰符也没什么毛病吧
  • protected保护的,父子间血脉是受保护的

四、内部类

一个类内部,包含另一个类。这个里面的类,就叫做内部类
为什么要有内部类?心脏可以看做一个类吧?脱离了身体类,它就没有意义。所以心脏类就是一个内部类。

分类:

  1. 成员内部类
  2. 局部内部类(包含匿名内部类)

1. 内部类的定义格式

内部类和外部类的格式一模一样

public class 内部类名称 {}
  • 注意: 内部类可以随意访问外部类,外部类需要借助内部类对象
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第7张图片

  • 可以看到13行定义了一个外部类私有方法,8行的内部类调用成功(没标红报错)

  • 19~23外部类调用内部类方法,需要先创建了内部类对象

2. 内部类的使用

内部类的使用,可以分为间接使用直接使用 两种方式

  • 间接使用: 通过外部类方法调用内部类方法
    可以采取匿名对象的方式
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第8张图片

  • 直接使用: 直接创建内部类对象,再调用方法

// 直接使用的格式
外部类.内部类 对象名 = new 外部类().new 内部类();

  • 类文件
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第9张图片
  • 运行文件
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第10张图片

提示:内部类的编译

内部类究竟是怎样的存在?或者说,内部类究竟在编译过程中,发生了什么?

  1. 打开out文件夹(里面放着编译后的.class文件)
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第11张图片
  2. 找到项目文件夹
  3. 查看
    在这里插入图片描述
  • 发现: 内部类的命名利用了外部类$内部类的形式

3. 重名变量访问

外部类访问内部类很好办,因为要通过内部类对象。
内部类如何访问外部类的重名变量呢?

外部类名.this.重名变量;

Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第12张图片

4. 局部内部类

局部内部内核成员内部类就是放的位置不一样,注意这个内部类只能在这个方法内。
Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第13张图片

小提示: 其实可以通过这个方法,return一个Object,然后向下转型。但是这样做很麻烦,不提倡。

5. 类的权限修饰符

在这里插入图片描述

  • 外部类: public(default)
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第14张图片
    外部类,私有化还有意义嘛?(不能调用)
  • 成员内部类: publicprotected(default)private
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第15张图片
  • 局部内部类: 啥都不能写(不是(default)的意思)

6. 局部内部类的final问题

  1. new出来的对象在堆当中
  2. 成员方法在栈中
  3. 成员方法运行完毕,出栈,局部变量消失
  4. 对象要等垃圾回收才失效

问题来了: 如果这个局部内部类要用局部变量咋办?局部变量消失后
解决办法: 让这个局部内部类,把需要的局部变量复制一份(当然这个复制的动作不需要我们做)。如果这个局部变量会变的话,复制哪个?所以,不能让它变,要加上final关键字

Java8开始,final可以省略不写。(这叫【有效final】)

7. 匿名内部类 【重点!】

如果接口的实现类(或子类)只需要使用一次,就可以使用匿名内部类

接口名称 对象名 = new 接口名称() {
	// 重写所有抽象方法
}

  1. 先定义一个接口
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第16张图片

  2. 通过【匿名内部类】直接调用(蓝底就是匿名内部类),注意结尾的分号
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第17张图片

  3. 调用方法,结果
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第18张图片

注意

匿名内部类省略的是类名称 (省略了实现类/子类名称),而不是对象名称 。下面这个两个都省了,叫做匿名对象匿名内部类

new 接口名称() {
	// 重写所有抽象方法
}

匿名内部类 是在创建对象时,只能使用唯一一次
匿名对象 是在调用方法时,只能使用唯一一次

8. 类作为成员变量类型

以下为了方便,我没有使用标准格式(私有化+Getter/Setter,这样代码看上去也不至于凌乱)

  • 创建一个武器类
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第19张图片
  • 创建一个英雄类 (武器类作为数据类型)
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第20张图片
  1. 运行
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第21张图片

9. 接口作为成员变量类型

  • 接口
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第22张图片
  • 用接口作为成员变量类型
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第23张图片
  • 运行
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第24张图片

当然,还可以使用匿名对象进一步简化

五、Test:继续发红包

1. 准备复制

素材在我上传的文件里,包括图片和接口。

2. 红包实现

2.1 创建红包

  1. 创建一个新文件,创建RedPacketFrame类对象,发现是一个抽象类。所以下一步要创建一个它的实现类
    在这里插入图片描述
  2. 出现红线,按Alt 回车,选择第一项。按照提示,在运行文件中创建实现类实例并传入参数“标题”
    在这里插入图片描述
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第25张图片
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第26张图片

2.2 测试程序

  1. 直接运行
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第27张图片
  2. 金额、个数、留言都没问题。塞钱进红包也没问题
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第28张图片
  3. 点击页面上的元素,看看哪些功能没完成
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第29张图片
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第30张图片

2.3 实现平均红包

  1. 按照提示,输入群主名称
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第31张图片
  2. 设置打开方式,发现要使用OpenMode接口
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第32张图片
  3. 创建这个接口的实现AvergeMode
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第33张图片
  4. 创建接口实现对象,并传入
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第34张图片
    Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第35张图片

2.4 随机红包

关键就是创建一个新的接口实现类(注意观看注释,这应该是最接近随机的一种方法了)
Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第36张图片

Java语言进阶 #继承&多态 #Day11 #命名规范 #注释模板 #权限修饰符 #内部类 #继续发红包_第37张图片

你可能感兴趣的:(java)