Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java bluej Try/catch/exception_Java - Fatal编程技术网

Java bluej Try/catch/exception

Java bluej Try/catch/exception,java,Java,我会把我的三个问题贴在代码中出现的地方,也贴在这里 问题1什么是线程以及如何使用它们? 问题2“尝试”/“抓住”如何起作用? 问题3例外情况是什么?参见代码 提前感谢:) 线程是包含足够支持结构的对象,可以充当轻量级进程 进程就像一个正在执行的程序,但它是一个形式化的定义,是由操作系统管理的东西,它决定进程是否获得CPU时间 线程之所以像一个轻量级进程,是因为尽管它几乎独立于主程序分配CPU时间,但它并不能获得进程所获得的一切。它与进程中的其他线程共享内存,而实际进程则获得自己的私有内存空间 您

我会把我的三个问题贴在代码中出现的地方,也贴在这里

问题1什么是线程以及如何使用它们?
问题2“尝试”/“抓住”如何起作用? 问题3例外情况是什么?参见代码

提前感谢:)


线程是包含足够支持结构的对象,可以充当轻量级进程

进程就像一个正在执行的程序,但它是一个形式化的定义,是由操作系统管理的东西,它决定进程是否获得CPU时间

线程之所以像一个轻量级进程,是因为尽管它几乎独立于主程序分配CPU时间,但它并不能获得进程所获得的一切。它与进程中的其他线程共享内存,而实际进程则获得自己的私有内存空间

您添加的try/catch块用于捕获调用
Thread.sleep(…)
时抛出的已知声明异常。由于线程要求离开CPU至少40毫秒,因此有可能在它离开CPU时,程序关闭,或者其他线程出于其他原因告诉它“唤醒”。如果发生这种情况,
Thread.sleep(…)
调用将不会正常完成睡眠,而是会使用
InterruptedException异常终止调用

问题1:什么是线程,如何使用它们

当您运行代码时,它通常都是线性运行的。假设您请求用户输入。程序停止,然后等待用户输入。如果用户从未输入过什么呢?节目永远不会继续。拥有多个线程允许您在等待用户输入时在后台执行操作。它还允许您将工作划分为多个同时进行的方法,以利用多个核心,尽管如果没有适当的算法来划分工作,您不会对自己有多大帮助

问题2“尝试”/“抓住”如何起作用

在Java和许多其他语言中,try-and-catch是如何处理通常认为可以恢复的可能错误的。例如,如果你向用户索要一个号码,他可能会给你一封信,因此你不会向用户索要号码,而是试图向用户索要一个号码。如果用户犯了错误,你抓住他的错误,然后追索。这不仅仅适用于用户输入,假设您打开了一个文件,但该文件不存在,或者发生了导致读取操作失败的其他错误。这种可能性要求你去尝试,而不是去做

问题3例外情况是什么

异常是方法在出现错误时抛出的东西。在Java中有两种类型的异常,选中和未选中。大多数未检查的异常是由于程序员错误造成的,例如数组超出范围。然而,常见的异常,如试图打开一个文件,但您无法打开,因为它不存在,这些异常被称为检查异常,这意味着您必须用try-catch来包围它们,这对于Java来说是非常独特的


非常感谢!,非常有用,我将阅读这些链接,但还有一个问题,这是一种测量时间的方法,比如,每1秒在显示的数字上加1并更新,还是有更好的方法?你可以使用Thread.sleep(…)来测量时间,这只是一种非常粗糙的方法。当您请求操作系统从CPU内核中删除线程时,通常可以快速处理该请求;但是,在请求的时间之后很少会返回CPU核心,因为该CPU核心上可能有其他内容。如果内核上有其他东西,操作系统可能会根据许多其他项目给它更多的时间。另外,睡眠时间不是循环中的全部时间,实际代码的执行也需要时间。有更好的方法来编写时钟。是的,我在一节课上写了一个时钟显示,但您需要执行一个方法来添加1,实际上我不知道如何实现时间;)如果你想要实时计时,大多数计算机中都有一种芯片,它包含一个不可更换的嵌入式电池,称为实时时钟。它已经被微调为滴答作响,像一个大计数器一样一次滴答作响。然后,您可以根据经过的滴答声的数量和某个参考点来计算当前时间,在该参考点上,您知道前一滴答声的时间是多少。这种时钟访问成本很高,所以大多数计算机在启动时都会参考它,但随后会使用更便宜、更快的时钟。更便宜的时钟在断电时会失去时间,而且更容易根据墙上的电源质量漂移。我一定会很快检查一下,因为现在我发现了这个问题:我要弄清楚每件事是如何工作的,然后自己尝试一下,谢谢你的时间:)
public void start() {
  //  Question 1: What are these threads and how do i implement them?
  Thread frameTiming = new Thread (this);
  frameTiming.start ();
}

public void run() {
  while (true) {
    xleft-=10;
    yleft-=10;
    xleft2+=10;
    yleft2+=10;
    i-=5;
    repaint();
    //  Question 2: what does try/catch do?
    try {
      Thread.sleep(40);
    // question3: what does this exception do exactly? :0
    } catch (Exception e) {
    }

}