Java程序设计-2024-2025学年第二学期

刘香菊、董立凯、刘媛

目录

  • 1 Java入门
    • 1.1 课程标准
    • 1.2 教学日历
    • 1.3 说课
    • 1.4 Java的地位
    • 1.5 Java的特点
    • 1.6 安装JDK
    • 1.7 Java程序的开发步骤
    • 1.8 简单的Java应用程序
    • 1.9 Java反编译
    • 1.10 编程风格
    • 1.11 Java之父--James Gosling
    • 1.12 小结
    • 1.13 讲义
    • 1.14 JDK开发环境和机构化程序设计
    • 1.15 实验:一个简单的应用程序
    • 1.16 上机练习:联合编译
    • 1.17 章节测验
    • 1.18 复习
  • 2 基本数据类型与数组
    • 2.1 教学目标
    • 2.2 学习任务单
    • 2.3 说课
    • 2.4 标识符与关键字
    • 2.5 基本数据类型
    • 2.6 类型转换运算
    • 2.7 输入、输出数据
    • 2.8 数组
    • 2.9 应用举例
    • 2.10 小结
    • 2.11 实验:输出希腊字母表
    • 2.12 上机练习:数组的引用与元素
    • 2.13 上机练习:遍历与复制数组
    • 2.14 章节测验
    • 2.15 复习
  • 3 运算符、表达式和语句
    • 3.1 说课
    • 3.2 运算符与表达式
    • 3.3 语句概述
    • 3.4 if条件分支语句
    • 3.5 switch开关语句
    • 3.6 循环语句
    • 3.7 break和continue语句
    • 3.8 for语句与数组
    • 3.9 应用举例
    • 3.10 小结
    • 3.11 上机练习:回文数
    • 3.12 上机练习:猜数字游戏
    • 3.13 章节测验
    • 3.14 复习
  • 4 类与对象
    • 4.1 说课
    • 4.2 编程语言的几个发展阶段
    • 4.3 类
    • 4.4 构造方法与对象的创建
    • 4.5 类与程序的基本结构
    • 4.6 参数传值
    • 4.7 对象的组合
    • 4.8 实例成员与类成员
    • 4.9 方法重载
    • 4.10 this关键字
    • 4.11 包
    • 4.12 import语句
    • 4.13 访问权限
    • 4.14 基本类型的类封装
    • 4.15 对象数组
    • 4.16 JRE扩展与jar文件
    • 4.17 文档生成器
    • 4.18 应用举例
    • 4.19 小结
    • 4.20 实验:机动车
    • 4.21 上机练习:家中的电视
    • 4.22 上机练习:共饮同井水
    • 4.23 实验:求方程的根
    • 4.24 章节测验
    • 4.25 复习
  • 5 子类与继承
    • 5.1 说课
    • 5.2 子类与父类
    • 5.3 子类的继承性
    • 5.4 子类与对象
    • 5.5 成员变量的隐藏和方法重写
    • 5.6 super关键字
    • 5.7 final关键字
    • 5.8 对象的上转型对象
    • 5.9 继承与多态
    • 5.10 abstract类和abstract方法
    • 5.11 面向抽象编程
    • 5.12 开-闭原则
    • 5.13 应用举例
    • 5.14 小结
    • 5.15 上机练习:中国人、北京人和美国人
    • 5.16 实验:银行计算利息
    • 5.17 实验:公司支出的总薪水
    • 5.18 章节测验
    • 5.19 复习
  • 6 接口与实现
    • 6.1 说课
    • 6.2 接口
    • 6.3 实现接口
    • 6.4 接口的UML图
    • 6.5 接口回调
    • 6.6 理解接口
    • 6.7 接口与多态
    • 6.8 接口参数
    • 6.9 abstract类与接口的比较
    • 6.10 面向接口编程
    • 6.11 应用举例
    • 6.12 小结
    • 6.13 实验:评价成绩
    • 6.14 实验:货车的装载量
    • 6.15 上机练习:小狗的状态
    • 6.16 章节测验
    • 6.17 新建课程目录
  • 7 内部类与异常类
    • 7.1 说课
    • 7.2 内部类
    • 7.3 匿名类
    • 7.4 异常类
    • 7.5 断言
    • 7.6 应用举例
    • 7.7 小结
    • 7.8 上机练习:内部购物券
    • 7.9 上机练习:检查危险品
    • 7.10 章节测验
    • 7.11 复习
  • 8 常用实用类
    • 8.1 说课
    • 8.2 String类
    • 8.3 StringTokenizer类
    • 8.4 Scanner类
    • 8.5 StringBuffer类
    • 8.6 Date类与Calendar类
    • 8.7 日期的格式化
    • 8.8 Math类、BigInteger类和Random类
    • 8.9 数字格式化
    • 8.10 Class类与Console类
    • 8.11 Pattern类与Matcher类
    • 8.12 应用举例
    • 8.13 小结
    • 8.14 上机练习:检索简历
    • 8.15 实验:菜单的价格
    • 8.16 上机练习:比较日期
    • 8.17 上机练习:处理大整数
    • 8.18 实验:替换错别字
    • 8.19 章节测验
    • 8.20 复习
  • 9 组件及事件处理
    • 9.1 说课
    • 9.2 Java Swing概述
    • 9.3 窗口
    • 9.4 常用组件与布局
    • 9.5 处理事件
    • 9.6 使用MVC结构
    • 9.7 对话框
    • 9.8 树组件与表格组件
    • 9.9 按钮绑定到键盘
    • 9.10 打印组件
    • 9.11 发布GUI程序
    • 9.12 应用举例
    • 9.13 小结
    • 9.14 实验:算术测试
    • 9.15 实验:布局与日历
    • 9.16 实验:英语单词拼写训练
    • 9.17 实验:字体对话框
    • 9.18 章节测验
    • 9.19 复习
  • 10 输入、输出流
    • 10.1 说课
    • 10.2 File类
    • 10.3 文件字节输入流
    • 10.4 文件字节输出流
    • 10.5 文件字符输入、输出流
    • 10.6 缓冲流
    • 10.7 随机流
    • 10.8 数组流
    • 10.9 数据流
    • 10.10 对象流
    • 10.11 序列化与对象克隆
    • 10.12 使用Scanner解析文件
    • 10.13 文件对话框
    • 10.14 带进度条的输入流
    • 10.15 文件锁
    • 10.16 应用举例
    • 10.17 小结
    • 10.18 上机练习:分析成绩单
    • 10.19 实验:统计英文单词
    • 10.20 实验:读取压缩文件
    • 10.21 章节测验
  • 11 JDBC与MySQL数据库
    • 11.1 说课
    • 11.2 MySQL数据库管理系统
    • 11.3 启动MySQL数据库服务器
    • 11.4 MySQL客户端管理工具
    • 11.5 JDBC
    • 11.6 连接数据库
    • 11.7 查询操作
    • 11.8 更新、添加与删除操作
    • 11.9 使用预处理语句
    • 11.10 通用查询
    • 11.11 事务
    • 11.12 连接SQL Server数据库
    • 11.13 连接Derby数据库
    • 11.14 应用举例
    • 11.15 小结
    • 11.16 上机练习:抽取样本
    • 11.17 上机练习:用户转账
    • 11.18 上机练习:查询Excel电子表格
    • 11.19 章节测验
  • 12 Java多线程机制
    • 12.1 进程与线程
    • 12.2 Java中的线程
    • 12.3 Thread类与线程的创建
    • 12.4 线程的常用方法
    • 12.5 线程同步
    • 12.6 协调同步的线程
    • 12.7 线程联合
    • 12.8 GUI线程
    • 12.9 计时器线程
    • 12.10 守护线程
    • 12.11 应用举例
    • 12.12 小结
    • 12.13 上机练习:键盘操作练习
    • 12.14 上机练习:双线程猜数字
    • 12.15 上机练习:汉字打字练习
    • 12.16 上机练习:月亮围绕地球
    • 12.17 章节测验
  • 13 Java网络编程(自学)
    • 13.1 URL类
    • 13.2 InetAddress类
    • 13.3 套接字
    • 13.4 UDP数据报
    • 13.5 广播数据报
    • 13.6 Java远程调用
    • 13.7 应用举例
    • 13.8 小结
    • 13.9 上机练习:读取服务器端文件
    • 13.10 上机练习:会结账的服务器
    • 13.11 上机练习:读取服务器端的窗口
    • 13.12 上机练习:与服务器玩猜数游戏
    • 13.13 上机练习:传输图像
    • 13.14 章节测验
  • 14 图形、图像与音频
    • 14.1 绘制基本图形
    • 14.2 变换图形
    • 14.3 图形的布尔运算
    • 14.4 绘制钟表
    • 14.5 绘制图像
    • 14.6 播放音频
    • 14.7 应用举例
    • 14.8 小结
    • 14.9 上机练习:转动的风扇
    • 14.10 上机练习:制作JPG格式的图像
    • 14.11 上机练习:基于图像的小动画
    • 14.12 章节测验
  • 15 泛型与集合框架(自学)
    • 15.1 泛型
    • 15.2 链表
    • 15.3 堆栈
    • 15.4 散列映射
    • 15.5 树集
    • 15.6 树映射
    • 15.7 自动装箱与拆箱
    • 15.8 应用举例
    • 15.9 小结
    • 15.10 上机练习:搭建流水线
    • 15.11 上机练习:排序与查找
    • 15.12 上机练习:使用TreeSet排序
    • 15.13 上机练习:扫雷小游戏
    • 15.14 章节测验
  • 16 Java课程设计
    • 16.1 课程设计任务书
    • 16.2 课程设计报告模板
复习

第4章  类与对象 复习

第4章  类与对象  复习

第4章  类与对象  复习2

习题四

一、问答题

1.面向对象语言有哪三个特性?
   封装、继承和多态。
2.类名应当遵守怎样的编程风格?
   当类名由几个单词复合而成时,每个单词的首字母使用大写。
3.变量和方法的名字应当遵守怎样的编程风格?
   名字的首单词的首字母使用小写,如果变量的名字由多个单词组成,从第2个单词开始的其它单词的首字母使用大写。
4.类体的内容中声明成员变量是为了体现对象的属性还是行为?
   属性
5.类体的内容中定义的非构造方法是为了体现对象的属性还是行为?
   行为
6.什么时候使用构造方法?构造方法有类型吗?
   用类创建对象时。没有类型
7.类中的实例变量在什么时候会被分配内存空间?
   用类创建对象时。
8.什么叫方法的重载?构造方法可以重载吗?
   一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。可以。
9.类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?
    可以。不可以。
10.类中的实例方法可以用类名直接调用吗?
    不可以。
11.简述类变量和实例变量的区别。
  一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间。所有对象的类变量都分配给相同的一处内存,对象共享类变量。
12.this关键字代表什么?this可以出现在类方法中吗?
    代表调用当前方法的对象。不可以。
-----视频讲解-----



二、选择题

1.下列哪个叙述是正确的?
A.Java应用程序由若干个类所构成,这些类必须在一个源文件中。
B.Java应用程序由若干个类所构成,这些类可以在一个源文件中,也可以分布在若干个源文件中,其中必须有一个源文件含有主类。
C.Java源文件必须含有主类。
D.Java源文件如果含有主类,主类必须是public类。
  B。
2.下列哪个叙述是正确的?
A.成员变量的名字不可以和局部变量的相同。
B.方法的参数的名字可以和方法中声明的局部变量的名字相同。
C.成员变量没有默认值。
D.局部变量没有默认值。
  D。
3.对于下列Hello类,哪个叙述是正确的?
A.Hello类有2个构造方法。
B.Hello类的int Hello()方法是错误的方法。
C.Hello类没有构造方法。
D.Hello无法通过编译,因为其中的hello方法的方法头是错误的(没有类型)。
class Hello {
     Hello(int m){
     }
     int Hello() {
         return 20;
     }
     hello() {
     }
}
  D。
4.对于下列Dog类,哪个叙述是错误的?
A.Dog(int m)与Dog(double m)互为重载的构造方法。
B.int Dog(int m)与void Dog(double m)互为重载的非构造方法。
C.Dog类只有两个构造方法,而且没有无参数的构造方法。
D.Dog类有3个构造方法。
class Dog {
     Dog(int m){ 
     }
     Dog(double  m){ 
     }
     int Dog(int m){ 
        return 23;
     }
     void Dog(double m){
     }
}
  D。
5.下列哪些类声明是错误的?
A) class A
B) public class A
C) protected class A
D) private class A
  CD。
6.下列A类中【代码1】~【代码5】哪些是错误的?
class Tom {
private int x = 120;
  protected int y = 20;
  int z = 11;
  private void f() {
     x = 200;
     System.out.println(x);  
  } 
  void g() {
     x = 200;
     System.out.println(x); 
  }
}
public class A {
  public static void main(String args[]) {
       Tom tom = new Tom();
       tom.x = 22;   //【代码1】
       tom.y = 33;   //【代码2】
       tom.z = 55;   //【代码3】
       tom.f();     //【代码4】
       tom.g();     //【代码5】
   }
}
【代码1】【代码4】
7.下列E类的类体中哪些【代码】是错误的。
class E {
  int x;               //【代码1】
  long y = x;          //【代码2】
  public void f(int n) {
     int m;          //【代码3】 
     int t = n+m;     //【代码4】   
  } 
}
【代码4】
-----视频讲解-----

1.说出下列E类中【代码1】~【代码3】的输出结果。

class Fish {
   int weight = 1;
}
class Lake {
   Fish fish;
   void setFish(Fish s){
       fish = s;
   }
   void foodFish(int m) {
      fish.weight=fish.weight+m;
   }
}
public class E {
   public static void main(String args[]) {
       Fish  redFish = new Fish();
       System.out.println(redFish.weight);  //【代码1】
       Lake lake = new Lake();
       lake.setFish(redFish);
       lake.foodFish(120);
       System.out.println(redFish.weight);    //【代码2】
       System.out.println(lake.fish.weight);  //【代码3】
    }
}

【代码1】:1,【代码2】:121,【代码3】:121。

---视频讲解---

2.请说出A类中System.out.println的输出结果。

class B {
  int x = 100,y = 200;
   public void setX(int x) {
      x = x;
   }
   public void setY(int y) {
      this.y = y;
   }
   public int getXYSum() {
      return x+y;
   }
}
public class A {
  public static void main(String args[]) { 
      B b = new B();
      b.setX(-100);
      b.setY(-200);
      System.out.println("sum="+b.getXYSum());
   }
}

 sum=-100。

---视频讲解---

3.请说出A类中System.out.println的输出结果。

class B {
  int n;
   static int sum=0;
   void setN(int n) {
     this.n=n;
   }
   int getSum() {
     for(int i=1;i<=n;i++)
        sum=sum+i;
      return sum;
   }
}
public class A {
public static void main(String args[]) {
      B b1=new B(),b2=new B();
      b1.setN(3);
      b2.setN(5);
      int s1=b1.getSum();
      int s2=b2.getSum();
      System.out.println(s1+s2);
   }
}

  27。

---视频讲解--

4.请说出E类中【代码1】,【代码2】的输出结果n的输出结果。

class A {
   double f(int x,double y) {
      return x+y;
   }
   int f(int x,int y) {
      return x*y;
   }
}
public class E {
   public static void main(String args[]) {
      A a=new A();
      System.out.println(a.f(10,10)); //【代码1】
      System.out.println(a.f(10,10.0)); //【代码2】
  }
}

【代码1】:100,【代码2】:20.0。

---视频讲解--

5.上机实习下列程序,了解可变参数。

public class E {
   public static void main(String args[]) {
         f(1,2);
         f(-1,-2,-3,-4); //给参数传值时,实参的个数很灵活
         f(9,7,6) ;
   }
   public static void f(int ... x){    //x是可变参数的代表,代表若干个int型参数
        for(int i=0;i<x.length;i++) {  //x.length是x代表的参数的个数
            System.out.println(x[i]);  //x[i]是x代表的第i个参数(类似数组)
        }
   } 
}

 上机实习题目,解答略。


6.类的字节码进入内存时,类中的静态块会立刻被执行。实习下列程序,了解静态块。

class AAA {
   static { //静态块
      System.out.println("我是AAA中的静态块!");
   }
}
public class E {
   static { //静态块
      System.out.println("我是最先被执行的静态块!");
   }
   public static void main(String args[]) {
      AAA a= new AAA();  //AAA的字节码进入内存
      System.out.println("我在了解静态(static)块");  
   }
}

上机实习题目,解答略。