第一知识单元

基本知识概述

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

Created: 2022-09-21 Wed 02:28

0.1. 互动课堂

Click to host the seminar.

0.2. 签到

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

0.3. 投票测试


参与人数 0
我选C语言! 0
我选Java! 0
, 我选C语言! , 我选Java! , 0 , 0

0.4. 教师简介

教师姓名 李欣
工作单位 北方工业大学 信息学院
电子邮箱 lx@ncut.edu.cn
办公地点 瀚学楼1122
固定电话 010-8880-1685

0.5. 课程简介

本课程为计算机专业 选修 课程,授课对象为计算机科学与技术专业的本科生。

本课程将系统地介绍 Java语言程序设计基本知识基本方法技巧 , 达到:

  1. 会用Java语言 编写 应用程序,能 阅读分析 用Java语言书写的程序
  2. 能较为熟练地上机 操作调试

为后续的 软件工程计算机网络 等专业课程的学习打下良好的理论和实践基础。

0.6. 课程安排

  • 课堂教学 32学时
    • 第一知识单元 :基本知识概述 2学时
    • 第二知识单元 :Java语言基础 2学时
    • 第三知识单元 :面向对象程序设计 8学时
    • 第四知识单元 :工具类与算法 4学时
    • 第五知识单元 :高级编程 8学时
    • 第六知识单元 :综合应用 8学时
  • 课内实验 16学时
    • 实验一 :Java编程环境安装配置 2学时
    • 实验二 :分支和循环程序设计 2学时
    • 实验三 :面向对象编程 4学时
    • 实验四 :工具类与算法 4学时
    • 实验五 :输入输出和多线程 2学时
    • 实验六 :网络和数据库 2学时
共计48学时

0.7. 成绩构成

  • 期末考试 :70%( 卷面成绩
  • 平时成绩 :30%( 出勤情况课后作业实验报告

0.8. 上课时间

0.8.1. 1-8周

周次 周一 3-4节 周三 5-6节
1   [2022-08-31 Wed] 腾讯会议
2 [2022-09-05 Mon] 浩学东402 [2022-09-07 Wed] 浩学东403
3   [2022-09-14 Wed] 浩学东403
4 [2022-09-19 Mon] 浩学东402 [2022-09-21 Wed] 浩学东403
5   [2022-09-28 Wed] 浩学东403
6 \(^*\) [2022-10-03 Mon] 浩学东402 [2022-10-05 Wed] 浩学东403
7   [2022-10-12 Wed] 811 910 911
8 [2022-10-17 Mon] 浩学东402 [2022-10-19 Wed] 811 910 911
* 本周国庆放假调休,将根据学校最新通知安排补课

0.8.2. 9-16周

周次 周一 3-4节 周三 5-6节
9   [2022-10-26 Wed] 811 910 911
10 [2022-10-31 Mon] 浩学东402 [2022-11-02 Wed] 811 910 911
11   [2022-11-09 Wed] 811 910 911
12 [2022-11-14 Mon] 浩学东402 [2022-11-16 Wed] 811 910 911
13   [2022-11-23 Wed] 811 910 911
14 [2022-11-28 Mon] 浩学东402 [2022-11-30 Wed] 811 910 911
15   [2022-12-07 Wed] 浩学东403
16 [2022-12-12 Mon] 浩学东402 [2022-12-14 Wed] 浩学东403

答疑

  • 时间 :每周三7-8节
  • 地点 :瀚学楼1122 根据情况也可线上进行

0.9. 教材

  • 书名 :Java语言与面向对象程序设计(第2版)
  • 作者 :印旻、王行言
  • 出版社 :清华大学出版社(2007.11,2020.1重印)

textbook.webp

Figure 1: 教材封面

0.10. 参考书

书名 作者 出版社 出版时间
Java程序设计(第2版) 唐大仕 清华大学出版社 2015.02
Core Java (Volume I & II), \(10^{th}\) edition (美)Horstmann, Gary Cornell Prentice Hall 2015.11
Thinking in Java, \(4^{th}\) edition (美)Bruce Eckel Prentice Hall 2006.02

0.11. 课程整体目标

  • 课程目标1
    • 掌握 Java语言的 词法数据类型流程控制 等基本知识和
      面向对象 程序设计思想的Java实现;
    • 了解 Java常用的 系统类
    • 学习 异常处理线程网络通信数据库 访问以及一些高级技术等内容;
    • 运用 所学的Java程序设计知识编写 Java Application 程序,解决实际的问题。
  • 课程目标2
    • 熟练使用 Java语言程序 开发环境
    • 掌握 熟练的上机 编程 和程序 调试 的能力, 掌握 设计调试 程序的方法和技巧。
    • 理解 数学基础 知识的基础上, 掌握 计算机在 存储处理数据 上的不同,并应用于解决实际问题。
    • 培养 程序设计能力逻辑思维能力理解 不同环境 和工具的
      应用场景

0.12. 本次课的目标

  • 程序设计与Java语言
    • 了解 程序设计语言的 发展趋势应用场景
    • 了解 什么是计算机语言
    • 了解 程序设计的 任务
    • 了解 Java语言的 特点
  • 开发环境
    • 了解 Java语言的 三个版本
    • 了解 Java程序 类型运行机制
  • 示例程序分析
    • 分析 简单的 Java Application 程序
    • 理解 语言的 特点运行机制
  • 编程环境与工具
    • 了解 JDKEclipse 集成开发环境

1. Java版本命名变化

版本 发布日期
JDK Beta 1995年
JDK1.0 1996年1月23日
JDK 1.1 1997年2月19日
J2SE 1.2 1998年12月8日
J2SE 1.3 2000年5月8日
J2SE 1.4 2002年2月6日
J2SE 5.0 2004年9月30日
Java SE 6 2006年12月11日
Java SE 7 2011年7月28日
Java SE 8 2014年3月18日
版本 发布日期
Java SE 9 2017年9月21日
Java SE 10 2018年3月20日
Java SE 11 2018年9月25日
Java SE 12 2019年3月19日
Java SE 13 2019年9月17日
Java SE 14 2020年3月17日
Java SE 15 2020年9月15日
Java SE 16 2021年3月16日
Java SE 17 2021年9月14日
Java SE 18 2022年3月22日

2. Java开发环境

参考教材

  • 2.1 pp.14-15
  • 10.1 pp.375-380

2.1. 名词解释

2.1.1. JDK, JSDK, JRE

Java Development Kit JDK Java开发工具包

  • 包括运行环境、编译工具和类库等,基本上和J2SE等同。

Java Software Development Kit JSDK Java软件开发工具包

  • 和JDK以及J2SE等同。

Java Runtime Environment JRE Java运行环境

  • 运行JAVA程序所必须的环境的集合,包含JVM及Java核心类库。

2.1.2. JVM

Java Virtual Machine JVM Java虚拟机

  • 它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
  • Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
  • JVM屏蔽了与具体操作系统平台相关的信息, 使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码), 就可以在多种平台上不加修改地运行。
  • Java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

2.1.3. Java SE, Java EE, Java ME

Java Platform, Standard Edition Java SE

  • Java SE以前称为J2SE,包含那些构成Java语言核心的类。 如:数据库连接、接口定义、输入/输出、网络编程等。 主要用于桌面应用软件的编程。

Java Platform, Enterprise Edition Java EE

  • Java EE以前称为J2EE,包含J2SE中的类及用于开发企业级应用的类。 如:EJB、servlet、JSP、XML、事务控制。 主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

Java Platform, Micro Edition Java ME

  • Java ME以前称为J2ME,为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上 运行的应用程序提供一个健壮且灵活的环境。

2.2. 下载安装

2.2.1. 官方网站

官方网站 备注
http://java.sun.com/ Stanford University Network (Sun) 时代
https://www.oracle.com/java/technologies/ 2009年4月被Oracle收购后

java-downloads.png

Figure 2: JDK下载页面( URL: https://www.oracle.com/java/technologies/downloads/

2.2.2. 获取JDK

For Windows

wget https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.zip
unzip jdk-18_windows-x64_bin.zip
ls jdk-18.0.2.1/
wget -Uri https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.zip -OutFile jdk-18_windows-x64_bin.zip -Verbose
Expand-Archive .\jdk-18_windows-x64_bin.zip -DestinationPath .
# or use 7-zip (https://www.7-zip.org/)
ls .\jdk-18.0.2.1\
wget https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.zip
unzip jdk-18_windows-x64_bin.zip
ls jdk-18.0.2.1/
# LICENSE*  README*  bin/  conf/  include/  jmods/  legal/  lib/  release*
wget https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.zip.sha256
sha256sum jdk-18_windows-x64_bin.zip
# 13298d390892ff6279ddb70bf364dbb3ff62814551997ba79c364f36c36e377a  jdk-18_windows-x64_bin.zip
cat jdk-18_windows-x64_bin.zip.sha256
# 13298d390892ff6279ddb70bf364dbb3ff62814551997ba79c364f36c36e377a
wget -Uri https://download.oracle.com/java/18/latest/jdk-18_windows-x64_bin.zip.sha256 -OutFile jdk-18_windows-x64_bin.zip.sha256 -Verbose
(Get-FileHash -Algorithm sha256 .\jdk-18_windows-x64_bin.zip).Hash.toLower()
# 13298d390892ff6279ddb70bf364dbb3ff62814551997ba79c364f36c36e377a
cat jdk-18_windows-x64_bin.zip.sha256
# 13298d390892ff6279ddb70bf364dbb3ff62814551997ba79c364f36c36e377a

For Linux

wget https://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.tar.gz
tar xvf jdk-18_linux-x64_bin.tar.gz
cd jdk-18.0.2.1/

For macOS

wget https://download.oracle.com/java/18/latest/jdk-18_macos-x64_bin.tar.gz
tar xvf jdk-18_macos-x64_bin.tar.gz
cd jdk-18.0.2.1.jdk/

For Ubuntu

javac

# Command 'javac' not found, but can be installed with:
# 
# sudo apt install openjdk-11-jdk-headless  # version 11.0.16+8-0ubuntu1~20.04, or
# sudo apt install default-jdk              # version 2:1.11-72
# sudo apt install ecj                      # version 3.16.0-1
# sudo apt install openjdk-13-jdk-headless  # version 13.0.7+5-0ubuntu1~20.04
# sudo apt install openjdk-16-jdk-headless  # version 16.0.1+9-1~20.04
# sudo apt install openjdk-17-jdk-headless  # version 17.0.4+8-1~20.04
# sudo apt install openjdk-8-jdk-headless   # version 8u342-b07-0ubuntu1~20.04

sudo apt install default-jdk
apt list | grep openjdk
# openjdk-11-dbg/focal-updates,focal-security 11.0.16+8-0ubuntu1~20.04 amd64
# openjdk-11-demo/focal-updates,focal-security 11.0.16+8-0ubuntu1~20.04 amd64
# openjdk-11-doc/focal-updates,focal-security 11.0.16+8-0ubuntu1~20.04 all
# openjdk-11-jdk-headless/focal-updates,focal-security,now 11.0.16+8-0ubuntu1~20.04 amd64 [インストール済み、自動]
# openjdk-11-jdk/focal-updates,focal-security,now 11.0.16+8-0ubuntu1~20.04 amd64 [インストール済み、自動]
# openjdk-11-jre-dcevm/focal 11.0.3+1-1 amd64
# openjdk-11-jre-headless/focal-updates,focal-security,now 11.0.16+8-0ubuntu1~20.04 amd64 [インストール済み、自動]
# openjdk-11-jre-zero/focal-updates,focal-security 11.0.16+8-0ubuntu1~20.04 amd64
# openjdk-11-jre/focal-updates,focal-security,now 11.0.16+8-0ubuntu1~20.04 amd64 [インストール済み、自動]
# openjdk-11-source/focal-updates,focal-security 11.0.16+8-0ubuntu1~20.04 all
# openjdk-13-dbg/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-demo/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-doc/focal-updates 13.0.7+5-0ubuntu1~20.04 all
# openjdk-13-jdk-headless/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-jdk/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-jre-headless/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-jre-zero/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-jre/focal-updates 13.0.7+5-0ubuntu1~20.04 amd64
# openjdk-13-source/focal-updates 13.0.7+5-0ubuntu1~20.04 all
# openjdk-16-dbg/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-demo/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-doc/focal-updates,focal-security 16.0.1+9-1~20.04 all
# openjdk-16-jdk-headless/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-jdk/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-jre-headless/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-jre-zero/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-jre/focal-updates,focal-security 16.0.1+9-1~20.04 amd64
# openjdk-16-source/focal-updates,focal-security 16.0.1+9-1~20.04 all
# openjdk-17-dbg/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-demo/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-doc/focal-updates,focal-security 17.0.4+8-1~20.04 all
# openjdk-17-jdk-headless/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-jdk/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-jre-headless/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-jre-zero/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-jre/focal-updates,focal-security 17.0.4+8-1~20.04 amd64
# openjdk-17-source/focal-updates,focal-security 17.0.4+8-1~20.04 all

2.3. 环境变量

2.3.1. Windows

run-sysdm-cpl.png

Figure 3: 设置

  • SystemPropertiesComputerName
  • SystemPropertiesHardware
  • SystemPropertiesAdvanced
  • SystemPropertiesProtection
  • SystemPropertiesRemote

2.3.2. Linux

Or WSL2, macOS, Ubuntu…

export CLASSPATH=.:/home/username/your-classpath/
# or
# javac MySQLDemo.java
java -cp .:mysql-connector-java-8.0.26.jar MySQLDemo # -classpath or --class-path

2.4. Eclipse

参考教材

  • 10.2 pp.380-397

下载链接

https://www.eclipse.org/downloads/

https://www.eclipse.org/downloads/packages/release/2022-06/r/eclipse-ide-java-developers

3. 通过程序认识Java

3.1. 源程序编辑

参考教材

  • 2.2.1 pp.16-17
// MyJavaApplication.java
import java.io.*;
public class MyJavaApplication
{
    public static void main(String args [])
    {
        System.out.println("Hello, Java World!");
    } // 行注释:end of main method
} // end of class

3.2. 字节码的编译生成

参考教材

  • 2.2.2 pp.17-18
javac MyJavaApplication.java
java MyJavaApplication
# Hello, Java World!

3.3. 定义多个类的情况

// MyApplication2.java
import java.io.*;
public class MyApplication2
{
    public static void main(String args [])
    {
        System.out.println(UserClass.msMessage);
    }
}
class UserClass
{
    static String msMessage = "Message from ...";
}

3.4. 字节码的解释与运行

参考教材

  • 2.2.3 pp.18-20
ls -l
# 合計 20
# -rw-rw-r-- 1 x x 475  8月 25 00:45 MyApplication2.class
# -rw-rw-r-- 1 x x 247  8月 25 00:45 MyApplication2.java
# -rw-rw-r-- 1 x x 446  8月 25 00:45 MyJavaApplication.class
# -rw-rw-r-- 1 x x 234  8月 25 00:45 MyJavaApplication.java
# -rw-rw-r-- 1 x x 325  8月 25 00:45 UserClass.class

4. Java语言的特点

参考教材

  • 2.6 pp.31-32
%%{init: { 'theme': 'forest', 'fontFamily': 'Times New Roman, KaiTi' }}%%
graph TB
    java["Java语言的特点"]
    java --- a["平台无关性"]
    java --- b["面向对象"]
    java --- c["安全稳定"]
    java --- d["支持多线程"]
    java --- e["简单易学"]

java-language-features.svg

4.1. 与C和C++相比Java的特点

考察项 与C和C++相比Java的特点
全局变量 全局变量封装在类中,更加 安全
条件转移指令 没有 goto 语句,提高了程序的 可读性
指针 没有指针,数组主要通过 来实现
内存管理 自动垃圾回收 机制,避免了系统崩溃
数据类型 数据类型分配固定长度,具有 一致性平台无关性可移植性
类型转换 转换时进行严格的相容性检查
头文件 改用更先进的包来管理
编译预处理 不支持
结构体和共用体 不支持
常量 定义方式不同
多重继承 接口
异常处理 健壮
面向对象 纯面向对象,完全基于 对象

5. 课后作业

参考教材 第一章第二章第十章 内容,解答以下题目。

  1. 分别描述 javajavac 命令的用途。
  2. 下载自己操作系统对应的JDK软件包,解压后查看其具有哪些子目录,同时描述每个子目录中存放文件的用途。
  3. 编写一个Java Application,利用JDK软件包中的工具编译并运行这个程序, 在屏幕上输出 I love Java!I don't like Java.I don't want to tell you if I like Java.
  4. 教材习题1-7 面向对象程序设计方法有哪些优点?
  5. 教材习题2-7 Java语言有哪些主要特点?