05 2017 档案

摘要:输入输出(I/O)是指程序与外部设备或其他计算机进行交互的操作。几乎所有的程序都具有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。Java把这些输入与输出操作用流来实现,通过统一的接口来表示,从而使程序设计 阅读全文
posted @ 2017-05-09 18:11 Java小助手 阅读(575) 评论(0) 推荐(0) 编辑
摘要:有时,线程的挂起是很有用的。例如,一个独立的线程可以用来显示当日的时间。如果用户不希望用时钟,线程被挂起。在任何情形下,挂起线程是很简单的,一旦挂起,重新启动线程也是一件简单的事。挂起,终止和恢复线程机制在Java 2和早期版本中有所不同。尽管你运用Java 2的途径编写代码,你仍需了解这些操作在早 阅读全文
posted @ 2017-05-09 18:10 Java小助手 阅读(459) 评论(0) 推荐(0) 编辑
摘要:上述例题无条件的阻塞了其他线程异步访问某个方法。Java对象中隐式管程的应用是很强大的,但是你可以通过进程间通信达到更微妙的境界。这在Java中是尤为简单的。像前面所讨论过的,多线程通过把任务分成离散的和合乎逻辑的单元代替了事件循环程序。线程还有第二优点:它远离了轮询。轮询通常由重复监测条件的循环实 阅读全文
posted @ 2017-05-09 18:08 Java小助手 阅读(176) 评论(0) 推荐(0) 编辑
摘要:需要避免的与多任务处理有关的特殊错误类型是死锁(deadlock)。死锁发生在当两个线程对一对同步对象有循环依赖关系时。例如,假定一个线程进入了对象X的管程而另一个线程进入了对象Y的管程。如果X的线程试图调用Y的同步方法,它将像预料的一样被锁定。而Y的线程同样希望调用X的一些同步方法,线程永远等待, 阅读全文
posted @ 2017-05-09 18:08 Java小助手 阅读(123) 评论(0) 推荐(0) 编辑
摘要:当两个或两个以上的线程需要共享资源,它们需要某种方法来确定资源在某一刻仅被一个线程占用。达到此目的的过程叫做同步(synchronization)。像你所看到的,Java为此提供了独特的,语言水平上的支持。同步的关键是管程(也叫信号量semaphore)的概念。管程是一个互斥独占锁定的对象,或称互斥 阅读全文
posted @ 2017-05-09 18:05 Java小助手 阅读(247) 评论(0) 推荐(0) 编辑
摘要:线程优先级被线程调度用来判定何时每个线程允许运行。理论上,优先级高的线程比优先级低的线程获得更多的CPU时间。实际上,线程获得的CPU时间通常由包括优先级在内的多个因素决定(例如,一个实行多任务处理的操作系统如何更有效的利用CPU时间)。一个优先级高的线程自然比优先级低的线程优先。举例来说,当低优先 阅读全文
posted @ 2017-05-09 18:04 Java小助手 阅读(242) 评论(0) 推荐(0) 编辑
摘要:如前所述,通常你希望主线程最后结束。在前面的例子中,这点是通过在main()中调用sleep()来实现的,经过足够长时间的延迟以确保所有子线程都先于主线程结束。然而,这不是一个令人满意的解决方法,它也带来一个大问题:一个线程如何知道另一线程已经结束?幸运的是,Thread类提供了回答此问题的方法。有 阅读全文
posted @ 2017-05-09 18:03 Java小助手 阅读(381) 评论(0) 推荐(0) 编辑
摘要:到目前为止,我们仅用到两个线程:主线程和一个子线程。然而,你的程序可以创建所需的更多线程。例如,下面的程序创建了三个子线程:// Create multiple threads.class NewThread implements Runnable { String name; // name of 阅读全文
posted @ 2017-05-09 18:01 Java小助手 阅读(151) 评论(0) 推荐(0) 编辑
摘要:大多数情况,通过实例化一个Thread对象来创建一个线程。Java定义了两种方式: 实现Runnable 接口; 可以继承Thread类。 下面的两小节依次介绍了每一种方式。 实现Runnable接口 创建线程的最简单的方法就是创建一个实现Runnable 接口的类。Runnable抽象了一个执行代 阅读全文
posted @ 2017-05-09 18:00 Java小助手 阅读(168) 评论(0) 推荐(0) 编辑
摘要:Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程。实际上,Java使用线程来使整个环境异步。这有利于通过防止CPU循环的浪费来减少无效部分。为更好的理解多线程环境的优势可以将它与它的对照物相比较。单线程系统的处理途径是使用一种叫作轮询的事件循环方法。在该模型中,单线程控制在一无限循 阅读全文
posted @ 2017-05-09 17:58 Java小助手 阅读(201) 评论(0) 推荐(0) 编辑
摘要:当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面: 它是产生其他子线程的线程; 通常它必须最后完成执行,因为它执行各种关闭动作。 尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为 阅读全文
posted @ 2017-05-09 17:58 Java小助手 阅读(173) 评论(0) 推荐(0) 编辑
摘要:和其他多数计算机语言不同,Java内置支持多线程编程(multithreaded programming)。多线程程序包含两条或两条以上并发运行的部分。程序中每个这样的部分都叫一个线程(thread www.uuweb.cn ),每个线程都有独立的执行路径。因此,多线程是多任务处理的一种特殊形式。你 阅读全文
posted @ 2017-05-09 17:57 Java小助手 阅读(157) 评论(0) 推荐(0) 编辑
摘要:断言的概念 断言用于证明和测试程序的假设,比如“这里的值大于 5”。断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。 断言的使用 断言有两种方法: 一种是 assert<<布尔表达式>> ; 另一种是 assert<<布尔表达式>> :<<细节描述>>。 如果布尔表达式的值为fals 阅读全文
posted @ 2017-05-09 17:56 Java小助手 阅读(245) 评论(0) 推荐(0) 编辑
摘要:尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况。这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类)。你的子类不需要实际执行什么——它们在类型系统中的存在允许你把它们当成异常使用。Exc 阅读全文
posted @ 2017-05-09 17:55 Java小助手 阅读(164) 评论(0) 推荐(0) 编辑
摘要:在标准包java.lang中,Java定义了若干个异常类。前面的例子曾用到其中一些。这些异常一般是标准类RuntimeException的子类。因为java.lang实际上被所有的Java程序引入,多数从RuntimeException派生的异常都自动可用。而且,它们不需要被包含在任何方法的thro 阅读全文
posted @ 2017-05-09 17:54 Java小助手 阅读(208) 评论(0) 推荐(0) 编辑
摘要:如果一个方法可以导致一个异常但不处理它,它必须指定这种行为以使方法的调用者可以保护它们自己而不发生异常。做到这点你可以在方法声明中包含一个throws子句。一个 throws 子句列举了一个方法可能抛出的所有异常类型。这对于除Error或RuntimeException及它们子类以外类型的所有异常是 阅读全文
posted @ 2017-05-09 17:52 Java小助手 阅读(224) 评论(0) 推荐(0) 编辑
摘要:当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向。依赖于方法是怎样编码的,异常甚至可以导致方法过早返回。这在一些方法中是一个问题。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关键字为处理这种意外而设计。finally创建一个代码块。 阅读全文
posted @ 2017-05-09 17:52 Java小助手 阅读(197) 评论(0) 推荐(0) 编辑
摘要:到目前为止,你只是获取了被Java运行时系统抛出的异常。然而,程序可以用throw语句抛出明确的异常。Throw语句的通常形式如下: throw ThrowableInstance;这里,ThrowableInstance一定是Throwable类类型或Throwable子类类型的一个对象。简单类型 阅读全文
posted @ 2017-05-09 17:51 Java小助手 阅读(289) 评论(0) 推荐(0) 编辑
摘要:Try语句可以被嵌套。也就是说,一个try语句可以在另一个try块内部。每次进入try语句,异常的前后关系都会被推入堆栈。如果一个内部的try语句不含特殊异常的catch处理程序,堆栈将弹出,下一个try语句的catch处理程序将检查是否与之匹配。这个过程将继续直到一个catch语句匹配成功,或者是 阅读全文
posted @ 2017-05-09 17:50 Java小助手 阅读(1784) 评论(0) 推荐(0) 编辑
摘要:某些情况,由单个代码段可能引起多个异常。处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常。当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行。当一个catch语句执行以后,其他的子句被旁路,执行从try/catch块以后的代码开始继续。下面的例 阅读全文
posted @ 2017-05-09 17:49 Java小助手 阅读(600) 评论(0) 推荐(0) 编辑
摘要:尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常。这样做有两个好处。第一,它允许你修正错误。第二,它防止程序自动终止。大多数用户对于在程序终止运行和在无论何时错误发生都会打印堆栈轨迹感到很烦恼(至少可以这么说)。幸运的是,这很容易避免。为防止和处理一个运行时 阅读全文
posted @ 2017-05-09 17:48 Java小助手 阅读(271) 评论(0) 推荐(0) 编辑
摘要:在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的。下面的小程序包括一个故意导致被零除错误的表达式。class Exc0 { public static void main(String args[]) { int d = 0; int a = 42 / d; }}当J 阅读全文
posted @ 2017-05-09 16:40 Java小助手 阅读(223) 评论(0) 推荐(0) 编辑
摘要:所有异常类型都是内置类Throwable的子类。因此,Throwable在异常类层次结构的顶层。紧接着Throwable下面的是两个把异常分成两个不同分支的子类。一个分支是Exception。该类用于用户程序可能捕捉的异常情况。它也是你可以用来创建你自己用户异常类型子类的类。在Exception分支 阅读全文
posted @ 2017-05-09 16:39 Java小助手 阅读(158) 评论(0) 推荐(0) 编辑
摘要:Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象。当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw)。该方法可以选择自己处理异常或传递该异常。两种情况下,该异常被捕获(caught)并处理。异常可能是由Java运行时系统产生,或者是由你的手工代码 阅读全文
posted @ 2017-05-09 16:37 Java小助手 阅读(150) 评论(0) 推荐(0) 编辑