Java程序设计

主讲教师: 郑如滨 副教授 / 集美大学

教学进度:
  • 预报名
  • 进行中
  • 已结束

学时安排:56学时

学分:3.5分

主要讲解Java程序设计。课程不仅包含讲授理论的视频,还包含在线编程练习。从理论与实践两个方面带领学生进入Java面向对象编程世界。课程每章均设有章节测验,并提供完整课件的下载,方便自学。课程中的丰富资源可为教师开展SPOC教学提供有力支撑。本课程制作精良、内容丰富,为福建省精品线上一流课程。
  • 10688409

    累计页面浏览量

  • 20304

    累计选课人数

  • 23785

    累计互动次数

02-24 20:10 郑如滨 集美大学 在Java程序设计课程中提问:

思考:循环的使用

1.一般来说什么时候使用for什么时候使用while?试举例说明 2.for循环与while循环可以相互转换吗?试举例说明 3.while(true){.........}与for(;;){.....}都是死循环,计算机会不断执行循环体中的东西。这样的代码有意义吗?试举例说明

  • 07-01 01:07 李相汝

    1. **for和while的使用场景**:
    - **for循环**:适合**明确循环次数**的情况,比如遍历数组 `for(int i=0; i<arr.length; i++)`。
    - **while循环**:适合**不确定循环次数**,但满足某个条件才执行的情况,比如 `while(用户没输入quit) { 等待输入 }`。

    2. **for和while可以互相转换**:
    - **for转while**:
    ```java
    for(int i=0; i<10; i++) { ... }
    // 等价于
    int i=0;
    while(i<10) { ...; i++; }
    ```
    - **while转for**:
    ```java
    while(condition) { ... }
    // 等价于
    for(; condition; ) { ... }
    ```

    3. **死循环有意义吗?**
    有意义!比如服务器要**一直监听请求** `while(true) { 等待客户端连接 }`,或者游戏主循环 `for(;;) { 更新游戏状态 }`。只要在循环内有**退出条件**(如 `break`),就不是真正的“死”循环。

    **DAO模式总结**:
    DAO(数据访问对象)把数据库操作封装成接口,业务层只管调方法,不用关心数据怎么存。换数据库(比如MySQL→Oracle)时只需改DAO实现,上层代码不用动,解耦又方便维护,还能统一管理SQL,避免代码混乱。
  • 查看全部(17条)

02-03 23:23 郑如滨 集美大学 在Java程序设计课程中提问:

思考:怎么学习Java?

看了前面课程对Java的介绍,你觉得? 1. Java学习主要包含哪几部分? 2. 学习Java只是看看视频、做做客观题就行了吗?还需要做些什么? 3. 你学习Java是为了做什么?(企业级应用、手机APP、桌面应用、其他)

  • 07-01 01:06 李相汝

    1. Java学习主要包含这几块:基础语法(变量、循环、面向对象这些)、常用类库(比如集合、IO流)、多线程和网络编程、数据库连接(JDBC)、框架部分(Spring全家桶这种),还有JVM原理和调优这些进阶内容。

    2. 光看视频和做题肯定不够啊!视频只能帮你理解概念,真正学会得动手写代码,做项目练手。比如自己搞个小管理系统、写个网络爬虫,或者参与开源项目。遇到报错要会调试,代码写多了自然就熟练了,面试也常考实际解决问题的能力。

    3. 我学Java主要是想进互联网公司做后端开发,比如电商系统或者金融平台这种企业级应用,觉得处理高并发、分布式这些挑战挺有意思的。当然也能做安卓APP或者桌面程序,但更看好后端的发展前景,毕竟Java在这块儿用的太广了。
  • 查看全部(21条)

03-01 20:28 郑如滨 集美大学 在Java程序设计课程中提问:

练一练:编写Circle类并分享你的代码

编写Circle类,包含radius(半径)属性和一些常用方法,如getArea、getRadius。 1. 增加一个无参数构造方法(函数)Circle()。设置radius的值,然后控制台输出“调用无参数构造方法”。 2. 增加一个有参数构造方法Circle(double radi

  • 07-01 01:06 李相汝

    public class Circle {
    private double radius;

    // 无参数构造方法
    public Circle() {
    this(1.0); // 使用this调用有参构造方法
    System.out.println("调用无参数构造方法");
    }

    // 有参数构造方法
    public Circle(double radius) {
    this.radius = radius;
    System.out.println("调用有参构造方法");
    }

    // 获取面积的方法
    public double getArea() {
    return Math.PI * radius * radius;
    }

    // 获取半径的方法
    public double getRadius() {
    return radius;
    }

    // 初始化块
    {
    System.out.println("执行初始化块");
    }

    public static void main(String[] args) {
    // 测试无参构造方法
    Circle circle1 = new Circle();
    System.out.println("circle1的半径: " + circle1.getRadius());
    System.out.println("circle1的面积: " + circle1.getArea());

    // 测试有参构造方法
    Circle circle2 = new Circle(2.0);
    System.out.println("circle2的半径: " + circle2.getRadius());
    System.out.println("circle2的面积: " + circle2.getArea());

    // 删除无参数构造方法后执行new Circle()会编译报错,此处代码仅为说明
    // Circle circle3 = new Circle();
    }
    }
  • 查看全部(14条)

03-04 09:32 郑如滨 集美大学 在Java程序设计课程中提问:

思考:不要滥用异常

回答如下问题: 1. 为什么不用异常处理机制代替正常的程序执行流程? 2.改编视频中出现的三段代码,使其可以正常运行。(不要使用异常处理机制)

  • 07-01 01:06 李相汝

    1. **异常处理不能代替正常流程**:异常机制是用来处理**意外错误**(如文件不存在、网络中断),而不是控制业务逻辑。滥用异常(比如用`try-catch`代替`if-else`)会让代码变慢、难维护,而且异常处理的开销比普通流程大得多。

    2. **代码改编思路**:用条件判断代替异常。比如检查除数是否为0、文件是否存在、数组是否越界,用`if`提前拦截问题,避免程序崩溃。例如:
    ```java
    if (b != 0) {
    result = a / b; // 代替 try-catch 除零异常
    } else {
    System.out.println("除数不能为0");
    }
    ```
  • 查看全部(19条)

03-03 09:13 郑如滨 集美大学 在Java程序设计课程中提问:

思考(可选):Collections

1. Collection与Collections有什么区别? 2. Arrays与Collections有什么区别?

  • 06-20 01:08 汤煜明

    以下是关于Collection与Collections、Arrays与Collections区别的介绍:

    Collection与Collections

    - 概念: Collection 是Java集合框架中的一个接口,它是List、Set和Queue等接口的父接口,定义了一些对集合进行操作的基本方法,如添加、删除、遍历元素等。 Collections 是一个工具类,提供了一系列静态方法,用于对集合进行操作,如排序、查找、反转等。
    - 功能: Collection 主要用于定义集合的规范和行为,让不同类型的集合有统一的操作方式。 Collections 则是对集合进行各种实用操作的工具,方便开发者对集合进行处理。

    Arrays与Collections

    - 操作对象: Arrays 主要用于操作数组,提供了如排序、查找、填充等方法,这些方法都是针对数组这种数据结构的。 Collections 主要用于操作集合框架中的集合对象,如List、Set等。
    - 功能特性: Arrays 中的方法大多是对数组的基本操作,较为底层和基础。 Collections 提供了更丰富、更高级的操作,例如对集合进行排序可以根据自定义的比较器进行,还能对集合进行同步控制等。

    Collection 、 Arrays 和 Collections 在Java中分别用于不同的目的, Collection 是集合框架的基础接口, Arrays 针对数组操作, Collections 针对集合操作提供丰富的工具方法。
  • 查看全部(7条)

03-03 15:44 郑如滨 集美大学 在Java程序设计课程中提问:

思考(可选):ArrayList源代码分析

尝试阅读ArrayList内部的源代码,回答: 1.ArrayList内部使用什么来存储元素?尝试截图。 2.为什么可以用这种类型的数组来存储任何对象? 3.既然可以使用这种通用类型的数组存放任何元素,为什么还需要泛型技术?

  • 06-19 19:47 蒋芳锋

    以下是对问题的回答:

    ArrayList内部使用什么来存储元素: ArrayList 内部使用 Object 类型的数组来存储元素。在 ArrayList 的源码中,可以看到有一个 elementData 数组,它用于存放元素。以下是部分源码截图(以OpenJDK 8为例):

    java

    public class ArrayList<E> extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
    {
    transient Object[] elementData;
    private int size;
    // 其他代码...
    }
     

    (由于这里无法直接截图展示,你可以通过在IDE中打开 ArrayList 的源码文件来查看,通常在 java.util 包下)

    为什么可以用这种类型的数组来存储任何对象:因为 Object 是Java中所有类的根类,所有的类都直接或间接继承自 Object 类。所以 Object 类型的数组可以存放任何类的对象,因为任何类的对象都可以向上转型为 Object 类型。当向 ArrayList 中添加元素时,元素会被自动向上转型为 Object 类型存储在 elementData 数组中。当从 ArrayList 中取出元素时,需要进行向下转型将其转换回原来的具体类型。
    既然可以使用这种通用类型的数组存放任何元素,为什么还需要泛型技术:

    - 类型安全:使用泛型可以在编译时进行类型检查,确保存入 ArrayList 中的元素都是指定的类型,避免在运行时出现 ClassCastException 等类型转换异常。例如, ArrayList<String> 表示这个 ArrayList 只能存储 String 类型的元素,如果尝试添加其他类型的元素,编译器会报错。
    - 代码可读性:泛型使代码更加清晰易懂,通过指定泛型类型,可以明确知道 ArrayList 中存储的是什么类型的元素,提高了代码的可读性和维护性。
    - 消除强制类型转换:在不使用泛型时,从 ArrayList 中取出元素时需要进行强制类型转换,使用泛型后,由于在定义 ArrayList 时已经指定了元素类型,取出元素时就不需要再进行强制类型转换,使代码更加简洁。

    综上所述,泛型技术在 ArrayList 等集合类的使用中提供了更好的类型安全、代码可读性和编程体验。
  • 查看全部(16条)

02-03 23:24 郑如滨 集美大学 在Java程序设计课程中提问:

思考:java HelloWorld命令的含义

在命令行下输入java HelloWorld执行程序。 1.这里的HelloWorld指的是文件名吗?如果不是,那是什么? 2.java程序可以跨平台运行的原因是什么?可以跨平台运行的是.java文件还是.class文件? 3.该命令执行后,到底是JRE、JDK、JVM还是Eclipse负

  • 06-19 12:39 汤煜明

    HelloWorld 是类名
    不是文件名,是编译后的 .class 文件对应的类名。
    Java 源码(.java)编译为字节码(.class),由 JVM 解释执行。
    跨平台的是 .class 文件,需对应平台的 JVM 支持。
    执行流程
    java HelloWorld → JRE(Java 运行环境)调用 JVM(Java 虚拟机)。
    JVM 在类路径中查找 HelloWorld.class 并执行。
    JDK 是开发工具包,Eclipse 是 IDE,命令行模式下不依赖它们。
  • 查看全部(18条)

03-02 18:38 郑如滨 集美大学 在Java程序设计课程中提问:

思考:静态嵌套类的使用

阅读如下代码,回答以下三个问题: 1. 代码中ArrayAlg的静态嵌套类Pair的作用是什么? 2. 你觉得在这里将其定义为静态嵌套类有什么好处? 3. 如果将public static class Pair改成public class Pair,怎样修改源代码才能使其运行?并说

  • 06-12 22:27 李赟航

    1. 代码中ArrayAlg的静态嵌套类Pair的作用是什么?

    2. 你觉得在这里将其定义为静态嵌套类有什么好处?

    3. 如果将public static class Pair改成public class Pair,怎样修改源代码才能使其运行?并说明这里Pair声明为static还是非static好?



    /**
    * This program demonstrates the use of static inner classes.
    * @version 1.01 2004-02-27
    * @author Cay Horstmann
    */
    public class StaticInnerClassTest
    {
    public static void main(String[] args)
    {
    double[] d = new double[20];
    for (int i = 0; i &lt; d.length; i )
    d[i] = 100 * Math.random();
    ArrayAlg.Pair p = ArrayAlg.minmax(d);
    System.out.println(&quot;min = &quot; p.getFirst());
    System.out.println(&quot;max = &quot; p.getSecond());
    }
    }

    class ArrayAlg
    {
    /**
    * A pair of floating-point numbers
    */
    public static class Pair
    {
    /**
    * Constructs a pair from two floating-point numbers
    * @param f the first number
    * @param s the second number
    */
    public Pair(double f, double s)
    {
    first = f;
    second = s;
    }

    /**
    * Returns the first number of the pair
    * @return the first number
    */
    public double getFirst()
    {
    return first;
    }

    /**
    * Returns the second number of the pair
    * @return the second number
    */
    public double getSecond()
    {
    return second;
    }

    private double first;
    private double second;
    }

    /**
    * Computes both the minimum and the maximum of an array
    * @param values an array of floating-point numbers
    * @return a pair whose first element is the minimum and whose second element
    * is the maximum
    */
    public static Pair minmax(double[] values)
    {
    double min = Double.MAX_VALUE;
    double max = Double.MIN_VALUE;
    for (double v : values)
    {
    if (min &gt; v) min = v;
    if (max &lt; v) max = v;
    }
    return new Pair(min, max);
    }
    }
  • 查看全部(8条)

03-02 18:10 郑如滨 集美大学 在Java程序设计课程中提问:

练一练:Comparable接口

阅读如下代码: 回答: 1.如果想对薪水进行降序排序怎么做? 2.执行 Arrays.sort(staff)进行排序时,对象之间是如何比较的? EmployeeSortTest.java源代码: import java.util.*; /*

  • 06-12 22:27 李赟航

    如果想对薪水进行降序排序,有以下两种方法:
    - 修改 compareTo 方法:在 Employee 类的 compareTo 方法中,将比较逻辑改为相反的顺序。原来的 compareTo 方法是升序比较(薪水低的返回负数,薪水高的返回正数),要实现降序,只需将比较逻辑反转,即薪水高的返回负数,薪水低的返回正数。修改后的 compareTo 方法如下:

    java


    public int compareTo(Employee other) {
    if (salary &gt; other.salary) return -1;
    if (salary &lt; other.salary) return 1;
    return 0;
    }


    - 使用 Comparator 接口:不修改 Employee 类的 compareTo 方法,而是创建一个实现 Comparator 接口的比较器类,在比较器中实现降序比较逻辑。代码如下:

    java


    import java.util.*;

    class EmployeeSalaryDescComparator implements Comparator&lt;Employee&gt; {
    @Override
    public int compare(Employee e1, Employee e2) {
    return Double.compare(e2.getSalary(), e1.getSalary());
    }
    }

    public class EmployeeSortTest {
    public static void main(String[] args) {
    Employee[] staff = new Employee[3];

    staff[0] = new Employee(&quot;Harry Hacker&quot;, 35000);
    staff[1] = new Employee(&quot;Carl Cracker&quot;, 75000);
    staff[2] = new Employee(&quot;Tony Tester&quot;, 38000);

    // 使用比较器进行降序排序
    Arrays.sort(staff, new EmployeeSalaryDescComparator());

    // print out information about all Employee objects
    for (Employee e : staff)
    System.out.println(&quot;name=&quot; e.getName() &quot;,salary=&quot; e.getSalary());
    }
    }


    执行 Arrays.sort(staff) 进行排序时,对象之间是通过 Employee 类实现的 Comparable 接口中的 compareTo 方法进行比较的。 Arrays.sort 方法会调用 Employee 对象的 compareTo 方法,将数组中的每个 Employee 对象与其他对象进行比较,根据 compareTo 方法返回的结果(负数、0、正数)来确定对象的顺序,从而实现排序。在当前代码的 compareTo 方法中,是根据员工的薪水来比较的,薪水低的对象在排序后会排在薪水高的对象前面(升序)。
  • 查看全部(6条)

03-02 17:56 郑如滨 集美大学 在Java程序设计课程中提问:

讨论:说说你使用的IDE上你最喜欢的5个快捷键

说说你使用的IDE上,你最喜欢的5个快捷键,并说明原因。 注意:不要写ctrl+c, ctlr+v, ctrl+x,ctrl+s

  • 06-12 22:27 李赟航

    1.command+shift+F10
    2.command shift N
    3.command alt L
    4.command F12
    5.command Alt V
  • 查看全部(12条)

常见问题

  • 1.我该如何学习这门课程?

    (1)首先您要注册一个学银在线的账号。

    (2)您需要有一定的上网条件,能够流畅的观看教学视频。在观看的过程中,您可以选择在PC端登陆我们的网页, 也可以选择下载我们的app学习通,通过手机客户端来学习。

    (3)您一旦报名选择了课程,我们的课程主讲老师或课程团队会通过通知的形式给您发送课程有关的消息,同时会抄送您的邮箱,请您及时查收。

  • 2.我在学习过程中遇到问题了,怎么办?

    您可以通过以下几种方式获取帮助:

    (1)在课程群聊中发布求助信息,说不定和你一起学习这门课的小伙伴就能够解决你的问题呢;

    (2)在课程讨论区留言,课程团队看到后将会及时回复。

    (3)联系我们的客服,或者随时给我们发邮件,邮箱地址:xueyinkf@chaoxing.com。

  • 3.我是新手,能否给我一些学习建议?

    (1)我们的课程采用MOOC的方式授课,因此您可以自由安排您的学习时间、学习地点。但我们仍旧希望您每周能都有固定的时间持续进行本课程的学习,根据人的记忆曲线显示这种规律的学习方式能够最大限度的提升您的学习质量。

    (2)学习的过程比较容易,为了检验您的学习成果,我们的课程团队会在课程章节结束后布置测验或作业,希望您尽可能的按时独立完成。如果有没有掌握的知识点,您可以继续回看复习课程。

    (3)希望您能够积极参与课程的讨论,与各位学习者一起煮酒论英雄。在讨论的过程中,不光可以对课程所学内容温习内化,还能互相碰撞出思想的火花,相信您一定会有额外的收获。

  • 4.课程会不会很难、很枯燥?

    (1)我们的课程都是老师经过精心设计拍摄制作而成,并且由于是MOOC的方式,所以课程拆分成了不同的知识点,学习起来一点也不费劲。

    (2)我们的课程多采取理论结合实际的授课方式,课程中也有许多案例的呈现,相信会给学习者带来诸多方面的启发。我们也将力求做到深入浅出,支持学习者将研究发现转化为实践,改进自身教学。