JAVA 第八章

合集下载

第八章输入输出处理输入输出处理是...

第八章输入输出处理输入输出处理是...

第八章输入/输出处理输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等,而键盘、监视器、磁盘存储设备都称为输入、输出源。

Java把这些不同类型的输入、输出源抽象为流(stream)。

Java程序可以用输入流从一些输入源读数据,用输出流向一些输出源写数据。

Jdk 提供了包java.io,其中包括一系列的类来实现输入/输出处理。

从jdk1.1开始,java.io包中的流包括字节流和字符流。

§8.1输入/输出字节流概述§8.1.1 I/O字节流的层次结构在java中,所有的输入流都是从抽象类InputStream继承而来,所有的输出流都是从OutputStream 继承而来。

以下给出了java语言IO包中输入/输出处理类之间的继承关系。

输入、输出字节流的类层次一、简单的输入、输出流1.FileInputStream和FileOutputStream:用于本地文件系统的文件读写。

2.PipedInputStream和PipedOutputStream:用于完成管道的输入和输出。

管道用于将一个程序(或线程或代码块)的输出引导进另一个程序(或线程或代码块)的输入,所有PipedInputStream必须连接到一个PipedOutputStream所有PipedOutputStream必须连接到一个PipedInputStream。

3.ByteArrayInputStream和ByteArrayOutputStream:读写内存数据。

4.SequenceInputStream:用于将多个输入流连接到一个输出流。

5.StringBufferInputStream:用于读取StringBuffer类可变字符串中的数据。

二、过滤流1.DataInputStream和DataOutputStream:用一种与机器无关的格式读写java语言的基本数据类型。

第8章 Java Applet编程

第8章  Java Applet编程

8.5 小

• 本章中,对Applet的基础知识,工作原理、生命 周期,以及Applet的部署和基本事件的处理,还 有向Applet传递参数等等作了详细介绍。总的来 说,基于Applet的应用有很多,由于篇幅关系, 这里不再详细介绍,留待读者进一步在实践中去 探索。
8.1.1 Applet的特点
• • • • 应用小程序Applet能够完成以下的工作: (1)Applet能够播放声音; (2)Applet运行在Web浏览器中,它提高了HTML文档的交互性; (3)Applet能够调用在同一页中其他应用小程序的公共(Public) 函数; • (4)Applet可以从本地文件系统中装载(用户在CLASSPATH中定 义的路径),那么从网络装载时所产生的约束将不再适用于这个 Applet; • (5)虽然一旦离开Applet所在的页,大多数Applet将停止运行, 但是这并不是绝对的,通常,大部分Applet具有良好的行为,后 面介绍的stop()函数,目的就在于在编程者离开其所在页时停止 进程的运行,但是,有时候希望让Applet继续运行,例如用户让 Applet执行一个复杂的运算,那么当离开其所在的页时,编程者 希望这个运算能继续进行下去。
第8章 Java Applet编程
• 在这一章中,将介绍Applet网页小应用程序。 Applet网页小应用程序是个面向网络的程序。可 以用来让程序员创建应用程序,并放置在网络服 务器上,而用户可以通过网络下载这些应用程序, 并利用浏览器安全地运行。
8.1 Applet基础知识
• Java Applet小应用程序是一种特殊的Java程序。 这种小程序运行在支持Java的浏览器上,同时也 可以使用JDK所带的appletviewer命令来测试。要 让小程序运行,需要将已经编译好的字节码文件 (.class文件),用特殊标记嵌入到HTML语言编 写的Web页面中。这样,当打开Web页面时,浏览 器会使用内置的Java解释器来运行小程序。

Java程序设计精编教程5-8章知识点

Java程序设计精编教程5-8章知识点

b) 如果变量名由多个单词组成,从第 2 个单词开始的每个单词的首字母要大写。
方法
方法的定义包括两部分:方法声明和方法体。一般格式为:
方法声明部分 {
方法体的内容
}
方法声明
方法声明包括返回值类型、方法名和参数。
double getArea() { //返回值类型为 double,无参数。

}
方法的返回值类型可以是 Java 中的任意数据类型。如果一个方法不返回数据,返回值类型必须是 void。
2. 有一个类 Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部 new 对象),只能通过该类 的静态方法 getInstance()获取该类的唯一对象。在主类 Homework2 中测试单例模式的有效性。
b) 在实例方法中,不仅可以调用实例方法,也可以调用类方法。 2) 类名调用类方法
a) 在类方法中,只能调用类方法、操作类变量。 b) 也可以通过对象调用类方法。 c) 如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例 5-8) 5.7 方法重载与多态 Java 中有两种多态:重载(overload)和重写(override)。 方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同, 或者参数的类型不同。方法的返回值类型与重载无关。
5.8 this 关键字 this 只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。 一般情况下,方法中 this.实例变量的 this 可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,
this 或类名不能省略。 5.9 包
包是 Java 语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。 包语句

8第八章GUI

8第八章GUI
6、能独立完成基本GUI界面的设计及简单事件的处理。
《JAVA程序设计》课程
8.1组件
8.1.1 项目(8-1)描述 请设计出如下登录窗口,如图8-1所示。
图8-1 登录窗口
《JAVA程序设计》课程
8.1组件
8.1.2 项目知识准备 (1)AWT 图形用户界面(Graphics User Interface,GUI)就是为应用程序提供一个图形化界面,方便用户和用户程序实 现友好交互的一个桥梁。常用的GUI图形界面开发工具分为以下两种: AWT(Abstract Window ToolKit,抽象窗口工具包)。AWT依赖具体的平台来构件图形用户界面的外观,所以使 用AWT编制的程序中在不同的平台上运行,会出现不同的运行效果。AWT工具包javax.awt,包括对话框,按钮, 复选框,列表,菜单,滚动条和文本域,高级窗口,可视控件如文本框和下压按钮,以及在屏幕上绘制图象的 简单元素有相似的功能。组件类,是所有图形界面元素的超类。图8-1表示组件的分层结构.
《Java 程序设计》课程 第八章 GUI
主讲人: 谢先伟
2017年3月
Java程序设计
汇报提纲
1、GUI顶层容器 2、GUI常用组件 3、GUI常用布局 4、GUI事件处理模型、监听机制和常用事件
《JAVA程序设计》课程
学习目标
1、了解AWT、Swing包的相关概念; 2、理解组件的概念,掌握对常用组件的使用; 3、理解容器的概念,掌握对常用容器的使用; 4、理解组建布局管理的概念,掌握对常用布局的使用 5、理解事件处理过程,掌握对事件处理过程的使用;
《JAVA程序设计》课程
8.1组件
表8-2 JFrame的方法及方法说明
方法
方法说明

java08(第8章输入输出流)

java08(第8章输入输出流)

在java.io包中定义了很多这二个基本类具体实现 包中定义了很多这二个基本类具体实现 输入输出功能的子类, 输入输出功能的子类,表8.1为部分常用字节输入 为部分常用字节输入 流类和字节输出流子类的功能。 流类和字节输出流子类的功能。
表8.1
类 名 FileInputStream 和 FileOutputStream ByteArrayInputStream和 ByteArrayOutputStream ObjectInputStream 和 ObjectOutputStream FilterInputStream 和 FilterOutputStream DataInputStream 和 DataOutputStream BufferedInputStream 和 BufferedOutputStream
【例8-1 】
1. /* 读取文件 */ 2. import java.io.FileInputStream; 3. import javax.swing.JOptionPane; 4. class Example8_1 5. { public static void main( String args[ ]) 6. { byte buffer[ ] = new byte[2056]; 7. String str; 8. try{ 9. File file=new File("d:/jtest/test.dat"); 10. FileInputStream fileInput = new FileInputStream(file); 11. int bytes = fileInput.read( buffer, 0, 2056 ); //读到的字节数 读到的字节数 12. str = new String( buffer, 0, bytes ); 13. } 14. catch(Exception e) 15. { 16. str= e.toString(); 17. } 18. JOptionPane.showMessageDialog(null,str); 19. System.exit(0); //退出程序 退出程序 20. } 21. }

Java程序设计:第八章 Swing图形界面程序设计

Java程序设计:第八章 Swing图形界面程序设计

原型 public FlowLayout(int align )
描述
FlowLayerout布局时,组件在容器以从左到右,从 上到下的方式排列。 align用于指定行对齐方式, FlowLayout.LEFT表示左 对齐,相应的有右对齐和居中对齐。
java.awt.Container的成员JLabel(2)
JFrame的成员方法
原型
public JFrame( ) public JFrame(String title) public void setDefaultCloseOperation( int operation) public void setSize(int width, int height) public void setVisible(boolean b) public Container getContentPane()
描述 构造一个无标题不可见的框架 构造一个标题为title的框架 设置当关闭框架时的操作,例如operation为 JFrame.EXIT_ON_CLOSE时表示退出程序
设置框架的大小
设置框架是否可见 返回当前框架的内容窗格
7
组件和容器 -JFrame和JLabel(3)
FlowLayout布局的成员方法:
4
组件和容器(3)
一般容器包括: 面板JPanel,滚动窗格JScrollPane,选项卡 窗格JTabbedPane和工具栏JToolBar。
专用容器包括:内部框架(JInternalFrame),分层窗格 (JLayedPane)、根窗格(JRootPane)、玻璃窗格(GlassPane )、内 容窗格(ContentPane)。
描述 构造一个父窗口为owner,标题为title,模式为 modal的对话框。Modal为true表示有模式,为false 表示无模式 设置对话框的大小

第八章 Applet基础

第八章 Applet基础

第八章 Applet基础Java Applet 是用 Java 语言编写的一些小应用程序,这些程序是直接嵌入到页面中,作为 Web 页面一部分运行的,由支持 Java 的浏览器(IE 或 Netscape)解释执行,能够产生特殊效果的程序。

它可以大大提高 Web 页面的交互能力和动态执行能力。

当用户访问这样的网页时,Applet 被下载到用户的计算机上执行。

由于 Applet 是在用户的计算机上执行的,所以它的执行速度不受网络带宽或者 Modem 存取速度的限制,用户可以更好地欣赏网页上Applet 产生的多媒体效果。

学习和使用 Applet,可以使开发人员轻松地将 Java 编程应用于网络。

Applet 不仅能够创建出来五彩缤纷的网站页面,还可以极大地丰富页面的功能,为网站开发注入活力。

本章将介绍 Java Applet 的基本工作原理和应用方法。

8.1 Java Applet 程序开发步骤与安全机制8.1.1 Applet 程序开发主要步骤Applet 程序开发主要经历四个步骤⏹选用编辑器建立 Java Applet 源程序。

⏹把 Applet 的源程序转换为字节码文件⏹编制使用 class 的 HTML 文件。

在 HTML 文件内放入必要的<APPLET>语句⏹使用浏览器或applerviewer执行html文件1.编辑 Applet 的 java 源文件下面举一个最简单的 HelloWorld 例子来说明 Applet 程序的开发过程:编辑 Applet 的 java 源文件【例8-1】Applet小程序import java.awt.*;import java.applet.*;public class HelloWorld extends Applet{public void paint(Graphics g){g.drawString("Hello World!", 5, 35);}}2.编译 Applet利用javac命令编译文件,将.java文件编译生成.class文件。

java培训笔记(详细)版含作业练习-图形界面详解

java培训笔记(详细)版含作业练习-图形界面详解

四. 创建GUI 步骤三:在容器中加入组件
五. 创建GUI 步骤四:创建事件处理器
六. FlowLayout流式布局管理器
最简单的布局管理器,按照组件的添加次序将它们从左到右地放置在容器中。当到达容器边界时,组件将放置在下一行中。
FlowLayout允许以左对齐、居中对齐(默认方式)或右对齐的方式排列组件。特性:
. 不限制它所管理的组件的大小, 而是允许它们有自己的最佳大小。
. 当容器被缩放时,组件的位置可能会变化,但组件的大小不改变。
FlowLayout的构造方法如下:
java.awt包中提供了一个抽象类Component,它是所有除了菜单类组件之外的AWT组件的父类。Container类表示容器,继承
了Component类。容器用来存放别的组件, 有两种类型的容器:Window和Panel。
1. Window和它的子类Frame
Insets getInsets() :返回容器的边框尺寸的大小
Validate():使容器内修改过的组件生效
三. 创建GUI 步骤二:布局管理器
组实例,通过它来自动进行组件的
南北区域的组件保持最佳高度,宽度被水平拉伸至和所在区域一样宽;
位于中区域的组件的宽度和高度都被拉伸至和所在区域一样大小。
. 垂直拉伸,东、西和中区域也拉伸;
水平拉伸,南、北和中区域也拉伸;
. 中区域没有组件,也会分配空间显示容器的背景颜色;
f.setBackground(Color.BLUE);
f.setVisible(true);
}
}
Index:组件存放的位置
constraints:通常是布局管理器的对象
Component getComponent()
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程与线程
线程和进程的关系是:线程是属于进程的,线 程运行在进程空间内,同一进程所产生的线程 共享同一内存空间,当进程退出时该进程所产 生的线程都会被强制退出并清除。线程可与属 于同一进程的其它线程共享进程所拥有的全部 资源,但是其本身基本上不拥有系统资源,只 拥有一点在运行中必不可少的信息(如程序计 数器、一组寄存器和栈)。
程序是为了完成某项任务编排的语句序列,程序是一 段静态的代码。 进程(Process)是具有一定独立功能的程序关于某个 数据集合上的一次运行活动,是系统进行资源分配和 调度的一个独立单位。程序只是一组指令的有序集合, 它本身没有任何运行的含义,只是一个静态实体。而 进程则不同,它是程序在某个数据集上的执行,是一 个动态实体。它因创建而产生,因调度而运行,因等 待资源或事件而被处于等待状态,因完成任务而被撤 消,反映了一个程序在一定的数据集上运行的全部动 态过程。
8.1 Java中的线程 中的线程
程序是一段静态的代码,它是应用软件执行的蓝 本。进程是程序的一次动态执行过程,它对应了从代 码加载、执行至执行完毕的一个完整过程,这个过程 也是进程本身从产生、发展至消亡的过程。线程是比 进程更小的执行单位。一个进程在其执行过程中,可 以产生多个线程,形成多条执行线索,每条线索,即 每个线程也有它自身的产生、存在和消亡的过程,也 是一个动态的概念。
第八章 线程
本章导读 1. Java中的线程 2. 线程的生命周期 3. 线程的优先级与调度管理 4. Thread的子类创建线程 5.使用Runable接口 6.线程的常用方法 7.线程同步 8.在同步方法中使用wait()、notify 和notifyAll 9.线程的联合 10.守护线程
程序与进程
(c)线程使用CPU资源期间,执行了wait()方法,使得 当前线程进入等待状态。等待状态的线程不会主动 进到线程队列中排队等待CPU资源,必须由其他线程 调用notify()方法通知它,使得它重新进到线程队 列中排队等待CPU资源,以便从中断处继续运行。有 关wait、noftify和notifyAll方法将在第8节详细讨 论 (d) 线程使用CPU资源期间,执行某个操作进入阻塞 状态,比如执行读/写操作引起阻塞。进入阻塞状态 时线程不能进入排队队列,只有当引起阻塞的原因 消除时,线程才重新进到线程队列中排队等待CPU资 源,以便从原来中断处开始继续运行。
操作系统分类
1)单进程、单线程,MS-DOS大致是这种操 作系统; 2)多进程、单线程,多数UNIX(及类UNIX 的LINUX)是这种操作系统; 3)多进程、多线程,Win32(Windows NT/2000/XP等)、Solaris 2.x和OS/2都是这 种操作系统; 4)单进程、多线程,VxWorks是这种操作系 统
3.sleep(int millsecond) 优先级高的线程可以在它的run()方法 中调用sleep方法来使自己放弃处理器资 源,休眠一段时间。
4.isAlive() 在线程的run方法结束之前,即没有进入死亡状态之 前,线程调用isAlive()方法返回true,当线程进入死 亡状态后(实体内存被释放),线程仍可以调用方法 isAlive(),这时返回的值是false。(线程未调用 线程未调用 start方法之前 调用isAlive()方法返回false). 方法之前, isAlive()方法返回 start方法之前,调用isAlive()方法返回false). 需要注意的是,一个已经运行的线程在没有进入 死亡状态时,不要再给线程分配实体,由于线程只能 引用最后分配的实体,先前的实体就会成为“垃圾”, 并且不会被垃圾收集机收集掉。
当JVM将CUP使用权切换给线程时,如果线程是 Thread的子类创建的,该类中的run方法就立刻执行。 所以我们必须在子类中重写父类的run方法,Thread类 中的run()方法没有具体内容,程序要在Thread类的子 类中重写run()方法来覆盖父类的run()方法,run方法 规定了该线程的具体使命。 在线程没有结束run方法之前,不要让线程再调用 start方法,否则将发生 ILLegalThreadStateException异常。
(3)中断 有4种原因的中断: (a) JVM将CPU资源从当前线程切换给其他线程,使本 线程让出CPU的使用权处于中断状态。 (b)线程使用CPU资源期间,执行了sleep(int millsecond)方法,使当前线程进入休眠状态。 sleep(int millsecond)方法是Thread类中的一个类 方法,线程一旦执行了sleep(int millsecond)方法, 就立刻让出CPU的使用权,使当前线程处于中断状态。 经过参数millsecond指定的豪秒数之后,该线程就 重新进到线程队列中排队等待CPU资源,以便从中断 处继续运行。
下面的例子4中,两个线程:zhang和cheng,使用同 一目标对象。两个线程共享目标对象的money。当money 的值小于100时,线程zhang结束自己的run方法进入死亡 状态;当money的值小于60时,线程cheng结束自己的run 方法进入死亡状态。 例子5中共有4个线程:threadA、threadB、threadC 和threadD,其中threadA和threadB的目标对象a1, threadC和threadD的目标对象是a2。threadA和threadB 共享a1的成员number,而threadC和threadD共享a2的成 员number。
8.4 Thread 的子类创建线程
在Java语言中,用Thread类或子类创建线程对象。 这一节讲述怎样用Thread子类创建对象。 用户可以扩展 Thread类,但需要重写父类的run方 法,其目的是规定线程的具体操作,否则线程就什么 也不做,因为父类的run方法中没有任何操作语句。 下面例子3中除主线程外还有两个线程,这两个线程 分别在命令行窗口的左侧和右侧顺序地一行一行地输 出字符串。主线程负责判断输出的行数,当其中任何 一个线程输出8行后,就结束进程。本例题中用到了 System类中的类方法:exit(int n),主线程使用该方 法结束整个程序。
返回
8.2 线程的生命周期
1.线程的4种状态 在Java语言中,Thread类及其子类创建的对象称作线 程,新建的线程在它的一个完整的生命周期中通常要 经历4种状态, (1)新建 (2)运行 线程创建后仅仅是占有了内存资源,在JVM管理的线 程中还没有这个线程,此线程必须调用start()方法 (从父类继承的方法)通知JVM,这样JVM就会知道又 有一个新一个线程排队等候切换了。
2.关于run方法中的局部变量 对于具有相同目标对象的线程,当其中一 个线程享用CPU资源时,目标对象自动调用接 口中的run方法,当轮到另一个线程享用CPU 资源时,目标对象会再次调用接口中的run方 法,。不同线程的run方法中的局部变量互不 干扰,一个线程改变了自己的run方法中局部 变量的值不会影响其他线程的run方法中的局 部变量。看例子6
返回
8.6 线程的常用方法
1.start() 线程调用该方法将启动线程,使之从新建 状态进入就绪队列排队,一旦轮到它来享用 CPU资源时,就可以脱离创建它的主线程独 立开始自己的生命周期了。 2.run() Thread类的run()方法与Runnable接口中 的run()方法的功能和作用相同,都用来定 义线程对象被调度之后所执行的操作,都是 系统自动调用而用户程序不得引用的方法。
ห้องสมุดไป่ตู้
在操作系统中引入线程带来的主要好处是: 1)在进程内创建、终止线程比创建、终止进程要快; (2)同一进程内的线程间切换比进程间的切换要快,尤其 是用户级线程间的切换。 另外,线程的出现还因为以下几个原因: (1)并发程序的并发执行,在多处理环境下更为有效。一 个并发程序可以建立一个进程,而这个并发程序中的若干并 发程序段就可以分别建立若干线程,使这些线程在不同的处 理机上执行。 2)每个进程具有独立的地址空间,而该进程内的所有线程 共享该地址空间。这样可以解决父子进程模型中,子进程 必须复制父进程地址空间的问题。 (3)线程对解决客户/服务器模型非常有效。
(4)死亡 处于死亡状态的线程不具有继续运行的能力。线程死 亡的原因有二,一个是正常运行的线程完成了它的全 部工作,即执行完run方法中的全部语句,结束了run 方法。另一个原因是线程被提前强制性地终止,即强 制run方法结束。所谓死亡状态就是线程释放了实体, 即释放分配给线程对象的内存。 现在,我们看一个完整的例子1,通过分析运行结果 阐述线程的4种状态。该例子中我们用Thread的子类: WriteWordThread创建了两个线程。
Java应用程序总是从主类的main方法开始执行。当 JVM加载代码,发现main方法之后,就会启动一个线程, 这个线程称作“主线程”,该线程负责执行main方法。 那么,在main方法中再创建的线程,就称为主线程中 的线程。如果main方法中没有创建其他的线程,那么 当main方法执行完最后一个语句,即main方法返回时, JVM就会结束我们的Java应用程序。如果main方法中又 创建了其他线程,那么JVM就要在主线程和其他线程之 间轮流切换,保证每个线程都有机会使用CPU资源, main方法即使执行完最后的语句,JVM也不会结束我们 的程序,JVM一直要等到主线程中的所有线程都结束之 后,才结束我们的Java应用程序。
上述程序在不同的计算机运行或在同一台计算机反复 运行的结果不尽相同,输出结果依赖当前CPU资源的使 用情况。为了使结果尽量不依赖于当前CPU资源的使用 情况,我们应当让线程主动调用sleep方法让出CPU的 使用权进入中断状态,如例子2所示:
返回
8.3 线程的优先级与调度管理
Java虚拟机(JVM)中的线程调度器负责管理线程,调度器 把线程的优先级分为10个级别,分别用Thread类中的类常量表示。 每个Java线程的优先级都在常数1: Thread.MIN PRIORITY 到常数10: Thread.MAX_PRIORITY 的范围内。如果没有明确地设置线程的优先级别,每个线程的 优先级都为常数5(包括主线程): Thread.NORM_PRIORITY, 线程的优先级可以通过setPriority(int grade)方法调整, 这一方法需要一个int类型参数。如果此参数不在1~10的范围内, 那么setPriority便产生一个lllegalArgumenException异常。 getPriority方法返回线程的优先级。需要注意是,有些操作系 统只能识别3个级别:1,5,10。 返回
相关文档
最新文档