第 5 章 常用类的使用 伍孝金 Email:wxj@jcut.edu.cn.

Slides:



Advertisements
Similar presentations
主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
Advertisements

Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
1 第 10 章 字串. 2 字串的產生  其中 StringBuffer 與 StringBuilder 類別會在 10-3 節中介 紹。底下就來看看如何透過前 4 個建構方法產生字串: 這 是 個 測 試 字 串 4ED6 test 4ED6 test[0] test[1] test[2] test[3]
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
6. 6 Overloading methods and constructors 6
项目6 通用堆栈.
《 Java开发环境配置》 主讲人:耿力.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
第4章 类与对象 本章导读 0. 面向对象编程 1. 类声明和类体 2. 类体的构成 3. 构造方法与对象的创建 4. 对象的引用与实体
Hello小程序的运行和编译 Java AppletJava小程序的构成 1、关键字
《Java程序设计之网络编程》 教学课件 重庆大学计算机学院
算法设计与分析 Algorithm Design and Analysis
第五章 字符串.
Chapter 6 字串與時間處理.
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
Ch07 介面與多重繼承 物件導向程式設計(II).
第5章 进一步讨论对象和类.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
第九章 字符串.
JAVA语言程序设计 第七章 类的继承性 (上).
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
常用工具类.
2018/11/22 Java语言程序设计-程序流程 教师:段鹏飞.
第六章 类的扩展与继承.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
本單元介紹何謂變數,及說明變數的宣告方式。
2018/11/27 Java语言程序设计-程序流程 教师:段鹏飞.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式設計實作.
第四章 基本輸出入 Java應用程式的輸出入介面有三種,分別是命令提示字元視窗、AWT元件、及Swing元件。本單元先介紹命令提示字元視窗,AWT請看第16、17章,Swing請看第20章。 輸入 輸出.
抽象类 File类 String类 StringBuffer类
CH09 套件 物件導向程式設計(II).
Java程序设计 第9章 继承和多态.
辅导课程十三.
類別的繼承 Vehicle Car.
3.1 数据类型 3.2 标识符与关键字 3.3 常量 3.4 变量 3.5 运算符与表达式 3.6 一个编程实例
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
第五張 方法.
第一章 Java语言概述.
Java程序设计 第2章 基本数据类型及操作.
3.7 Java的工具类.
Ch02-基礎語法.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Java程序设计 第8章 字符串和文本I/O.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
Java變數 2014/6/24.
第二章 Java基本语法 讲师:复凡.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
第二章 Java语法基础.
Review 1~3.
第二章 Java基本语法 讲师:复凡.
第6章 面向对象的高级特征 学习目标 本章要点 上机练习 习 题.
第4章 数组与字符串 学习目标 本章要点 上机练习 习 题.
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
JAVA 程式設計與資料結構 第三章 物件的設計.
變數、資料型態、運算子.
第2章 Java语言基础.
第二章 Java基础语法 北京传智播客教育
Summary
变量定位图形 Java中数据的类型分为四种:基本数据类型、数组类型、类类型以及接口类型。任何常量和变量都一定是上述四种数据类型中的一种。简单数据类型的实例化有两种:变量和常量。 变量名和常量名必须是Java语言中合法的标识符。 常量是在程序运行期间值不改变的量。 变量是在程序运行期间值可通过赋值改变的量,
Presentation transcript:

第 5 章 常用类的使用 伍孝金 Email:wxj@jcut.edu.cn

第 5 章 常用类的使用 授 课 大 纲 5.1 Java类库的结构 5.2 java.lang包中的常用类 5.3 有关日期时间的类

5.1 Java类库的结构 Java类库是什么? Java类库是指Java API文档,API,英文全称为Application Programming Interface,中文是应用程序编程接口,是系统提供的已实现的标准类的集合,有点类似于C语言所提供的函授库。 Java学习者和开发人员可以通过这个类库来了解和学习某个类和接口,比如类和接口的用途、继承关系、类的属性、构造方法和方法,然后在自己的程序中熟练使用这些类和接口,这样能大大提高编程效率。

5.1 Java类库的结构 Java类库是什么? Java类库中的类和接口大多封装在特定的包里,每个包具有自己的功能。下面的表中列出了Java一些常用的包及其功能的描述。其中,包名后面带“. *”的表示其中包括一些相关的包。 提示:在使用Java时,除了java.lang包外,其它的包都需要import语句引入之后才能使用。

5.1 Java类库的结构:常用类库 包名 主要功能 java.applet 提供了创建applet需要的所有类 java.awt.* 提供了创建用户界面以及绘制和管理图形、图像的类 java.io 提供了通过数据流、对象序列以及文件系统实现的系统输入、输出 java.lang Java编程语言的基本类库 java.math.* 提供了简明的整数算术以及十进制算术的基本函数 java.net 提供了用于实现网络通讯应用的所有类 java.sql 提供了访问和处理来自于Java标准数据源数据的类 java.text 包括以一种独立于自然语言的方式处理文本、日期、数字和消息的类和接口 java.util 包括集合类、时间处理模式、日期时间工具等各类常用工具包 javax.swing.* 提供了一系列轻量级的用户界面组件,是目前Java用户界面常用的包

5.1 Java类库的结构 类库在哪里?如何使用? (1)在线查看,网址:http://docs.oracle.com/javase/8/docs/api/ (2)下载到本地,下载地址:http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html (3)也可以在老师的课程网站“书籍与资料”下载。 提示:有兴趣研究这些类源代码的同学,可以在JDK的安装目录下\jdk1.8.0\src.zip的文件找到。

5.1 Java类库的结构 类库在哪里?如何使用? Java类库中包括几千个类,方法的数量之多更是惊人,要想记住所有的类和方法几乎是不可能的事情,因此,学会使用Java类库就显得十分重要。 Java类库或Java API文档是JDK的一部分,它是以HTML格式文件格式保存的,用浏览器打开Java API存放目录下的/docs/api/index.html文件,就可看到如下图所示的界面。

5.2 java.lang包中的常用类 java.lang包中的常用类

5.2 java.lang包中的常用类 Object类 Object类是Java程序中所有类的直接或间接父类,故有时也将Object被称为根类。 该类位于java.lang包中,它有如下几个常用方法: equals():用于比较两个对象是否指向同一块内存区域 hashCode():返回该对象的哈希码值(整数),用于标识一个对象,如果两个对象相等,则哈希码值一定相同; toString():返回值是String类型,描述当前对象的有关信息,当对象与String型数据的连接时,自动调用。 getClass():返回此 Object 对象运行时所属的类。

5.2 java.lang包中的常用类 源代码:TestObject.java Circle circle2 = new Circle(10); Circle circle3 = new Circle(10); Circle circle4 = circle3; System.out.println(circle2.getClass().getName()); System.out.println(circle2.equals(circle3)); System.out.printlncircle4.equals(circle3)); System.out.println(circle2.hashCode()); System.out.println(circle3.hashCode()); System.out.println(circle2.toString());

5.2 java.lang包中的常用类 Object类 运行结果的说明: (1)尽管半径都是10,但用new操作符创建的圆是两个不同的对象,所以其引用变量存储的引用是不同,因而当两个引用变量比较的时候,肯定是false。 (2)当将一个引用变量赋值给另一个引用变量的时候,实际上是将这个引用变量指向同一个对象,它们存储的引用是相同的,所以当它们比较的时候,是true。 (3)equals用于比较两个对象是否相同。

5.2 java.lang包中的常用类 Object类 (4)hashCode()返回的是一个与存储地址有关的整数,也称为散列值,如果两个对象相同,则它们的散列值也相同。但散列值相同,则不一定是相同的对象。 (5)toString():返回值是一个代表对象的字符串,一般由类名、@和无符号的哈希码的十六进制组成: 类名+ ‘@’ + Integer.toHexString(hashCode()) 比如:com.solo.teaching.Circle@15db9742 该方法一般会重写,比如字符串类就重写这个方法。

5.2 java.lang包中的常用类 System类 System类代表系统,系统级的很多属性和控制方法都放置在该类的内部,比如:标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。 它是一个特殊类,是一个公共最终类,不能被继承,也不能被实例化,即不能创建System类的对象。该类中所有的变量和方法都是静态的,使用时直接用:System.变量名、System.方法名,比如: System.out.println()等。

5.2 java.lang包中的常用类 System类 1. 字段 该类包含三个标准输入输出的字段,分别是: public static final InputStream in---标准输入,如键盘,in这个字段是InputStream类的一个对象。 public static final PrintStream out---标准输出,如显示器,out属于PrintStream类的一个对象,PrintStream类提供了很多print()、printf()和println()方法 。这就是前面System.out.println()写法的来历。 public static final PrintStream err---标准输出。

5.2 java.lang包中的常用类 System类 2. 方法 方法 描述 static long currentTimeMillis()  此方法返回以毫秒为单位的当前时间 static void exit(int status)  此方法终止当前运行的Java虚拟机. static void gc()  这种方法运行垃圾收集器. static Properties getProperties()  这个方法决定了当前系统属性.

5.2 java.lang包中的常用类 System类 源代码: TestCurrentTimeMillis.java TestGetProperties.java TestGc.java

5.2 java.lang包中的常用类 Math类 Math类提供了很多方法用于计算常用的数学函数,而且这些字段和方法都是静态的,可以直接使用类名来访问或调用,比如:Math.pow(a,b)、Math.random()等。 1.Math类定义的两个双精度常量的字段 static double E---常量,自然对数的底数e(2.7182818284590452354) static double PI---常量,圆周率pi(3.14159265358979323846)

5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ①三角函数 public static double sin(double a)------三角函数正弦。 public static double cos(double a)------三角函数余弦。 public static double tan(double a)------三角函数正切。 public static double asin(double a)------三角函数反正弦。 public static double acos(double a)------三角函数反余弦。 public static double atan(double a)------三角函数反正切。

5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ② 指数函数 public static double exp(double a)------返回ea的值。 public static double log(double a)------ 返回lna的值。 public static double pow (double y,double x)------ 返回以y为底数,以x为指数的幂值。 public static double sqrt(double a)------ 返回a的平方根。

5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ③ 舍入函数 public static intceil(double a):返回大于或等于a的最小整数 public static intfloor(double a):返回小于或等于a的最大整数。以下三个方法都有其它数据类型的重载方法: public static intabs(int a)------- 返回a的绝对值。 public static intmax(int a,int b)------- 返回a和b的最大值。 public static intmin(int a,int b)------- 返回a和b的最小值。

5.2 java.lang包中的常用类 Math类 2.Math类定义的常用方法 ④其它数学方法 public static double random( )------ 返回一个伪随机数,其值介于0和1之间。 public static double toRadians(doubleangle )------ 将角度转换为弧度。 public static double toDegrees (doubleangle)------ 将弧度转换为角度。

5.2 java.lang包中的常用类 String类 (1)字符串的概念:由字符构成的序列,属于引用型数据类型,Java专门提供了一个String类来处理字符串。 (2)字符串的声明: String 变量名; 比如:String s1; (3)创建字符串: String 变量名 = new String(); String 变量名 =“内容”; 例如: String s4 = new String(“Hello,java!”); String s1 = "Hello,java!";

5.2 java.lang包中的常用类 String类 (4)字符串常用方法: 求字符串长度length()方法: String s = "Welcome to Java"; System.out.println("该字符串的长度是:" + s.length()); 字符串的转换toLowerCase()和toUpperCase()方法: System.out.println("转换为小写:" + s.toLowerCase()); System.out.println("转换为大写:" + s.toUpperCase());

5.2 java.lang包中的常用类 String类 从字符串中获取字符:使用方法s.charAt(index)可获取字符串s中某个特定的字符,其中index的取值范围是0~s.length()-1之间。比如:s.charAt(3)返回值是c。

5.2 java.lang包中的常用类 String类 连接字符串:除了使用加号“+”连接字符串之外,还可以使用concat()连接字符串。 比如: String s = "Welcome to Java"; String s1 = "2014信息管理与信息系统"; System.out.println("两个字符串的连接:" + s.concat(s1));

5.2 java.lang包中的常用类 String类 比较字符串:常用的equals()和compareTo()方法 比如: String s = "Welcome to Java"; String s1 = "2014信息管理与信息系统"; String s2 = new String("Welcome to Java"); System.out.println(“比较两个字符串:" + s.equals(s1)); System.out.println(“比较两个字符串:" + s.equals(s2)); System.out.println(“比较两个字符串:" + s1.compareTo(s2));

5.2 java.lang包中的常用类 String类 比较字符串:常用的equals()和compareTo()方法 注意:==与equals之区别 对String来说,“==”是用来判断两个字符串(对象)的地址是否相同,即判断是否是同一个字符串的应用。 equals()则是判断两个字符串(对象)的值是否相等,如果相等则返回true。一般情况下,都是使用”equals()“来判断两个字符串的值是否相等,只有当你需要判断两个字符串是否是同一个对象时,才使用“==”。 源代码:TestStringEquals.java

5.2 java.lang包中的常用类 String类 比较字符串:equals()和compareTo()方法小结: 比较两个字符串是否相等,使用equals(),如果它们相等,则返回true,如果不等,则返回false。不能使用“==”来判断两个字符串是否相等,它只能检测这两个字符串是否指向同一个对象。 compareTo()方法用于两个字符串等于、大于和小于等的比较,等于返回0,大于返回正整数,小于返回负整数。如使用大于、等于等比较运算符比较两个字符串,会发生语法错误。

5.2 java.lang包中的常用类 String类 截取较字符串substring()方法 str.substring(int beginIndex)截取str从首字母起长度为beginIndex的字符串,将剩余字符串赋值给一个新的字符串。 str.substring(int beginIndex,int endIndex)截取str中从beginIndex开始至endIndex结束时的字符串,并将其赋值给一个新的字符串。 System.out.println("截取字符串:" + s.substring(11)); System.out.println("截取字符串:" + s.substring(3,11)); 源代码:TestSubstring.java

5.2 java.lang包中的常用类 String类 boolean isEmpty(),当且仅当length()为0时返回true,用于判断字符串是否为空 String replace(char oldChar,char newChar)返回一个新的字符串,其中newChar替换了此字符串中所有的oldChar String[] split(String str)返回一个字符串数组,原字符串将以str作为分隔符,分割成若干个组成部分 trim():trim():去掉字符串首尾的空格。

5.2 java.lang包中的常用类 StringBuffer类 为什么需要StringBuffer类 String是不变类(immutable object),用String修改字符串会新建一个String对象,如果频繁的修改,将会产生很多的String对象,开销很大。为此,Java提供了一个StringBuffer类,这个类可以在字符串中添加、插入或追加新的内容,在这方面其效率要比String高。 StringBuffer不是不变类,在修改字符串内容时,不会创建新的对象,因此,它比String类更适合修改字符串。

有4个构造方法,可以使用构造方法创建一个空的构造方法 或从一个字符串创建一个构造方法。 5.2 java.lang包中的常用类 StringBuffer类 StringBuffer类的构造方法 有4个构造方法,可以使用构造方法创建一个空的构造方法 或从一个字符串创建一个构造方法。   StringBuffer()            构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 StringBuffer(CharSequence seq)           构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。 StringBuffer(int capacity)            构造一个不带字符,但具有指定初始容量的字符串缓冲区。 StringBuffer(String str)            构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: 5.2 java.lang包中的常用类 StringBuffer类 StringBuffer的常用方法 StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: append():将任何类型数据的字符串追加到调用的StringBuffer对象的末尾。 insert():插入字符串。 delete():删除字符串。 reverse():将此字符序列用其反转形式取代。 示例源代码:TestStringBuilder.java  

StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: 5.2 java.lang包中的常用类 StringBuffer类 StringBuffer的常用方法 StringBuffer类中的方法主要用于对字符串的操作,例如追加、插入和删除等。常用的方法介绍如下: append方法 insert方法 reverse方法  

5.2 java.lang包中的常用类 包装类 什么是包装类? 基本数据类型不具有对象的特性,而Java是用面向对象的思想去处理数据,为此,Java为每个基本数据类型都提供了一个包装类。 与8种基本数据类型相对应,包装类分别是: Character、Byte 、 Short 、 Integer 、 Long 、 Float 、 Double 、 Boolean。 使用包装类,就可以像操作对象那样来操作基本数据类型。

5.2 java.lang包中的常用类 基本数据类型 包装类 byte Byte boolean Boolean short Short char Character int Integer long Long float Float double Double

5.2 java.lang包中的常用类 包装类 包装类常用的字段有哪些? 这些类一般都提供了最大值、最小值等一些常数字段,以方便使用,如: static double MAX_VALUE static double MIN_VALUE static int MAX_VALUE static int MIN_VALUE 使用:double max = Double.MAX_VALUE;

5.2 java.lang包中的常用类 包装类 包装类常用的构造方法有哪些? 包装类没有无参构造方法,但提供带参数的构造方法: 通过构造方法,可以使用基本数据类型值来构造包装类,比如:new Double(5.0)、new Integer(5)。 Double(double value) 构造一个新分配的 Double 对象,它表示基本的 double 参数。 Integer(int value) 构造一个新分配的 Integer 对象,它表示指定的 int 值。

5.2 java.lang包中的常用类 包装类 包装类常用的方法有哪些? 每个包装类都包含了doubleValue(), floatValue(), intValue(), longValue(), shortValue(), 和byteValue()方法,可将对象转换为基本类型值。 比如: Double obj = new Double(10.35); double d = obj.doubleValue(); System.out.println("Value = " + d);

5.2 java.lang包中的常用类 包装类 包装类常用的方法有哪些? 数值包装类中包含compareTo()方法用于比较两个数值,并且如果该数值大于、等于或小于另一个数值时,返回1、0、-1。 例如: new Double(2.4).compareTo(new Double(2.3)) //returns 1; new Double(2.3).compareTo(new Double(2.3)) //returns 0; new Double(2.3).compareTo(new Double(2.5))//returns -1;

5.2 java.lang包中的常用类 包装类 包装类常用的方法有哪些? 提供了valueOf(String),toString(),用于从字符串转换及或转换成字符串。 还提供了parseInt、 parseDouble等静态方法将一个数值字符串转换为一个int或double值。 int a = Integer.parseInt("11"); int b = Integer.parseInt("11", 2) ; int c = Integer.parseInt("12", 8) ;

5.2 java.lang包中的常用类 包装类 包装类装箱或拆箱是什么? 将基本类型值转换为包装类对象的过程称为装箱(boxing),相反的转换过程称为拆箱(unboxing)。 Java允许基本类型和包装类类型之间自动转换。如果一个基本类型值出现在需要对象的环境中,编译器会将基本类型值进行自动装箱;如果一个对象出现需要基本类型值得环境中,编译器会将对象进行自动拆箱。 以上就称为自动装箱或自动拆箱。

5.2 java.lang包中的常用类 包装类 包装类装箱或拆箱是什么? Integer a = new Integer(3); Integer b = 3; // 将3自动装箱成Integer包装类 int c = 3; System.out.println(a == b); // 运行结果为:false。两个引用变量a和b没有指向同一个对象 System.out.println(a == c); // 运行结果为:true。a自动拆箱成int类型再和c比较

5.3 java.util包中常用的类 Date类 Date类位于java.util包中,表示日期和时间,提供两个构造方法来实例化Date对象。 Date类提供了方法来处理日期或时间,但其中的一些方法已过时,不推荐使用。 构造方法 说明 Date() 使用当天的日期创建 Date Date(long date) 使用自 1970 年 1 月 1 日0时0分0秒以后的指定毫秒数创建 Date

5.3 java.util包中常用的类 Date类 // 创建并初始化一个日期(初始值为当前日期) Date date = new Date(); System.out.println("现在的日期是 = " + date); System.out.println("现在的日期是 = " + date.toString()); 运行输出的结果是: 现在的日期是 = Wed Oct 19 08:25:36 CST 2016 CST (时区缩写),China Standard Time,Central Standard Time,美国,澳大利亚,古巴或中国的标准时间。

5.3 有关日期时间的类 SimpleDateFormat类 可以通过java.text.SimpleDateFormat 类完成功能。但是如果要进行格式化的话,有一点必须注意的是,需要指定一个格式化日期的模板: 年(yyyy)、月(MM)、日(dd)、时(HH)、 分(mm)、秒(ss)、毫秒(SSS)

5.3 java.util包中常用的类 SimpleDateFormat类 // 设置日期和时间的输出的格式模板 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); // 创建并初始化一个日期(初始值为当前日期) Date date = new Date(); String dt = sdf.format(date); System.out.println("格式化后的日期为: " + dt); //格式化后的日期为: 2016-10-19 08:52:22.054

5.3 java.util包中常用的类 Calendar日历类 Java中提供了Calendar用于日期进行操作的类,其声明: public abstract class Calendar extends Objectimplements Serializable, Cloneable, Comparable<Calendar>   该类被abstract所修饰,说明不能通过new的方式来获得实例,对此,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的对象,getInstance方法返回一个Calendar对象(该对象为Calendar的子类对象),其日历字段已由当前日期和时间初始化: Calendar rightNow = Calendar.getInstance();   示例代码:TestCalendar.java

小结: Java类库什么是类库?如何使用? java.lang包中的常用类 日期时间类 作业 见课程网站“教学资源”第5章