1、Java 语言自主学习手册答案(下)ppt_316:Java 类库 Java 程序是由类的定义组成的, 编写 Java 程序就是设计各种类和确定它们相互作用关系的过程,一旦类及类间 关系确定了,程序运行中各种可能的状态和状态转化原则也就确定了 根据实现的功能不同,将系 统标准类划分成不同的集合,每个集合是一个包,合称 为类库 类库是 Java 编程的 API,它可以帮助开 发者方便、快捷地开发 Java 程序ppt_318:Object 类 Object 类是所有 Java 类的根父类 如果在类的声明中未使用 extends 关键字指明其父类,则默认父类为 Object 类 ppt_321:特
2、例 当用 equals()方法进行比 较时, 对类 File、String、Date 及封装类(Wrapper Class)来说,是比较类型及内容而不考 虑引用的是否是同一个实例 用“=”进行比较时,符号两 边的数据类型必须一致,否则编译出错ppt_327:toString 方法 toString()方法在 Object 类中定义,其返回 值是 String 类型,描述当前对象的有关信息,内容因具体的对象而异 在进行 String 与其它类型数据的连接操作时,自 动调 用 toString()方法 可以根据需要在用户自定义类型中重写 toString()方法ppt_332:System 类pu
3、blic static PrintStream err; /标准错误输出public static InputStream in; /标准输入public static PrintStream out; /标准输出ppt_333:System 类 public static void exit ( int status);System 类的 exit 方法,在程序的用户线程执行完之前,强制 java 虚拟机退出运行状态,System.exit(0) public static void gc ( );System 类的 gc 方法,强制调用 java 虚拟机的垃圾回收功能ppt_337:系统属
4、性 在 Java 中,系统属性起到替代 环境变量的作用( 环境变量是平台相关的) 可使用 System.getProperties()方法获得一个 Properties 类的对象,其中包含了所有可用的系统属性信息 获得特定系统属性的属性值,可使用 System.getProperty(String name)方法ppt_338: Properties 类可实现属性名到属性 值的映射,属性名和属性值均为 String 类型 propertyNames() 方法可以返回以 Enumeration 类型表示的所有可用系统属性属性名 getProperty(String key)方法 获得特定系统属性
5、的属性值 load 方法可以 实现将系统 属性信息写入文件 save 方法从文件中读取属性信息ppt_340:String 类 String 类对象保存不可修改的 Unicode 字符序列,即表示的是字符串常量ppt_349:命令行参数 命令行参数被系统以 String 数组的方式传递给应用程序中的 main 方法,由参数args 接收ppt_354:抽象窗口工具集 所谓抽象是因为 Java 是一种平台无关语言,要求其 设计 的图形用户界面必须支持平台无关。AWT 类库中的各种操作被定义在一个并不存在的“抽象窗口”中进行,使得开发人员设计的界面独立于具体的界面实现ppt_355:抽象窗口工具集
6、 AWT 中定义了多种类和接口,用于在 Application 和 Applet 中进行 GUI 设计 Java 程序要显示的 GUI 组件必须是抽象类 Component 或 MenuComponent 的子类ppt_356:设计和实现图形用户界面1. 创建组成界面的各成分和元素,指定它们的属性和位置关系,根据具体需要排列它们,从而构成 GUI 的物理外观2. 定义 GUI 的事件和各界面元素 对不同事件的响应,从而实现 GUI 的用户交互功能ppt_358:组件(Component) Java 的图形用户界面的最基本组成部分是组件, 组件是一个可以以 图形化的方式显示在屏幕上并能与用户进行
7、交互的对象,例如一个按 钮,一个标签等 组件不能独立地显示出来,必 须将组件放在一定的容器中才可以 显示出来 抽象类 Component 是所有 Java GUI 组件的共同父类,它规定了所有 GUI 组件的基本特性,该类中定义的方法 实现了作为一个 GUI 部件所应具备的基本功能ppt_359:组件定位 Java 组件在容器中的位置和尺寸由布局管理器决定 如果想要人工控制组件在容器中的大小和位置,可先取消布局管理器,然后使用组件类的下述成员方法 setLocation() setSize() setBounds()ppt_361:容器类 容器类(Container) 实际上是组件类 Comp
8、onent 的子类,因此容器 类对象本身也是一个组件,具有组件的所有性 质,另外 还具有容纳其它组件和容器的功能 容器类是一个抽象类,包含了所有容器 组件都必须具有的属性和方法 容器类对象可使用方法 add()添加组件ppt_362:容器类 Window、Frame、Dialog 和 FileDialog 是大都含有边 框的容器 Panel 和 Applet 是无边框的容器ppt_363:Window 类 可自由停泊的顶级窗口,即一个 Window 或 Window 的子类都不能作为组件用 add()方法添加到其他容器内部,必须 独立存在,但可以包容其他 组 件 Window 不能作为程序的最
9、外层容器 Window 创建的窗口默认为不可见,可以利用 show()方法显示 Window 缺省布局管理器为 BorderLayout Window 可引发 WindowEvent 类的 WINDOW_OPENED 事件和WINDOW_CLOSED 事件ppt_364:Frame 类 Frame 类是抽象类 Window 的子类 Frame 是 Application 程序的图形用户界面容器 Frame 是所有窗口的父容器 Frame 不能被其他容器所包含,但是可以被其他容器 创建并弹出 Frame 对象显示效果是一个“窗口” ,有外 边框,且带有标题和尺寸控制角标ppt_366:Frame
10、 类 默认初始化为不可见的,可使用 setVisible(true)方法使之变为可见 默认的布局管理器是 BorderLayout,可使用 setLayout()方法改变其默认布局管理器 向 Frame 窗口中添加组件使用 add()方法 从 Frame 窗口中移出组件使用 remove()方法 利用 setTitle(String)和 getTitle()设置和获取标题ppt_368:Panel 类 提供容纳组件的空间 可以采用和所在容器不同的布局管理器 Panel 必须 放在 Window、Frame 或 Applet 中 是一块无边框的区域 可以向其中放入基本组件ppt_371:布局管理
11、器 为了使我们生成的图形用户界面具有良好的平台无关性, Java 语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接 设置组件位置和大小的方式 每个容器都有一个布局管理器ppt_372:容器布局 FlowLayout :Panel 类的默认布局管理器 BorderLayout:Frame 类的默认布局管理器ppt_377:BorderLayout 布局管理器 如不指定组件的加入部位, 则默认加入到 Center 区域 每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃 BorderLayout 是 Frame 类的默认布局管理器ppt_389:事件 事件(Eve
12、nt):一个对象,它描述了 发生什么事情 事件源(Event source):产生事件的组件 事件处理者(Event handler):能够接收、解析和处理事件类对象、实现和用户交互的方法ppt_390:事件 事件不只是针对 Windows 应用程序,多数控制和监视程序都是事件驱动程序ppt_394:事件代理 Java GUI 设计中,通过注册监听器的方式对所关注的事件源进行监控 当事件源发生了某种类型的事件时,只触 发事先已就该 种事件类型注册过的监听器ppt_395:事件类 java.awt.event 包中定义 了多个事件类,它们都是 java.awt.EventObject 类的直接或
13、间接子类 getSource()方法,返回事件源 getID()方法,返回事件种类ppt_397:监听器接口 java.awt.event 包中定义 了十一个监听器接口,每个接口内部包含了若干处理相关事件的抽象方法 通常每个事件类都有一个监听器接口与之相对应,而事件类中的每个具体事件类型都有一个具体的抽象方法与之相对应,当具体事件 发生时 ,这个事件将被封装成一个事件类的对象作为实际参数传递给与之对应的具体方法,由这个具体方法负责响应并处理发生的事件ppt_400:多重监听器 一个事件源组件上可以注册多个监听器, 针对同一个事件源的同一种事件也可以注册多个监听器,一个监听器可以被注册到多个不同
14、的事件源上ppt_403:事件适配器类 为简化编程,针对大多数事件 监听器接口定义了相应的 实现类,即事件适配器 类 在适配器类中,实现了相 应监听器接口中所有的方法,但不做任何事情 在定义监听器类时就可以继承事件适配器类,并只重写所需要的方法 适配器类实现了相应 Listener 接口,但所有方法体都是空的ppt_437:创建菜单1. 首先创建一个 MenuBar 对象,并将其置于一个可容纳菜单的容器中2. 创建一个或多个 Menu 对象,并将它们添加到先前创建的 MenuBar 对象中3. 创建一个或多个 MenuItem 或 CheckboxMenuItem 对象,再将其加入到各 Men
15、u 对象ppt_439:Applet 类 Applet 类存于 java.applet 包中,是 java.awt.Panel 的子类 Applet 就是使用 Java 语 言编写的一段代码,是在 浏览器环境中运行的,必须创建一个 HTML 文件,通过编写 HTML 语言代码告诉浏览器载入何种 Applet 以及如何运行ppt_443:Applet 工作原理 编译好的字节码文件保存在特定的 WWW 服务器上,同一个或另一个服务器上保存着嵌入了该字节码文件名的 HTML 文件 当某一个浏览器向服务器请求下载嵌入了 Applet 的 HTML 文件时,该文件从WWW 服务器上下载到客户端,由 WW
16、W 浏览器解释 HTML 中的各种标记,按其约定将文件中的信息以一定的格式显示在用户屏幕上ppt_444:Applet 工作原理 当浏览器遇到 HTML 文件中的特殊 标记,表明它嵌有一个 Applet 时,浏览器会根据这个 Applet 的名字和位置自动把字节码从 WWW 服务器上下载到本地,并利用 浏览器本身拥有的 Java 解释器直接执行该字节码ppt_457:在 Applet 中显示图像 加载图像:使用 Applet 类的 getImage()方法装载一个 Image 对象 显示图像:使用 Graphics 类的 drawImage()方法将装载的对象画到屏幕上ppt_466:Audi
17、oClip 中的方法 play() 播放 loop() 循环播放 stop() 停止播放ppt_473:Applet 与 URL 包中定义了一个 URL 类1.getDocumentBase() 返回当前 Applet 所在 HTML 文件的 URL2.getCodeBase() 返回当前 Applet 的 URL。除非在标记中指定了codebase,否 则这个 URL 与 HTML 文件的 URL 是一致的ppt_476:输入/输出流类 java.io 包中定 义了多个流 类型(类或抽象类)来实现输入/输出功能ppt_481:InputStream 类 read()方法是抽象方法, 为了让继
18、承 InputStream 类的子 类可以针对不同的外部设备定义不同的 read()方法 Java 规定 read()方法必须配合例外处理机制来使用,所以使用 read()方法时,必须加入 IOException 来执行例外处理,或利用 try-catch 来执行错误控制ppt_482:InputStream 类 public long skip(long n)略过 n 个字节 public void mark(int readlimit)在输入数据流中加入标记 public void reset()将读取位置移到标记处 public void close()关闭输入数据流ppt_489:Re
19、ader 类 void close()关闭流 boolean ready()测试流是否可以 读取 long skip(long n)跳过流内 n 个字符 void mark(int readAheadLimit)标记流当前位置 void reset()将流重新设置到前面所标记的位置ppt_496:节点流和处理流 节点流:可以从/向一个特定的地方 (节点)读写数据 处理流:是对一个已存在的流的连接和封装,通 过所封装的流的功能 调用实现数据读/写功能ppt_516:进程 进程是程序的一次动态执行过程,它 对应了从代码加载 、执行到执行完毕的一个完整过程,这个过程也是进程本身从 产生、 发展到消亡
20、的过程 作为执行蓝本的同一段程序,可以被多次加载到系统的不同内存区域分 别执行,形成不同的进程ppt_517:线程 线程是一个程序内部的顺序控制流 线程是比进程更小的执行单位 一个进程在其执行过程中,可以 产生多个线程,形成多条执行线索ppt_518: 每个进程都有独立的代码和数据空间(进程上下文) ,进 程切换的开销大 线程即轻量的进程,同一 类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小 多进程:在操作系统中能同时运行多个任务(程序) 多线程:在同一应用程序中有多个顺序流同时执行。 线 程在程序内部,多个 线程共享一些系统开销ppt_520:Java 线程 是通过 java.lang 包中的 Thread 类来实现的 将一个虚拟的 CPU,封装在 java. lang 包中的 Thread 类,每个线程的代码通过Thread 类和虚拟的 CPU 打交道,而 Java 虚拟机占用一个进程,同时运行许多虚拟的 CPU,多个虚拟的 CPU 间的协调不需要人为编码