第六知识单元

考试说明与知识回顾

Java程序设计 第13讲,主讲人:李欣

Created: 2023-12-12 Tue 21:30

0.1. 互动课堂

Click to host the seminar.

0.2. 签到

https://xin.blue/tool/attendance/

1. 考试说明

1.1. 考试方式

笔试
  • 闭卷,考试时不能携带通讯工具、书籍、参考资料等;
  • 考试时试卷上须填准确 序号 班级 姓名 学号 等信息;
  • 选择题需要按卷面要求将答案填写在指定区域内。

1.2. 题型说明

选择题(20分)
  • 20题 ,每题 1分
填空题(10分)
  • 10题 ,每题 1分
简答题(15分)
  • 3题 ,每题 4-7分
程序阅读题(15分)
  • 3题
程序设计题(40分)
  • 2题

1.3. 成绩构成

  • 期末考试 :70%( 卷面成绩
    • 考试时间: 12月28日 (周四) 15:30
    • 考试地点:
      • 广学西 501 教室(序号 1 ~ 60)
      • 广学西 502 教室(序号 61 ~ 119)
  • 平时成绩 :30%( 出勤情况课后作业实验报告
    • 实验报告提交截至时间: 12月22日 (周五) 23:59

2. 知识回顾

2.1. Java环境

Java Development Kit JDK Java开发工具包
  • 包括运行环境、编译工具和类库等,基本上和J2SE等同。
  • javajavac 命令的用途是什么?
Java Software Development Kit JSDK Java软件开发工具包
  • 和JDK以及J2SE等同。
Java Runtime Environment JRE Java运行环境
  • 运行JAVA程序所必须的环境的集合,包含JVM及Java核心类库。
Java Virtual Machine JVM Java虚拟机
Java Platform Java ?E Java三个版本
  • Java Platform, Standard Edition Java SE
  • Java Platform, Enterprise Edition Java EE
  • Java Platform, Micro Edition Java ME

2.2. 标识符

标识符 是赋予 变量方法数组 等的 名称

Java对于 标识符的定义 有如下的规定:

  • 可以由 字母数字两个特殊字符下划线 _美元符号 $ )组合而成。
  • 标识符必须以 字母下划线 _美元符号 $ 开头。
  • Java是大小写敏感的语言, classClassSystemsystem 分别代表 不同的 标识符
  • 应该使标识符尽量反映它所表示的 变量常量对象意义
  • 关键字 不能 作为 标识符

2.3.

  • 抽象 封装
  • 继承 多态
  • 覆盖 重载
  • 对象 this super

2.3.1. 类的定义

类头
  • 使用关键字 class 标志类定义的开始;
  • class 关键字后面跟着用户定义的类的 类名
  • 类名的命名应符合Java对标识符命名的要求。
类体
  • 用一对 大括号 括起,包括 方法 两大部分;
  • 其中 对应类的 静态属性方法 对应 类的行为操作
  • 一个类中可以定义 多个 方法

2.3.2. 抽象类与抽象方法

抽象类
  • abstract 修饰符 修饰的类被称为 抽象类 。 抽象类就是 没有具体对象概念类
抽象方法
  • abstract 修饰符 修饰的方法被称为 抽象方法
  • 这是一种仅有 方法头 ,没有 大括号 包含的 方法体操作实现 的方法。
复习思考
  • 抽象类中是不是只能有抽象方法?一般方法定义在抽象类中可不可以?
  • 抽象方法是不是只能定义在抽象类中?定义在一般类中可不可以?定义在接口中呢?

2.3.3. 最终类与最终域

最终类
  • 如果一个类被 final 修饰符 所修饰和限定, 说明这个类 不能 再有 子类
最终域
  • 如果一个域被 final 修饰符 所修饰和限定, 说明这个域 不能 改变 数值 ,即为 常量
  • final 修饰符 说明 常量 时,需要注意以下几点:
    • 需要说明 常量数据类型
    • 需要同时指出 常量具体数值
    • 为节省空间, 常量 通常声明为 static

2.3.4. 静态域与静态方法

静态域
  • static 修饰的 仅属于类静态域
  • 静态域 不属于 任何一个类的具体 对象
  • 它不保存在某个对象的内存区间中,而是保存在 类的内存区域 的公共存储单元。
静态方法
  • static 修饰的 方法属于整个类类方法
  • 不用 static 修饰的 方法属于某个具体类对象或实例 对象方法 ,或叫做 实例方法
  • 调用静态方法时,应使用 类名 做前缀,而不是某一个具体的 对象名
  • 静态方法不能处理某具体对象的 成员变量 ,只能处理 静态域

2.3.5. 构造方法

  • 构造函数的 方法名类名 相同
  • 构造函数 没有 返回类型
  • 构造函数的主要作用是完成对 类对象初始化 工作 ;
    • 在创建一个类的新对象的同时,系统会 自动调用 该类的构造函数 为新对象初始化
    • 构造函数一般 不能 由编程人员 显示地直接调用
  • 类中若无定义任何构造方法,系统会为该类配一个隐含的构造方法,无参数,方法体为空。 一旦定义了一个构造方法,隐含构造方法失效。

2.4. 接口

  • 接口 可理解为是由 常量抽象方法 组成的 特殊类
  • 一个类只能有一个父类,但是它可以同时实现若干个接口。
  • 与类相仿,接口也具有 继承性 ,但与类的继承不同的是一个接口可以有 一个以上 的父接口。

2.4.1. 声明接口

接口头
  • 使用关键字 interface 标志接口定义的开始;
  • interface 关键字后面跟着的是 接口名
  • 接口名的命名应符合Java对标识符命名的要求。
接口体
  • 用一对 大括号 括起,包括用 public static final 修饰的 常量 和 用 public abstract 修饰的 抽象方法 两大部分;
  • 接口中只能给出 抽象方法方法名返回值参数列表 ,而不能给出 方法体

2.4.2. 实现接口

  • 在类的声明部分,用 implements 关键字声明该类将要实现哪些接口;
  • 如果实现某接口的类不是 abstract 抽象类,则在类的定义部分必须实现指定接口的所有抽象方法;
  • 如果实现某接口的类是 abstract 抽象类,则它可以不实现该接口所有的方法, 但该抽象类的非抽象子类必须实现其父类中未实现的抽象方法;
  • 必须使用完全相同的方法头,即完全相同的 方法名返回值参数列表
  • 实现方法时,必须显式地使用 public 修饰符,避免缩小接口中定义方法的访问控制范围。

2.5. 访问控制符

访问控制符 是一组限定 属性方法 是否可以被 程序中的其他部分 访问调用修饰符 。 这里的 其他部分 是指程序里这个类之外的 其他类

2.5.1. 类的访问控制

  无修饰的 默认类 public 修饰的 公共类
同一包中的类 可以访问 可以访问
不同包中的类 不可访问 可以访问

参考教材

  • 4.6.1 p.86

2.5.2. 类成员的访问控制

公共类
类成员访问控制符 public protected 无修饰 private
可以访问类成员的区域 所有类 包中的类 所有子类 包中的类 本类
默认类
类成员访问控制符 public protected 无修饰 private
可以访问类成员的区域 包中的类 包中的类 包中的类 本类

参考教材

  • 4.6.2 pp.86-90

2.6.

  • 包分为 无名包有名包 ,没有 package 语句的编译单元中定义的类所在的包为 无名包
  • 若存在 package 语句,则该语句必须为Java源文件的 第一条 语句, 指明该编译单元中定义的类属于哪个 有名包
  • 一个编译单元中只允许有一个 package 语句。
  • 在一个编译单元中, import 语句不限一个,但必须出现在所有类定义之前。
  • Java把 对应于文件系统的 目录结构 ,包名一般采用小写字母。

2.7. 数组与向量

  • 怎样声明一个数组?如何创建向量类的对象?
  • 怎样创建数组空间?如何向向量序列中添加元素?
  • 关于它们的长度,是固定长度的,还是可变的?
  • 关于它们的元素,是相同类型的,还是不同的?
  • 关于它们的元素,是基础数据类型,还是引用数据类型?
  • 通过数组的哪个属性可以获得数组元素的个数?

2.8. 异常处理

  • catch 块紧跟在 try 块的后面,用来接收 try 块中可能产生的异常。
  • 一个 try 块后面可能会跟着若干个 catch 块,每个 catch 块都有一个异常类名作为参数。
    • 如果 try 块中所有语句的执行都没有引发异常,则所有的 catch 块都会被忽略而不予执行;
    • 如果 try 块产生的异常对象被第一个 catch 块所接收, 则程序的流程将直接跳转到这个 catch 语句块中,语句块执行完毕后就退出当前方法, try 块中尚未执行的语句和其他的 catch 块将被忽略;
    • 如果 try 块产生的异常对象与第一个 catch 块不匹配, 系统将尝试按顺序匹配接下来的 catch 块, 直到找到一个可以接收该异常对象的 catch 块;
    • 如果所有的 catch 块都不能与当前的异常对象匹配, 程序流程将返回到调用该方法的上层方法,继续抛出异常;
    • 无论是否产生异常, finally 块内的语句都会被执行;
    • 异常处理的 catch 块,若其参数与所抛出异常对象的类型相同或是所抛出异常对象的父类,则接受异常对象,进行处理;
    • 如果 catch 块完成了异常处理,程序将继续执行最后一个 catch 块或 finally 块后的语句。
class Main {
    public static void main(String[] args) {
        double j = 0;
        try {
            for (int i = 1; i >= -1; i--) {
                j = 8 / i;
                System.out.println("try, i: " + i);
            }
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            System.out.println("finally");
        }
        System.out.println("after try-catch block");
    }
}
try, i: 1
java.lang.ArithmeticException: / by zero
finally
after try-catch block

2.9. 文件

文件 File

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/io/File.html

随机读写文件 RandomAccessFile

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/io/RandomAccessFile.html

2.10. 数据库编程

Java Database Connectivity (JDBC)

是什么?如何理解?

Connection

https://docs.oracle.com/en/java/javase/18/docs/api/java.sql/java/sql/Connection.html

Statement

https://docs.oracle.com/en/java/javase/18/docs/api/java.sql/java/sql/Statement.html

ResultSet

https://docs.oracle.com/en/java/javase/18/docs/api/java.sql/java/sql/ResultSet.html

2.11. 网络编程

URLConnection

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/net/URLConnection.html

Socket

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/net/Socket.html

ServerSocket

https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/net/ServerSocket.html