Java程序设计

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

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

学时安排:56学时

学分:3.5分

Java的使用越来越广泛,企业级Java应用已成为主流,安卓开发大量使用Java。本课程不仅包含讲授理论的视频,还包含在线编程练习。从理论与实践两个方面带领学生进入Java面向对象编程世界。本课程每章均有章节测验,并提供完整课件的下载,方便自学。课程中的丰富资源可为教师开展SPOC教学提供有力支撑。
  • 10684383

    累计页面浏览量

  • 20305

    累计选课人数

  • 23750

    累计互动次数

2023-08-31 15:16 郑如滨 集美大学 在Java程序设计课程中提问:

思考:throw与throws的使用

1.声明一个方法要抛出一个异常使用什么关键字? 2.生成异常对象和抛出异常有何不同? 3.使用Eclipse查看Integer.parseInt代码,尝试回答parseInt方法的代码中一般什么时候抛出异常?这样的处理方式有什么好处?

  • 2024-10-18 11:45 余海侠

    声明一个方法要抛出一个异常时,需要使用throws关键字。在方法的声明部分,可以在方法名后面的括号内声明抛出的异常类型,多个异常类型之间使用逗号分隔。

    生成异常对象是指创建一个异常类的实例,以表示出现了某种异常情况。通常使用new关键字来创建异常对象,并为其提供必要的信息,例如异常消息、异常原因等。而抛出异常是指在代码中使用throw关键字将异常对象抛出,以通知调用者或上层代码发生了异常。抛出异常可以是Java自带的异常类,也可以是自定义的异常类。

    使用Eclipse查看Integer.parseInt方法的代码可以发现,该方法在代码中一般会在解析字符串转换为整数时抛出异常。具体地,在parseInt方法中会尝试将输入的字符串转换为整数,如果字符串无法解析为有效的整数,比如包含非数字字符或超出了整数表示范围,就会抛出NumberFormatException异常。
  • 查看全部(96条)

2023-08-31 15:16 郑如滨 集美大学 在Java程序设计课程中提问:

练一练:try...catch...finally综合练习

对于如下代码: 1.代码没有抛出异常,哪几句代码执行? 2.抛出一个异常,但被某一个catch子句捕获,比如IOException,哪几句代码执行呢?解释原因。 3.抛出一个异常,但没有被任何catch捕获,哪几句代码执行呢?解释原因。 4.抛出一个异常,被某一个catch子

  • 2024-10-18 11:45 余海侠

    1. 如果代码没有抛出异常,那么执行顺序为://1, //2, //5。

    2. 如果抛出一个异常,但被某一个catch子句捕获,比如IOException,那么执行顺序为://1, //3, //4, //5。原因是当抛出异常被catch子句捕获时,程序会跳转到对应的catch块执行,然后继续执行finally块。

    3. 如果抛出一个异常,但没有被任何catch捕获,那么执行顺序为://1, //5。因为异常没有被捕获,程序会跳转到finally块执行资源释放。

    4. 如果抛出一个异常,被某一个catch子句捕获,但在//3下一行被return,那么执行顺序为://1, //3, //5。原因是当异常被捕获后,执行对应的catch块,然后遇到return语句会立即返回,不再执行finally块。
  • 查看全部(71条)

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

UDP服务器为什么不需要使用多线程技术也能接收多个UDP客户端的数据报?

UDP服务器为什么不需要使用多线程技术也能接收多个UDP客户端的数据报?

  • 2024-10-18 11:44 余海侠

    UDP(User Datagram Protocol)是一个无连接的协议,它不保证数据报的顺序或可靠性。由于UDP是无连接的,所以每个数据报都独立发送,并在网络上独立传输。这意味着UDP服务器可以独立处理每个到达的数据报,而不需要等待其他数据报。

    对于UDP服务器来说,即使只有一个线程,它也可以同时接收来自多个客户端的数据报。每当一个数据报到达时,操作系统就会将该数据报放入接收队列中。UDP服务器可以轮询这个队列,检查是否有新的数据报到达。如果有新的数据报,服务器就会读取并处理它,然后继续轮询队列。

    虽然使用多线程技术可以提高服务器的处理能力,但并不是必须的。如果服务器需要同时处理大量的数据报,那么使用多线程技术可以更有效地利用系统资源。但是,如果服务器只需要处理少量的数据报,那么使用单个线程可能就足够了。

    需要注意的是,如果服务器需要发送数据报给多个客户端,那么每个数据报都需要单独发送。在这种情况下,服务器可能需要使用多线程技术来同时发送多个数据报。但是,对于接收数据报来说,单个线程就足够了。
  • 查看全部(95条)

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

思考:阅读Manager与Employee代码并回答问题

尝试阅读并运行如下代码: import java.util.*; /** * This program demonstrates inheritance. * @version 1.21 2004-02-21 * @author Cay Horstmann */

  • 2024-01-05 22:35 杨龙生

    Manager复用了Employee的构造方法和部分成员方法,如getName()和getSalary()。

    Manager与Employee的主要区别在于Manager类拥有额外的属性和方法,如bonus属性和setBonus()方法。此外,Manager类还重写了Employee类的getSalary()方法,以实现薪水计算时加上bonus的功能。

    main方法中体现了多态特性。通过创建Employee类型的数组staff,并将Manager对象和Employee对象存入其中,然后通过遍历数组,调用每个元素的getName()和getSalary()方法。由于数组元素既包含Employee对象又包含Manager对象,而这两个类都是Employee类的子类,因此在遍历过程中,实际上是根据每个元素的实际类型来调用相应的方法,体现了多态特性。
  • 查看全部(43条)

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

练一练:Comparable接口

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

  • 2024-01-05 22:35 杨龙生

    1.要对薪水进行降序排序,可以使用Arrays.sort方法,并传入一个Comparator对象,如下所示:

    Arrays.sort(staff, Collections.reverseOrder());

    2. 当执行Arrays.sort(staff)进行排序时,对象之间的比较是通过Employee类中实现的compareTo方法来进行的,该方法比较了员工的薪水大小。
  • 查看全部(61条)

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

思考:Comparable接口与Comparator接口的区别

1.Comparable与Comparable接口都可以实现对象之间的比较。那他们之间的区别是什么? 2.可选:尝试使用代码说明他们之间的区别。

  • 2024-01-05 22:35 杨龙生

    . Comparable接口是在对象内部实现的,用于定义对象自身的自然顺序,而Comparator接口是在外部实现的,用于定义对象之间的不同排序方式。

    2. 示例代码如下:

    // 使用Comparable接口
    class Employee implements Comparable {
    // ... 其他代码 ...

    public int compareTo(Employee other) {
    // 实现比较逻辑
    }
    }

    // 使用Comparator接口
    class SalaryComparator implements Comparator {
    public int compare(Employee e1, Employee e2) {
    // 实现比较逻辑
    }
    }

    // 在使用时
    Arrays.sort(staff); // 使用Comparable接口的自然顺序
    Arrays.sort(staff, new SalaryComparator()); // 使用Comparator接口定义的排序方式
  • 查看全部(45条)

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

思考(可选):Cloneable接口

1.对String[] arr = {"a","b","cdef"}调用clone()方法能否实现arr数组的深拷贝?为什么? 2.尝试使用代码进行验证

  • 2024-01-05 22:34 杨龙生

    在Java中,数组的clone()方法并不支持深拷贝。它只进行浅拷贝。这意味着如果数组元素是基本类型,那么复制的是这些元素的值。如果数组元素是对象引用,那么复制的是这些引用的地址,而不是这些对象本身。

    对于你给出的例子,String[] arr = {"a","b","cdef"},数组元素是字符串对象。当你调用arr.clone()时,你得到一个新的数组,其元素是指向与原始数组相同的字符串对象的引用。因此,两个数组(原始数组和克隆的数组)将共享相同的字符串对象。

    如果你想要实现深拷贝,你需要自己实现这个逻辑。例如,你可以遍历数组,对每个元素调用其clone()方法(如果它支持的话)或创建新的对象并复制原始对象的所有字段。

    但是,要注意的是,对于一些对象(如字符串、数值等),可能没有真正的“深拷贝”,因为这些对象是不可变的,它们的克隆和原始对象实际上是相同的。但是对于其他对象,如集合或自定义对象,你可能需要实现自己的深拷贝逻辑。
  • 查看全部(6条)

2023-08-03 19:22 郑如滨 集美大学 在Java程序设计课程中提问:

思考:说说DAO模式

DAO模式是接口的一个典型应用。 1.尝试用几句话说说DAO模式的好处。实现了什么与什么的分离? 2.使用搜索引擎搜索关键字"Java DAO",选出几句对你来说最有用的语句。尝试使用自己的话总结DAO模式的好处。 3.可选:编写一些DAO接口的代码。

  • 2024-01-05 22:34 杨龙生

    ArrayAlg的静态嵌套类Pair表示一个浮点数对,包含两个浮点数。Pair类有两个成员变量和两个访问器方法。

    在这里将Pair定义为静态嵌套类的好处是可以将两个类联系在一起,使得Pair只在ArrayAlg中使用,也使得代码更加清晰和简洁。同时,静态嵌套类不依赖于外部类的实例,可以直接通过类名访问,方便使用。

    如果将public static class Pair改成public class Pair,就需要将ArrayAlg.Pair p = ArrayAlg.minmax(d);中的ArrayAlg.Pair修改成Pair,即直接使用Pair类。同时,静态嵌套类Pair依然可以使用,但如果需要在其他类中使用Pair类,则需要使用ArrayAlg.Pair来指定它的外部类。
  • 查看全部(77条)

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

思考:静态嵌套类的使用

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

  • 2024-01-05 22:34 杨龙生

    ArrayAlg的静态嵌套类Pair表示一个浮点数对,包含两个浮点数。Pair类有两个成员变量和两个访问器方法。

    在这里将Pair定义为静态嵌套类的好处是可以将两个类联系在一起,使得Pair只在ArrayAlg中使用,也使得代码更加清晰和简洁。同时,静态嵌套类不依赖于外部类的实例,可以直接通过类名访问,方便使用。

    如果将public static class Pair改成public class Pair,就需要将ArrayAlg.Pair p = ArrayAlg.minmax(d);中的ArrayAlg.Pair修改成Pair,即直接使用Pair类。同时,静态嵌套类Pair依然可以使用,但如果需要在其他类中使用Pair类,则需要使用ArrayAlg.Pair来指定它的外部类。

    举报
    0
    李可臻

    01-04 19:40

    ArrayAlg的静态嵌套类Pair表示一个浮点数对,包含两个浮点数。Pair类有两个成员变量和两个访问器方法。

    在这里将Pair定义为静态嵌套类的好处是可以将两个类联系在一起,使得Pair只在ArrayAlg中使用,也使得代码更加清晰和简洁。同时,静态嵌套类不依赖于外部类的实例,可以直接通过类名访问,方便使用。

    如果将public static class Pair改成public class Pair,就需要将ArrayAlg.Pair p = ArrayAlg.minmax(d);中的ArrayAlg.Pair修改成Pair,即直接使用Pair类。同时,静态嵌套类Pair依然可以使用,但如果需要在其他类中使用Pair类,则需要使用ArrayAlg.Pair来指定它的外部类。
  • 查看全部(79条)

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

思考:ArrayList与LinkedList的区别

1. 如果想要像访问数组那样访问集合,适合使用什么接口及实现类? 2. 尝试阅读ArrayList与LinkedList代码,其内部分别使用什么方式来存储加到里面的元素?他们的get方法实现一样吗? 3. ArrayList与LinkedList共同之处有哪些?有何不同之

  • 2024-01-05 22:33 杨龙生

    1. 如果想要像访问数组那样访问集合,适合使用List接口及其实现类ArrayList。

    2. ArrayList内部使用数组来存储加入的元素,而LinkedList内部使用双向链表。它们的get方法实现不同,ArrayList的get方法通过数组下标直接访问元素,而LinkedList的get方法需要从头或尾部开始遍历链表来获取元素。

    3. ArrayList与LinkedList的共同之处是它们都实现了List接口,都可以存储任意类型的元素,并且都支持增删改查操作。它们的不同之处在于内部数据结构的不同,对于随机访问和插入/删除操作的效率有所差异。

    4. LinkedList的get(int i)方法的时间效率是O(n),因为它需要从头或尾部开始遍历链表,直到找到第i个元素为止。

    5. 应该使用LinkedList当需要频繁进行插入和删除操作,因为它的插入和删除效率较高。而应该使用ArrayList当需要频繁进行随机访问操作,因为它的随机访问效率较高。
  • 查看全部(49条)

常见问题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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