Java语言程序设计下课件

上传人:壹****1 文档编号:569464762 上传时间:2024-07-29 格式:PPT 页数:276 大小:1.68MB
返回 下载 相关 举报
Java语言程序设计下课件_第1页
第1页 / 共276页
Java语言程序设计下课件_第2页
第2页 / 共276页
Java语言程序设计下课件_第3页
第3页 / 共276页
Java语言程序设计下课件_第4页
第4页 / 共276页
Java语言程序设计下课件_第5页
第5页 / 共276页
点击查看更多>>
资源描述

《Java语言程序设计下课件》由会员分享,可在线阅读,更多相关《Java语言程序设计下课件(276页珍藏版)》请在金锄头文库上搜索。

1、Java语言程序设计马 皓1Java语言程序设计(下)第四章Applet及其应用1.Applet概述2.Applet类3.Applet程序与HTML文件4.Applet的应用2Java语言程序设计(下)Applet概述nJava程序的两种基本形式nJava Application(应用程序),可独立运行nJava Applet(小程序),嵌入在浏览器中运行n介绍nApplet的结构特点、实现方法、工作原理n掌握nApplet的编辑、编译和运行方法3Java语言程序设计(下)一个Applet小程序的例子import java.applet.Applet;import java.awt.Graph

2、ics;public class Exam4_1 extends Applet String str;public void init() str = “Here is an Applet”;public void paint(Graphics g) g.drawString(str, 100, 100);4Java语言程序设计(下)HTML文件n超文本标记语言(HTML)nWWW浏览器nApplet小程序n嵌入在/写入在HTML文件中n从WWW服务器下载到本地WWW浏览器n由WWW浏览器中的Java解释器来运行5Java语言程序设计(下)HTML文件n实现过程nApplet小程序编写,编译,

3、得到字节码文件njavac Exam4_1.javan嵌入到HTML文件中,保存为Exam4_1.htmlnnnnnn6Java语言程序设计(下)HTML文件n浏览器打开Exam4_1.html文件7Java语言程序设计(下)Applet的特点n通常作为Applet类的子类,格式如下:public class 类名 extends Applet n嵌入在HTML文件中,利用WWW浏览器或Appletviewer来运行n利用了WWW浏览器或Appletviewer所提供的图形用户界面功能8Java语言程序设计(下)Applet的工作原理Applet源程序字节码文件嵌入到HTML文件WWW浏览器打

4、开 该HTML文件9Java语言程序设计(下)第四章Applet及其应用1.Applet概述2.Applet类3.Applet程序与HTML文件4.Applet的应用10Java语言程序设计(下)Applet类的继承关系java.lang.Objectjava.awt.Componentjava.awt.Containerjava.awt.Paneljava.applet.Applet默认情况下,Applet类使用FlowLayout布局管理器11Java语言程序设计(下)Applet类的主要方法1.init()方法n完成初始化操作n在Applet程序第一次加载时调用,仅执行一次2.start

5、()方法n启动Applet主线程运行n重启时也被调用(reload或返回)3.paint()方法n将结果输出/绘制到界面上n被自动调用(启动后/窗口改变/repaint()调用)12Java语言程序设计(下)Applet类的主要方法4.stop()方法n暂停Applet程序执行5.destroy()方法n终止Applet程序执行,释放所占用的资源13Java语言程序设计(下)Applet类的主要方法import java.applet.Applet;import java.awt.*;public class Exam extends Applet public void init( ) /初

6、始化Applet程序public void start( ) /启动Applet线程public void paint(Graphics g) /绘制输出显示信息public void stop( ) /暂停线程public void destroy( ) /释放系统资源,结束线程14Java语言程序设计(下)第四章Applet及其应用1.Applet概述2.Applet类3.Applet程序与HTML文件4.Applet的应用15Java语言程序设计(下)HTML文件n超文本标记语言(HTML)n和nHtml文件开始和结束的标记n和nWWW浏览器窗口标题内容的标记n和nHtml文件在浏览器窗

7、口中显示内容的标记n和n嵌入到Html文件中Applet程序的标记16Java语言程序设计(下)Applet程序的标记nnn参数n17Java语言程序设计(下)Applet小程序import java.applet.Applet;import java.awt.*;public class Exam4_3 extends Applet String str;int x, y, h;Font fnt;public void init() str = getParameter(“string”);h = Integer.parseInt(getParameter(“size”);x = Integ

8、er.parseInt(getParameter(“x1”);y = Integer.parseInt(getParameter(“y1”);fnt = new Font(“TimesRoman”, Font.BOLD, h);public void paint(Graphics g) g.setColor(Color.red);g.setFont(fnt);g.drawString(str, x, y);18Java语言程序设计(下)Applet小程序19Java语言程序设计(下)第四章Applet及其应用1.Applet概述2.Applet类3.Applet程序与HTML文件4.Apple

9、t的应用20Java语言程序设计(下)绘制图形1.设置字体njava.awt.Font类n设置文本的字体(包括字型和字号)n构造方法npublic Font(String name, int style int size)2.设置颜色njava.awt.Color类n控制颜色,Color类已包含13个颜色常量n构造方法npublic Color(int r, int g, int b)npublic Color(float r1, float g1, float b1)21Java语言程序设计(下)绘制图形3.绘制文本n绘制字符串npublic void drawString(String s

10、, int x, int y)n绘制字符npublic void drawString(char c, int offset, int number int x, int y)n绘制字节npublic void drawString(byte b, int offset, int number int x, int y)22Java语言程序设计(下)Applet小程序import java.applet.Applet;import java.awt.*;public class Exam4_4 extends Applet public void paint(Graphics g) Font

11、font1, font2, font3;font1 = new Font(“Serif”, Font.BOLD, 20);font2 = new Font(“Monospaced”, Font.BOLD+Font.ITALIC, 24);font3 = new Font(“SansSerif”, Font.PLAIN, 16);g.setFont(font1);g.drawString(“Serif 20 point BOLD”, 30, 20);g.setFont(font2);g.drawString(“Monospaced 24 point BOLD + ITALIC”, 30, 80)

12、;g.setFont(font3);g.drawString(“SansSerif 16 point PLAIN”, 30, 50);int size = font2.getSize();int style = font1.getStyle();String name = font2.getName();String str = name + “ “ + style + “ “ + size;g.drawString(str, 30, 110);23Java语言程序设计(下)Applet小程序24Java语言程序设计(下)Applet小程序import java.applet.Applet;i

13、mport java.awt.*;public class Exam4_6 extends Applet Font font1 = new Font(“TimesRoman”, Font.ITALIC, 25);Font font2 = new Font(“Braggadcoio”, Font.BOLD, 40);public void paint(Graphics g) String str = “I love Beijing!”;Color mycolor = new Color(192, 64, 200);g.setFont(font1);g.setColor(mycolor);g.dr

14、awString(str, 30, 40);Color darker = mycolor.darker();g.setColor(darker);g.drawString(str, 50, 80);Color brighter = mycolor.brighter();g.setColor(brighter);g.drawString(str, 70, 120);g.setFont(font2);g.setColor(Color.red);g.drawString(str, 30, 170);g.setColor(Color.white);g.drawString(str, 32, 169);

15、25Java语言程序设计(下)Applet小程序26Java语言程序设计(下)绘制图形4.绘制几何图形n画直线nvoid drawLine(int x1, int y1, int x2, int y2)n画矩形nvoid drawRect(int x, int y, int width, int height)nvoid fillRect(int x, int y, int width, int height)nvoid clearRect(int x, int y, int width, int height)nvoid drawRoundRect(int x, int y, int wid

16、th, int height, int arcWidth, int arcHeight)nvoid draw3DRect(int x, int y, int width, int height, boolean b)nvoid fill3DRect(int x, int y, int width, int height, boolean b)27Java语言程序设计(下)绘制图形4.绘制几何图形n画圆弧和椭圆nvoid drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)nvoid fillArc(

17、int x, int y, int width, int height, int startAngle, int arcAngle)nvoid drawOval(int x, int y, int width, int height)nvoid fillOval(int x, int y, int width, int height)28Java语言程序设计(下)Applet小程序import java.applet.Applet;import java.awt.*;public class Exam4_8 extends Applet public void paint(Graphics g

18、) int x0 =10, y0=20, X=150, Y=80, L, c;int arc = 0, N=10;double xy=1.0*(X-Y)/N/2;g.setColor(Color.red);g.fillRect(x0, y0, X, X);for(int i=0; i =N; i+) L=(int)(X-2*i*xy); arc=Y*i/N; c=i*240/N; g.setColor(new Color(c, c, c); g.drawRoundRect(int)(x0+i*xy), (int)(y0+i*xy), L, L, arc, arc);g.setColor(Col

19、or.blue);g.draw3DRect(200, y0, X, X, true);g.setColor(Color.green);g.fill3DRect(400, y0, Y, Y, false);29Java语言程序设计(下)Applet小程序30Java语言程序设计(下)绘制图形4.绘制几何图形n画多边形npublic void drawPolygon(int xPoints, int yPoints, int Points)npublic void fillPolygon(int xPoints, int yPoints, int Points)npublic void drawP

20、olygon(Polygon p)npublic void fillPolygon(Polygon p)nPolygon类构造方法nPolygon()nPolygon(int xPoints, int yPoints, int numberOfPoints)31Java语言程序设计(下)演示图像1.定义图像对象njava.awt.Image类n图像高度和宽度nint getHeight(ImageObserver observer)nint getWidth(ImageObserver observer)2.获取图像信息方法nImage getImage(URL url, String nam

21、e)3.显示图像的操作ndrawImage(Image img, int x, int y, ImageObserver observer)ndrawImage(Image img, int x, int y, int width, int height, ImageObserver observer)32Java语言程序设计(下)Applet小程序import java.applet.Applet;import java.awt.*;public class Exam4_13 extends Applet public void paint(Graphics g) Image pic;pic

22、 = getImage(getDocumentBase(), “edonkey.jpg”);int x0 = 10, y0 = 30;int w = pic.getWidth(this);int h = pic.getHeight(this);g.drawImage(pic, x0, y0, w/8, h/8, this);g.drawImage(pic, x0+150, y0, w/12, h/12, this);g.drawImage(pic, x0+150, y0+100, w/15, h/15, this);g.drawImage(pic, x0+250, y0+30, (int)(w

23、*0.1), (int)(h*0.2), this);33Java语言程序设计(下)Applet小程序34Java语言程序设计(下)演示图像4.动画n创建Image类的对象数组ndrawImage()nThread.sleep()方法nrepaint()5.播放声音npublic void play(URL url)npublic AudioClip getAudio(URL url)nplay()方法/loop()方法/stop()方法35Java语言程序设计(下)第四章结束!36Java语言程序设计(下)1.概述2.事件处理3.基本控制组件4.布局设计5.常用容器组件第五章图形用户界面设计

24、37Java语言程序设计(下)概述n用户界面(User Interface)n用户与计算机系统(各种程序)交互的接口38Java语言程序设计(下)GraphicalGraphicalUser InterfaceUser InterfaceNatural Natural User InterfaceUser Interface19901990GUIGUIMultiple WindowsMultiple WindowsMenusMenus19951995InternetInternetHyperlinksHyperlinksSearch EnginesSearch EnginesDigital D

25、ecadeDigital DecadeXMLXMLWeb ServicesWeb ServicesSmart devicesSmart devicesNatural LanguageNatural LanguageMultimodal (speech, ink)Multimodal (speech, ink)Personal AssistantPersonal AssistantCommand lineCommand line19851985PCPCUserInterfaceEvolutionn- Kai Fu Lee in 200339Java语言程序设计(下)概述nJava GUI的发展1

26、.AWT (Java 1.0)nAWT (Abstract Window Toolkit): 抽象窗口工具包n概念设计实现 (about 1 month)n字体设计(四种), 界面显示(二流水准)2.Swing (Lightweight Components, Java 1.1)nSwing was the code name of the project that developed the new componentsnSwing API (附加包, Add-on package)3.JFC (Java 2)nJFC (Java Foundation Classes): Java基础类nJ

27、FC encompass a group of features to help people build graphical user interfaces (GUIs). nJFC 是指包含在 Java 2 平台内的一整套图形和用户界面技术nJFC was first announced at the 1997 JavaOne developer conference 40Java语言程序设计(下)概述nJFC (Java Foundation Classes)1.AWT (Abstract Window Toolkit)n一些用户界面组件 (Component)n事件响应模型 (Even

28、t-handling model)n布局管理器 (Layout manager)n绘图和图形操作类, 如Shape、Font、Color类等2.Swing Components (Swing组件, JFC的核心)na set of GUI components with a pluggable look and feel (包括已有的AWT组件(Button、Scrollbar、Label等)和更高层的组件 (如tree view、list box、tabbed panes等)nThe pluggable look and feel lets you design a single set o

29、f GUI components that can automatically have the look and feel of any OS platform (Microsoft Windows, Solaris, Macintosh).n基于Java 1.1 Lightweight UI Framework41Java语言程序设计(下)概述nJFC (Java Foundation Classes)3.Java 2D (advanced 2D graphics and imaging)nGraphics?nImaging? 4.Print Servicen打印文档、图形、图像n设定打印

30、属性和页面属性n发现打印机 (IPP, Internet Printing Protocol)42Java语言程序设计(下)概述nJFC (Java Foundation Classes)5.Input Method Frameworkntext editing components to communicate with input methods and implement a well-integrated text input user interfacen用Java语言开发输入法6.Accessibility: 辅助功能,帮助伤残人士nscreen readers, speech r

31、ecognition systems, refreshable braille displays7.Drag & DropnDrag and Drop enables data transfer both across Java programming language and native applications, between Java programming language applications, and within a single Java programming language application. 43Java语言程序设计(下)图形用户界面的构成n什么是组件?n

32、构成图形用户界面的元素,拿来即用n用图形表示(能在屏幕上显示,能和用户进行交互)nButton、Checkbox、Scrollbar、Choice、Frame44Java语言程序设计(下)图形用户界面的构成n一些特定的Java类njava.awt包njavax.swing包n容器组件(Container): 可包含其他组件n顶层容器: Applet, Dialog, Frame, Windown一般用途容器: Panel, ScrollPanen特定用途容器: InternalFramen非容器组件: 必须要包含在容器中nButton, Checkbox, Scrollbar, Choice,

33、 Canvas45Java语言程序设计(下)图形用户界面的构成nAWT组件 java.awt包ComponentButton,Canvas,Checkbox,Choice,Label,List,ScrollbarTextComponentTextAreaTextFieldContainerPanelWindowScrollPaneDialogFrameMenuComponentMenuBarMenuItem46Java语言程序设计(下)图形用户界面的构成nSwing组件 javax.swing包njava.awt.Component|-java.awt.Container|-java.awt.

34、Window|-java.awt.Frame|-javax.swing.JFramenjava.awt.Component|-java.awt.Container|-javax.swing.JComponent|-JComboBox,J,JInternalFrameJLabel,JList,JMenuBar,JOptionPane,JPanelJPopupMenu,JProgressBar,JScrollBarJScrollPane,JSeparator,JSlider,JSpinnerJSplitPane,JTabbedPane,JTableJTextComponent,JToolBar,J

35、Tree等47Java语言程序设计(下)图形用户界面的实现1.选取组件2.设计布局3.响应事件n应用原则nSwing比AWT提供更全面、更丰富的图形界面设计功能nJava 2平台支持AWT组件,但鼓励用Swing组件n主要讲述AWT和Swing的图形界面设计48Java语言程序设计(下)图形用户界面的实现n简单实例importjavax.swing.*;importjava.awt.event.*;publicclassHelloWorldSwingpublicstaticvoidmain(Stringargs)JFramef=newJFrame(“Swing1);JLabellabel=ne

36、wJLabel(Hello!);f.getContentPane().add(label);f.addWindowListener(newWindowAdapter() publicvoidwindowClosing(WindowEvente)System.exit(0););f.setSize(200,200);f.setVisible(true);importjava.awt.*;importjava.awt.event.*;publicclassHelloWorldAWTpublicstaticvoidmain(Stringargs)Framef=newFrame(AWT1);Label

37、label=newLabel(Hello!);f.add(label);f.addWindowListener(newWindowAdapter() publicvoidwindowClosing(WindowEvente)System.exit(0););f.setSize(200,200);f.setVisible(true);49Java语言程序设计(下)1.概述2.事件处理3.基本控制组件4.布局设计5.常用容器组件第五章图形用户界面设计50Java语言程序设计(下)事件处理n界面设计 (静态)n界面动起来 !n通过事件触发对象的响应机制n事件? 鼠标移动、鼠标点击、键盘键入等n事件处

38、理机制n事件源n事件对象n事件监听者n如何实现1.实现(implements)事件监听接口(interface)产生一个监听器对象(Listener)2.监听谁? 将该监听器对象注册到组件对象中3.编写事件响应方法51Java语言程序设计(下)事件处理importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassBeeperextendsJAppletimplementsActionListenerJButtonbutton;publicvoidinit()button=newJButton(ClickMe);ge

39、tContentPane().add(button,BorderLayout.CENTER);button.addActionListener(this);publicvoidactionPerformed(ActionEvente)System.out.println(“Clickmeonce”);java.awt.event.ActionListener(interface)publicvoidactionPerformed(ActionEvente)javax.swing.JButton(class)publicvoidaddActionListener(ActionListenerl)

40、52Java语言程序设计(下)事件处理n事件分类ActthatresultsintheeventListenertypeUserclicksabutton,pressesReturnwhiletypinginatextfield,orchoosesamenuitemActionListenerUserclosesaframe(mainwindow)WindowListenerUserpressesamousebuttonwhilethecursorisoveracomponentMouseListenerUsermovesthemouseoveracomponentMouseMotionLis

41、tenerComponentbecomesvisibleComponentListenerComponentgetsthekeyboardfocusFocusListenerTableorlistselectionchangesListSelectionListener53Java语言程序设计(下)事件处理n事件分类1.interface java.awt.event.ActionListenernpublic void actionPerformed(ActionEvent e)2.interface java.awt.event.WindowListenernpublic void win

42、dowOpened(WindowEvent e)npublic void windowClosing(WindowEvent e)npublic void windowClosed(WindowEvent e)npublic void windowIconified(WindowEvent e)npublic void windowDeiconified(WindowEvent e)npublic void windowActivated(WindowEvent e)npublic void windowDeactivated(WindowEvent e)54Java语言程序设计(下)事件处理

43、n事件分类3.interface java.awt.event.MouseListenernpublic void mouseClicked(MouseEvent e)npublic void mousePressed(MouseEvent e)npublic void mouseReleased(MouseEvent e)npublic void mouseEntered(MouseEvent e)npublic void mouseExited(MouseEvent e)4.interface java.awt.event.MouseMotionListenernpublic void m

44、ouseDragged(MouseEvent e)nInvoked when a mouse button is pressed on a component and then draggednpublic void mouseMoved(MouseEvent e)nInvoked when the mouse cursor has been moved onto a component but no buttons have been pushed55Java语言程序设计(下)事件处理n鼠标事件publicclassMouseEventDemo.implementsMouseListener

45、./RegisterformouseeventsonblankArea(TextArea)andappletblankArea.addMouseListener(this);publicvoidmousePressed(MouseEvente)saySomething(Mousepressed;#ofclicks:“+e.getClickCount(),e);publicvoidmouseReleased(MouseEvente)saySomething(Mousereleased;#ofclicks:+e.getClickCount(),e);publicvoidmouseEntered(M

46、ouseEvente)saySomething(Mouseentered,e);publicvoidmouseExited(MouseEvente)saySomething(Mouseexited,e);publicvoidmouseClicked(MouseEvente)saySomething(Mouseclicked(#ofclicks:“+e.getClickCount()+),e);voidsaySomething(StringeventDescription,MouseEvente)textArea.append(eventDescription+detectedon“+e.get

47、Component().getClass().getName()+.+newline);56Java语言程序设计(下)事件处理n多个监听器(Listener)多个组件publicclassMultiListener.implementsActionListener.button1.addActionListener(this);button2.addActionListener(this);button2.addActionListener(newEavesdropper(bottomTextArea);publicvoidactionPerformed(ActionEvente)topTex

48、tArea.append(e.getActionCommand()+newline);classEavesdropperimplementsActionListener.publicvoidactionPerformed(ActionEvente)myTextArea.append(e.getActionCommand()+newline);57Java语言程序设计(下)第五章图形用户界面设计1.概述2.事件处理3.基本控制组件4.布局设计5.常用容器组件58Java语言程序设计(下)AWT组件(java.awt.*)Component Button Canvas ChoiceCheckBox

49、LabelListTextComponentScrollbarTextFieldTextArea ContainerScrollPaneFramePanelWindowDialogApplet59Java语言程序设计(下)基本控制组件n使用步骤:n创建基本控制组件类的对象,指定对象属性;n将组件对象加入到制定容器的适当位置(布局设计);n创建事件对象的监听者。nSwing组件(javax.swing.*)60Java语言程序设计(下)按钮和标签n按钮(Button)n创建按钮npublic Button()npublic Button(String label)n常用方法npublic Str

50、ing getLabel()npublic void setLabel(String label)npublic void setActionCommand(String s)npublic String getActionCommand(String s)n事件响应njava.awt.event.ActionListener(接口)nvoid actionPerformed(ActionEvent e)61Java语言程序设计(下)按钮和标签n标签(Label)n创建标签npublic Label()npublic Label(String s)npublic Label(String s,

51、 int alignment)n常用方法npublic String getText()npublic void setText(String s)npublic void setAlignment(int alignment)n事件响应n不引发事件62Java语言程序设计(下)使用标签的例子import java.awt.*;import java.applet.*;public class Exam5_3 extends Applet Label lab1, lab2;TextField text1, text2;public void init() lab1 = new Label(“输

52、入姓名”);lab2 = new Label(“输入年龄”);lab1.setBackground(Color.red);lab2.setBackground(Color.green);text1 = new TextField(10);text2 = new TextField(10);add(lab1); add(text1);add(lab2);add(text2);63Java语言程序设计(下)使用标签的例子64Java语言程序设计(下)文本框和文本区n文本框(TextField)nTextComponent类的子类n创建文本框npublic TextField()npublic Te

53、xtField(int size)npublic TextField(String s)npublic TextField(String s, int size)n常用方法npublic void setText(String s)npublic String getText()npublic void setEchochar(char c)npublic void setEditable(boolean b)n事件响应njava.awt.event.TextListener(接口)njava.awt.event.ActionListener(接口)65Java语言程序设计(下)文本框和文本区

54、n文本区(TextArea)nTextComponent类的子类n创建文本区npublic TextArea()npublic TextArea(String s)npublic TextArea(int rows, int columns)npublic TextArea(String s, int rows, int columns)npublic TextArea(String s, int rows, int columns, int scrollbars)nSCROLLBARS_BOTH, SCROLLBARS_NONEnSCROLLBARS_VERTICAL_ONLYnSCROLL

55、BARS_HORIZONTAL_ONLYn常用方法npublic void append(String s)npublic void insert(String s, int index)npubilc void replaceRange(String s, int start, int end)n事件响应njava.awt.event.TextListener(接口)nvoid textValueChanged(TextEvent e)66Java语言程序设计(下)使用文本框的例子import java.awt.*;import java.awt.event.*;import java.ap

56、plet.*;public class Exam5_4 extends Applet implements ActionListenerLabel lab1, lab2, lab3;TextField text1, text2, text3;String str; int i; float f;public void init() lab1 = new Label(“输入整形数: ”); add(lab1);text1 = new TextField(“0”, 30);text1.addActionListener(this); add(text1);lab2 = new Label(“输入浮

57、点数: ”); add(lab2);text2 = new TextField(“0.0”, 30);text2.addActionListener(this); add(text2);lab3 = new Label(“输入字符串: ”); add(lab3);text3 = new TextField(“0.0”, 30);text3.addActionListener(this); add(text3);67Java语言程序设计(下)使用文本框的例子public void actionPerformed(ActionEvent e) i = Integer.parseInt(text1.

58、getText();f = (Float.valueOf(text2.getText().floatValue();str = text3.getText();repaint();public void paint(Graphics g) g.drawString(“整形数=” + i, 20, 120);g.drawString(“浮点数=” + f, 20, 150);g.drawString(“字符串=” + str, 20, 180);68Java语言程序设计(下)单复选框和列表n复选框(Checkbox)n创建复选框npublic Checkbox()npublic Checkbox

59、(String s)npublic TextField(String s, boolean state)n常用方法npublic boolean getState()npublic void setState(boolean b)npublic void setLabel(String s)npublic String getLabel()n事件响应njava.awt.event.ItemListener(接口)nvoid itemStateChanged(ItemEvent e)69Java语言程序设计(下)单复选框和列表n单选按钮组(CheckboxGroup)n创建单选按钮组npubli

60、c Checkbox(String label, boolean state, CheckboxGroup group)npublic Checkbox(String label, CheckboxGroup group, boolean state)n常用方法n与复选框相同n事件响应n与复选框相同70Java语言程序设计(下)单复选框和列表n列表(List)n创建列表npublic List()npublic List(int n)npublic List(int n, boolean b)n常用方法npublic void add(String s)npublic void add(Str

61、ing s, int n)npublic void remove(int n)npublic void removeAll()npublic int getSelectedIndex()npublic String getSelectedItem()n事件响应njava.awt.event.ItemListener(接口)njava.awt.event.ActionListener(接口)71Java语言程序设计(下)下拉列表和滚动条n下拉列表(Choice)n创建下拉列表npublic Choice()n常用方法npublic int getSelectedIndex()npublic St

62、ring getSelectedItem()npublic void select(int index)npublic void select(String item)npublic void add(String s)npublic void add(String s, int index)npublic void remove(int index)npublic void remove(String item)npublic void removeAll()n事件响应njava.awt.event.ItemListener(接口)72Java语言程序设计(下)下拉列表和滚动条n滚动条(Sc

63、rollbar)n创建滚动条npublic Scrollbar(int orientation, int value, int visible, int minimum, int maximum)n常用方法npublic void setUnitIncrement(int n)npublic void setBlockIncrement(int n)npublic int getUnitIncrement()npublic int getBlockIncrement()npublic int getValue()n事件响应njava.awt.event.AdjustmentListener(接

64、口)nvoid adjustmentValueChanged(AdjustmentEvent e)73Java语言程序设计(下)使用下列列表的例子import java.awt.*;import java.awt.event.*;import java.applet.*;public class Exam5_8 extends Applet implements ItemListener Choice cho; TextField text;public void init() text = new TextField(10);cho = new Choice();cho.add(“red”)

65、;cho.add(“yellow”);cho.add(“green”);cho.add(“blue”);add(cho);add(text);cho.addItemListener(this);public void itemStateChanged(ItemEvent e) if(e.getItemSelectable() = cho) String s = cho.getSelectedItem(); text.setText(s);74Java语言程序设计(下)使用下列列表例子75Java语言程序设计(下)画布n画布(Canvas)n创建画布npublic Canvas()n常用方法np

66、ublic void setSize()npublic void paint(Graphics g)n事件响应njava.awt.event.MouseMotionListener(接口)njava.awt.event.MouseListener(接口)njava.awt.event.KeyListener(接口)76Java语言程序设计(下)1.概述2.事件处理3.基本控制组件4.布局设计5.常用容器组件第五章图形用户界面设计77Java语言程序设计(下)布局管理n决定组件在界面中所处的位置和大小 n六种布局管理器(Layout Manager)n两种简单布局njava.awt.FlowLa

67、yout (JDK 1.0)njava.awt.GridLayout (JDK 1.0)n两种特定用途布局njava.awt.BorderLayout (JDK 1.0)njava.awt.CardLayout (JDK 1.0)n两种灵活布局njava.awt.GridBagLayout (JDK 1.0)njavax.swing.BoxLayout78Java语言程序设计(下)布局管理nFlowLayout (java.awt.FlowLayout)n所有组件从左往右排成一行n 一行排满后转到下一行从左往右排n居中、左对齐、右对齐importjava.awt.*;importjavax.s

68、wing.*;publicclassFlowWindowextendsJFramepublicFlowWindow()ContainercontentPane=getContentPane();contentPane.setLayout(newFlowLayout();contentPane.add(newJButton(Button1);contentPane.add(newJButton(2);contentPane.add(newJButton(Button3);contentPane.add(newJButton(Long-NamedButton4);contentPane.add(n

69、ewJButton(Button5);publicstaticvoidmain(Stringargs)FlowWindowwin=newFlowWindow();win.setTitle(FlowLayout);win.pack();win.setVisible(true);publicvoidpack()CausesthisWindowtobesizedtofittheperferredsizeandlayoutsofitssubcomponents79Java语言程序设计(下)布局管理nGridLayout (java.awt.GridLayout)n将空间划分为由行和列组成的网格单元,每

70、个单元放一个组件,网格单元大小相同(宽度和高度)n指定行数和列数importjava.awt.*;importjavax.swing.*;publicclassGridWindowextendsJFramepublicGridWindow()ContainercontentPane=getContentPane();contentPane.setLayout(newGridLayout(0,2);contentPane.add(newJButton(Button1);contentPane.add(newJButton(2);contentPane.add(newJButton(Button3

71、);contentPane.add(newJButton(Long-NamedButton4);contentPane.add(newJButton(Button5);publicstaticvoidmain(Stringargs)GridWindowwin=newGridWindow();win.setTitle(FlowLayout);win.pack();win.setVisible(true);publicGridLayout(introws,intcols)rowsandcolscanbezero,whichmeansthatanynumberofobjectscanbeplaced

72、inaroworinacolumn80Java语言程序设计(下)布局管理nBorderLayout (java.awt.BorderLayout)nBorderLayout is the default layout manager for every content pane n上北、下南、左西、右东、中ContainercontentPane=getContentPane();/contentPane.setLayout(newBorderLayout();contentPane.add(newJButton(Button1(NORTH),BorderLayout.NORTH);conte

73、ntPane.add(newJButton(2(CENTER),BorderLayout.CENTER);contentPane.add(newJButton(Button3(WEST),BorderLayout.WEST);contentPane.add(newJButton(Long-NamedButton4(SOUTH),BorderLayout.SOUTH);contentPane.add(newJButton(Button5(EAST),BorderLayout.EAST);81Java语言程序设计(下)布局管理nCardLayout (java.awt.CardLayout)n两个

74、或多个组件共享相同的显示空间,在不同的时间显示不同的组件82Java语言程序设计(下)布局管理nGridBagLayout (java.awt.GridBagLayout)n最精细、最灵活的布局管理n将空间划分为由行和列组成的网格单元,每个单元放一个组件,网格单元大小可以不同(宽度和高度)83Java语言程序设计(下)布局管理nBoxLayout (javax.swing.BoxLayout)n将组件放在一行或一列JPaneljpv=newJPanel();jpv.setLayout(newBoxLayout(jpv,BoxLayout.Y_AXIS);for(inti=0;i5;i+)jpv

75、.add(newJButton(+i);JPaneljph=newJPanel();jph.setLayout(newBoxLayout(jph,BoxLayout.X_AXIS);for(inti=0;i5;i+)jph.add(newJButton(+i);Containercp=getContentPane();cp.add(BorderLayout.EAST,jpv);cp.add(BorderLayout.SOUTH,jph);容器的嵌套(面板的嵌套,相互包含)84Java语言程序设计(下)第五章图形用户界面设计1.概述2.事件处理3.基本控制组件4.布局设计5.常用容器组件85Ja

76、va语言程序设计(下)概述n容器n可包含其他组件和容器nContainer类的子类n无边框容器: Panel, Appletn有边框容器: Window, Frame, Dialog, FieldDialogn可自动处理滚动操作的容器: Scrollpane ContainerScrollPaneFramePanelWindowDialogApplet86Java语言程序设计(下)容器n常用方法n添加组件: add()n获取制定的组件ngetComponent(int x, int y)ngetComponent(int index)n从容器中移出组件nremove(Component c)n

77、remove(int index)nremoveAll()n设置容器布局: setLayout()87Java语言程序设计(下)容器n面板(Panel)n无边框容器n顺序布局(FlowLayout)nApplet子类88Java语言程序设计(下)窗口和菜单njava.awt.Window: 最顶层容器nWindow(Frame f)nshow()nBorderLayout布局njava.awt.Frame: 有边框容器n构造方法nFrame()nFrame(String title)nBorderLayout布局n常用方法ngetTitle()nsetTitle(String s)nsetVi

78、sible(boolean b)nsetBounds(int a, int b, int width, int height)nsetBackground(Color c)npack()nsetSize(int width, int height)ndispose()nadd()nremove()89Java语言程序设计(下)使用Frame容器的例子import java.awt.*;import java.awt.event.*;public class Exam5_18 public static void main(String args) MyFrame mf = new MyFram

79、e();class MyFrame extends Frame implements ActionListener, MouseListener, WindowListener Button but;String str;String mouseClickCnt = “单击单击”;Dimension currentPos = new Dimension();int clickCnt = 0;MyFrame() super(“我制作的窗口我制作的窗口”);but = new Button(“按钮按钮”);setLayout(new FlowLayout();add(but);but.addAct

80、ionListener(this);addMouseListener(this);addWindowListener(this);pack();show();90Java语言程序设计(下)使用Frame容器的例子public void paint(Graphics g) str = “单击了单击了” + clickCnt + “次按钮次按钮”;g.drawString(str, 10 ,40);g.drawString(“鼠标鼠标” + mouseClickCnt + “位置位置:(” + currentPos.width + “,” + currentPos.height + “)”, 10

81、, 70);public void actionPerformed(ActionEvent e) if(e.getSource() = but) clickCnt +; repaint();public void mouseClicked(MouseEvent e) currentPos.width = e.getX();currentPos.height = e.getY();if(e.getClickCount() = 1) mouseClickCnt = “单击单击”;else mouseClickCnt = “双击双击”;repaint();91Java语言程序设计(下)使用Frame

82、容器的例子public void mousePressed(MouseEvent e) ; public void mouseReleased(MouseEvent e) ; public void mouseEntered(MouseEvent e) ; public void mouseExited(MouseEvent e) ; public void windowClosing(WindowEvent e) dispose(); System.exit(0);public void windowOpened(WindowEvent e) ; public void windowClos

83、ed(WindowEvent e) ; public void windowIconified(WindowEvent e) ; public void windowDeiconified(WindowEvent e) ; public void windowActivated(WindowEvent e) ; public void windowDeactivated(WindowEvent e) ; 92Java语言程序设计(下)菜单组件njava.awt.MenuBar类nMenuBar()nsetMenuBar(菜单对象)njava.awt.Menu类njava.awt.MenuIte

84、m类njava.awt.CheckboxMenuItem类njava.awt.PopupMenu类MenuComponentMenuBarCheckboxMenuItemPopupMenuMenuItem Menu93Java语言程序设计(下)使用菜单组件的例子import java.awt.*;import java.awt.event.*;public class Exam5_19 extends Frame implements ActionListener, ItemListener TextField text;public Exam5_19() super(“我的菜单窗口我的菜单窗

85、口”);setSize(300, 200);public void init() MenuBar myB = new MenuBar();setMenuBar(myB);Menu m1 = new Menu(“文件文件”);m1.add(new MenuItem(“打开打开”);MenuItem m11 = new MenuItem(“保存保存”);m11.setEnabled(false);m1.add(m11);m1.addSeparator();m1.add(“退出退出”);m1.addActionListener(this);myB.add(m1);94Java语言程序设计(下)使用菜

86、单组件的例子Menu m2 = new Menu(“编辑编辑”);m2.add(“复制复制”);Menu m21 = new Menu(“颜色颜色”);m21.add(“前景色前景色”);m21.add(“背景色背景色”);m21.addActionListener(this);m2.add(m21);m2.addSeparator();CheckboxMenuItem mycmi = new CheckboxMenuItem(“全选全选”);mycmi.addItemListener(this);m2.add(mycmi);m2.addActionListener(this);myB.add

87、(m2);Menu m3 = new Menu(“帮助帮助”);m3.add(“关于关于”);m3.addActionListener(this);myB.setHelpMenu(m3);text = new TextField();add(“South”, text);95Java语言程序设计(下)使用菜单组件的例子public static void main(String args) Exam5_19 myMenu = new Exam5_19();myMenu.init();myMenu.setVisible(true);public void itemStateChanged(Ite

88、mEvent e) text.setText(“状态改变状态改变”);public void actionPerformed(ActionEvent e) text.setText(e.getActionCommand();if (e.getActionCommand() = “退出退出”) System.exit(0);96Java语言程序设计(下)对话框njava.awt.Dialog类n有边框和标题,可对立使用的容器nDialog(Frame f)nDialog(Frame f, boolean b)nDialog(Frame f, String s)nDialog(Frame f, S

89、tring s, boolean b)nsetTitle()/getTitle()nsetModal()/setSize()/setVisible()n操作步骤n创建一个窗口类n创建一个对话框类n设置对话框大小n创建主类,启动和初始化窗口和对话框类97Java语言程序设计(下)对话框njava.awt.类nDialog类的子类n构造方法n(Frame f)n(Frame f, String s)n(Frame f, String s, int m)n常用方法ngetDirectory()nsetDirectory()nsetFile()98Java语言程序设计(下)关于Swing的设计99Ja

90、va语言程序设计(下)界面设计n设计流程1.顶层容器nJFrame对象主窗口nJDialog对象二级窗口nJApplet对象applet程序在浏览器窗口中的显示区域2.内容面板nJFrame f = new JFrame(“Swing1);JLabel label = new JLabel(Hello!);f.getContentPane().add(label);n面板的嵌套 (面板包含面板)n设计布局3.在内容面板中添加组件100Java语言程序设计(下)界面设计Frame内容面板内容面板内容面板TextFieldSliderComboxTextFieldSliderCombox101Ja

91、va语言程序设计(下)界面设计102Java语言程序设计(下)应用实例n应用实例菜单的构造JMenuBarmenuBar;JMenumenu,submenu;JMenuItemmenuItem;JCheckBoxMenuItemcbMenuItem;JRadioButtonMenuItemrbMenuItem;menuBar=newJMenuBar();menu=newJMenu(AMenu);menuBar.add(menu);menuItem=newJMenuItem(Atext-onlymenuitem);menu.add(menuItem);menuItem=newJMenuItem(

92、Bothtextandicon,newImageIcon(images/middle.gif);menu.add(menuItem);menuItem=newJMenuItem(newImageIcon(images/middle.gif);menu.add(menuItem);menu.addSeparator();ButtonGroupgroup=newButtonGroup();rbMenuItem=newJRadioButtonMenuItem(Aradiobuttonmenuitem);rbMenuItem.setSelected(true);group.add(rbMenuItem

93、);menu.add(rbMenuItem);rbMenuItem=newJRadioButtonMenuItem(Anotherone);group.add(rbMenuItem);menu.add(rbMenuItem);menu.addSeparator();cbMenuItem=newJCheckBoxMenuItem(Acheckboxmenuitem);menu.add(cbMenuItem);cbMenuItem=newJCheckBoxMenuItem(Anotherone);menu.add(cbMenuItem);menu.addSeparator();submenu=ne

94、wJMenu(Asubmenu);menuItem=newJMenuItem(Aniteminthesubmenu);submenu.add(menuItem);menuItem=newJMenuItem(Anotheritem);submenu.add(menuItem);menu.add(submenu);menu=newJMenu(AnotherMenu);menuBar.add(menu);103Java语言程序设计(下)应用实例n应用实例绘图(java.awt.Graphics类)importjava.awt.*;importjava.applet.Applet;publicclas

95、sDrawGraphextendsAppletpublicvoidpaint(Graphicsg)g.drawLine(30,5,40,5);g.drawRect(40,10,50,20);g.fillRect(60,30,70,40);g.drawRoundRect(110,10,130,50,30,30);g.drawOval(150,120,70,40);g.fillOval(190,160,70,40);g.drawString(Hello,100,200);intx=30,50,65,119,127;inty=100,140,127,169,201;g.drawPolygon(x,y

96、,5);104Java语言程序设计(下)第五章结束!105Java语言程序设计(下)1.异常和异常类2.异常处理3.创建异常第六章异常处理106Java语言程序设计(下)n软件程序肯定会发生错误/问题nwhat really matters is what happens after the error occurs. How is the error handled? Who handles it? Can the program recover, or should it just die? n从外部问题(硬盘、网络故障等)到编程错误(数组越界、引用空对象等)n致命错误n内存空间不足等错误

97、(Error)导致程序异常中断n程序不能简单地恢复执行n非致命错误n数组越界等异常(Exception)导致程序中断执行n程序在修正后可恢复执行异常(Exception)107Java语言程序设计(下)nJava语言中已定义或用户定义的某个异常类的对象n一个异常类代表一种异常事件nJava语言利用异常来使程序获得处理错误的能力(error-handling) n异常事件(Exceptional Event)nAn exception is an event that occurs during the execution of a program that disrupts the norma

98、l flow of instructions. 异常108Java语言程序设计(下)nJava语言中用来处理异常的类n异常类的方法n构造方法npublic Exception()npublic Exception(String s)n常用方法npublic String toString()npublic String getMessage()npublic void printStackTrace()异常类109Java语言程序设计(下)n对异常的定义nJava语言中定义的异常类: IOException/NullPointerExceptionn详细定义见Java文档中各个包的Except

99、ion Summaryn用户定义自已所需的异常类,描述程序中出现的异常结果第10讲异常(Exception)classjava.lang.Throwableclassjava.lang.Error(严重的问题,但不需程序捕捉的错误)classjava.lang.LinkageError.classjava.lang.VirtualMachineErrorclassjava.lang.InternalErrorclassjava.lang.OutOfMemoryError.classjava.lang.Exception(程序应该捕捉的错误)classjava.lang.ClassNotFoun

100、dExceptionclassjava.lang.RuntimeException(JVM正常运行时抛出的错误)classjava.lang.ArithmeticException.classjava.io.IOExceptionclassjava.awt.AWTExceptionclassjava.sql.SQLException.110Java语言程序设计(下)1.异常和异常类2.异常处理3.创建异常第六章异常处理111Java语言程序设计(下)n当一个Java程序的方法产生一个错误,该方法创造一个异常对象并将其交给运行系统nIn Java terminology, creating an

101、 exception object and handing it to the runtime system is called throwing an exception(抛出异常)n运行系统从错误发生处开始寻找处理错误的程序段nThe exception handler chosen is said to catch the exception(捕获异常)n捕获异常的过程可以沿方法调用的逆向顺序寻找异常处理112Java语言程序设计(下)n异常处理器(exception handler)ntryncatchnfinallyn异常的抛出(throw)异常处理113Java语言程序设计(下)n

102、何时会出现异常?n方法中已定义了异常的抛出异常处理importjava.io.IOException;classjex3_3publicstaticvoidmain(Stringargs)throwsIOExceptioncharc;System.out.println(Pleaseinputachar:);c=(char)System.in.read();System.out.println(Receivedchar=+c);publicabstractintread()throwsIOException在程序编译的时候必须完成异常的处理114Java语言程序设计(下)n由于非预期的结果导致

103、系统运行时产生异常异常处理classjex7_9publicstaticvoidmain(Stringargs)inta=0;intb=24/a;javajex7_9Exceptioninthreadmain“java.lang.ArithmeticException:/byzeroclassjex7_9publicstaticvoidmain(Stringargs)inti=Integer.parseInt(args0);System.out.println(i);javajex7_9Exceptioninthreadmain“java.lang.ArrayIndexOutOfBoundsE

104、xception:0javajex7_9aExceptioninthreadmain“java.lang.NumberFormatException:Forinputstring:“a”115Java语言程序设计(下)n异常处理器(exception handler)ntryncatchnfinally异常处理116Java语言程序设计(下)n异常处理器(exception handler)ntry程序块 n构造一个异常处理器,封装一些抛出异常的语句try Java 语句块; /指一个或多个抛出异常的Java语句异常(Exception)classTestpublicstaticvoidmai

105、n(Stringargs)charc=(char)System.in.read();System.out.println(c);importjava.io.IOException;classTestpublicstaticvoidmain(Stringargs)trycharc=(char)System.in.read();System.out.println(c);catch(IOExceptione)System.out.println(e);unreportedexceptionjava.io.IOException;mustbecaughtordeclaredtobethrowncha

106、rc=(char)System.in.read();一个try语句必须带有至少一个catch语句块或一个finally语句块117Java语言程序设计(下)n异常处理器(exception handler)ntry语句块定义了异常处理器的范围ncatch语句块捕捉try语句块抛出的异常try / Code that might generate exceptions catch(Type1 id1) / Handle exceptions of Type1 catch(Type2 id2) / Handle exceptions of Type2 catch(Type3 id3) / Hand

107、le exceptions of Type3/ etc .异常处理importjava.io.IOException;classTestpublicstaticvoidmain(Stringargs)trycharc=(char)System.in.read();System.out.println(c);catch(IOExceptione)System.out.println(e);try.catch(ArrayIndexOutOfBoundsExceptione)System.out.println(e);catch(IOExceptione)System.out.println(e);

108、118Java语言程序设计(下)n异常处理器(exception handler)nfinally语句块nTheres often some piece of code that you want to execute whether or not an exception is thrown within a try block.nfinally语句块在异常处理中是必须执行的语句块n清理现场n关闭打开的文件n关闭网络连接异常处理try/Theguardedregion:Dangerousactivities/thatmightthrowA,B,orCcatch(Aa1)/Handlerfor

109、situationAcatch(Bb1)/HandlerforsituationBcatch(Cc1)/HandlerforsituationCfinally/Activitiesthathappeneverytime119Java语言程序设计(下)n异常的抛出n在一个方法中,抛出异常,同时捕捉n当有多个方法调用时,由特定(适当)的方法捕捉异常n被调用的方法主动抛出异常(throws)异常处理importjava.io.IOException;classTeststaticchargetChar()throwsIOExceptioncharc=(char)System.in.read();re

110、turnc;publicstaticvoidmain(Stringargs)trycharc=getChar();System.out.println(c);catch(IOExceptione)System.out.println(e);120Java语言程序设计(下)n异常的抛出n主动抛出异常异常处理voidparseObj(Strings)throwsNullPointerExceptionif(s=null)thrownewNullPointerException();121Java语言程序设计(下)1.异常和异常类2.异常处理3.创建异常第六章异常处理122Java语言程序设计(下)

111、n使用Java语言已有的异常异常的抛出/捕捉n创建自已的异常异常的抛出/捕捉创建异常123Java语言程序设计(下)异常(Exception)classSimpleExceptionextendsExceptionpublicclassSimpleExceptionDemopublicvoidf()throwsSimpleExceptionSystem.out.println(ThrowSimpleExceptionfromf();thrownewSimpleException();publicstaticvoidmain(Stringargs)SimpleExceptionDemosed=n

112、ewSimpleExceptionDemo();trysed.f();catch(SimpleExceptione)System.out.println(e);System.out.println(Caughtit!);运行结果:ThrowSimpleExceptionfromf()SimpleExceptionCaughtit!124Java语言程序设计(下)n自定义异常n自定义异常类必须是java.lang.Exception类的子类njava.lang.Exception类的两个构造方法nExceptionException()Constructs a new exception wit

113、h null as its detail message.nExceptionException(Stringmessage) Constructs a new exception with the specified detail message.n自定义异常类可以不定义构造方法nSimpleException() super(); n自定义异常类定义自已的构造方法创建异常125Java语言程序设计(下)n定义自已的异常构造方法创建异常126Java语言程序设计(下)classMyExceptionextendsExceptionprivateintx;publicMyException()

114、publicMyException(Stringmsg)super(msg);publicMyException(Stringmsg,intx)super(msg);this.x=x; classExtraFeaturespublicstaticvoidf()throwsMyExceptionSystem.out.println(ThrowsMyExceptionfromf();thrownewMyException();publicstaticvoidg()throwsMyExceptionSystem.out.println(ThrowsMyExceptionfromg();throwne

115、wMyException(Originateding();publicstaticvoidh()throwsMyExceptionSystem.out.println(ThrowsMyExceptionfromh();thrownewMyException(Originatedinh(),47);tryf();catch(MyExceptione)System.out.println(e);ThrowingMyExceptionfromf()MyExceptiontryg();catch(MyExceptione)System.out.println(e);ThrowingMyExceptio

116、nfromg()MyException:Originateding()ThrowingMyExceptionfromh()MyException:Originatedinh()tryh();catch(MyExceptione)System.out.println(e);127Java语言程序设计(下)nQuiznQuestion: Is the following code legal?异常(Exception)try.finally.nAnswer:Yes,itslegal.Atrystatementdoesnothavetohaveacatchstatementifithasafinal

117、lystatement.Ifthecodeinthetrystatementhasmultipleexitpointsandnoassociatedcatchclauses,thecodeinthefinallystatementisexecutednomatterhowthetryblockisexited.128Java语言程序设计(下)nQuiznQuestion: What exceptions can be caught by the following handler? 异常(Exception)catch(Exceptione).nAnswer:Thishandlercatche

118、sexceptionsoftypeException;therefore,itcatchesanyexception.Thiscanbeapoorimplementationbecauseyouarelosingvaluableinformationaboutthetypeofexceptionbeingthrownandmakingyourcodelessefficient.Asaresult,theruntimesystemisforcedtodeterminethetypeofexceptionbeforeitcandecideonthebestrecoverystrategy.129J

119、ava语言程序设计(下)nQuiznQuestion: What exception types can be caught by the following handler? 异常(Exception).catch(Exceptione).catch(ArithmeticExceptiona).nAnswer:ThisfirsthandlercatchesexceptionsoftypeException;therefore,itcatchesanyexception,includingArithmeticException.Thesecondhandlercouldneverbereach

120、ed.Thiscodewillnotcompile.130Java语言程序设计(下)第六章结束!131Java语言程序设计(下)第七章线程1.概述2.线程的创建n两种方式3.线程的同步1.synchronized2.wait()/notifyAll()/notify()4.线程的生命周期132Java语言程序设计(下)概述n进程(Process)n程序(Program)的一次动态执行过程, 占用特定的地址空间n在某种程度上相互隔离的、独立运行的程序n多任务(Multitasking)操作系统将CPU时间动态地划分给每个进程,操作系统同时执行多个进程,每个进程独立运行n进程的查看nWindows

121、系统: Ctrl+Alt+DelnUnix系统:psortop133Java语言程序设计(下)概述n线程(Thread)n线程是进程中一个“单一的连续控制流程” (a single sequential flow of control)/执行路径n一个进程可拥有多个并行的(concurrent)线程n一个进程中的线程共享相同的内存单元/内存地址空间可以访问相同的变量和对象,而且它们从同一堆中分配对象通信、数据交换、同步操作n轻量级进程(lightweight process)134Java语言程序设计(下)概述nJava语言中的线程n大多数现代的操作系统都支持线程n第一个在语言本身中显性地包含

122、线程的主流编程语言,它没有把线程化看作是底层操作系统的工具n每个 Java 程序都至少有一个线程主线程n当一个 Java 程序启动时,JVM 会创建主线程,并在该线程中调用程序的main()方法nJVM还创建了其它线程,如垃圾收集(garbage collection)135Java语言程序设计(下)概述n多线程(MultiThreading)语言njava.lang.Thread类njava.lang.Runnable接口n为什么? (用途)nClient/Server设计中的服务器端, 如每个用户请求建立一个线程n图形用户界面(GUI)的设计中提高事件响应的灵敏度n从提高程序执行效率的考虑

123、n利用多处理器系统 n执行异步或后台处理等136Java语言程序设计(下)n初探线程publicclassSimpleThreadextendsThreadpublicSimpleThread(Stringstr)super(str);publicvoidrun()for(inti=0;i8;i+)System.out.println(i+getName();trysleep(long)(Math.random()*1000);catch(InterruptedExceptione)System.out.println(DONE!+getName();概述publicclassTwoThrea

124、dsDemopublicstaticvoidmain(Stringargs)newSimpleThread(Jamaica).start();newSimpleThread(Fiji).start();运行结果:0Jamaica0Fiji1Jamaica1Fiji2Jamaica2Fiji3Jamaica4Jamaica5Jamaica3Fiji6Jamaica7Jamaica4FijiDONE!Jamaica5Fiji6Fiji7FijiDONE!Fijijava.lang.Threadpublicstaticvoidsleep(longmillis)throwsInterruptedExc

125、eptionCausesthecurrentlyexecutingthreadtosleep(temporarilyceaseexecution)forthespecifiednumberofmilliseconds.137Java语言程序设计(下)第七章线程1.概述2.线程的创建n两种方式3.线程的同步1.synchronized2.wait()/notifyAll()/notify()4.线程的生命周期138Java语言程序设计(下)n线程创建的两种方式1.“Subclassing Thread and Overriding run” 继承java.lang.Thread类, 重写run(

126、)方法2.“Implementing the Runnable Interface” 实现java.lang.Runnable接口nRunnable接口的唯一方法npublic void run()线程的创建139Java语言程序设计(下)n再探线程线程的创建publicclassTwoThreadsDemopublicstaticvoidmain(Stringargs)newSimpleThread1(Jamaica).start();newSimpleThread1(Fiji).start();publicclassSimpleThread2implementsRunnableString

127、name;publicSimpleThread2(Stringstr)name=str;publicvoidrun()for(inti=0;i8;i+)System.out.println(i+name);tryThread.sleep(long)(Math.random()*1000);catch(InterruptedExceptione)System.out.println(DONE!+name);publicclassSimpleThread1extendsThreadpublicSimpleThread1(Stringstr)super(str);publicvoidrun()for

128、(inti=0;i8;i+)System.out.println(i+getName();trysleep(long)(Math.random()*1000);catch(InterruptedExceptione)System.out.println(DONE!+getName();publicclassTwoThreadsDemopublicstaticvoidmain(Stringargs)SimpleThread2a=newSimpleThread2(Jamaica); Threadthread1=newThread(a); thread1.start(); SimpleThread2

129、b=newSimpleThread2(Fiji);Threadthread2=newThread(b);thread2.start();java.lang.ThreadpublicThread(Stringname)publicThread(Runnabletarget)publicfinalStringgetName()publicstaticvoidsleep(longmillis)throwsInterruptedException140Java语言程序设计(下)n线程创建的两种方式1.“Subclassing Thread and Overriding run” 继承Thread类,

130、重写run()方法2.“Implementing the Runnable Interface” 实现Runnable接口n应用场合n当所定义的类为一个子类时,须利用Runnable接口线程的创建141Java语言程序设计(下)第七章线程1.概述2.线程的创建n两种方式3.线程的同步1.synchronized2.wait()/notifyAll()/notify()4.线程的生命周期142Java语言程序设计(下)n独立的(independent)、异步的(asynchronous) 线程n共享资源的访问n多个线程对同一资源进行操作(读/写)n当多个线程访问同一数据项(如静态字段、可全局访问

131、对象的实例字段或共享集合)时,需要确保它们协调了对数据的访问,这样它们都可以看到数据的一致视图,而且相互不会干扰另一方的更改nsynchronized 关键词nwait() / notify() / notifyAll() 方法线程的同步143Java语言程序设计(下)n线程同步-实例线程的同步publicclassCubbyHoleprivateintcontents;publicintget()returncontents;publicvoidput(intvalue)contents=value;publicclassProducerextendsThreadprivateCubbyHo

132、lecubbyhole;publicProducer(CubbyHolec)cubbyhole=c;publicvoidrun()for(inti=0;i10;i+)cubbyhole.put(i);System.out.println(Producer+put:+i);trysleep(int)(Math.random()*100);catch(InterruptedExceptione)publicclassConsumerextendsThreadprivateCubbyHolecubbyhole;publicConsumer(CubbyHolec)cubbyhole=c;publicv

133、oidrun()intvalue=0;for(inti=0;i10;i+)value=cubbyhole.get();System.out.println(Consumer“+got:+value);publicclassProducerConsumerTestpublicstaticvoidmain(Stringargs)CubbyHoleh=newCubbyHole();Producerp=newProducer(h);Consumerc=newConsumer(h);p.start();c.start();.Consumergot:3Producerput:4Producerput:5C

134、onsumergot:5.Producerput:4Consumergot:4Consumergot:4Producerput:5.144Java语言程序设计(下)1.给关键部分(Critical Section)加锁(lock)nCubbyHole对象nsynchronized 关键词the two threads must not simultaneously access the CubbyHole.nThe Java platform then associates a lock with every object that has synchronized code线程的同步publ

135、icclassCubbyHoleprivateintcontents;publicintget()returncontents;publicvoidput(intvalue)contents=value;publicclassCubbyHoleprivateintcontents;publicsynchronizedintget()returncontents;publicsynchronizedvoidput(intvalue)contents=value;145Java语言程序设计(下)2.线程的协调nthe two threads must do some simple coordina

136、tion. nProducer通过某种方式告诉Consumer在CubbyHole中有值,而 Consumer必须通过某种方式表示出CubbyHole中的值已被取走nCubbyHole对象 (Critical Section)njava.lang.Object类的方法nwait()、notify()、notifyAll()线程的同步146Java语言程序设计(下)线程的同步publicclassCubbyHoleprivateintcontents;publicintget()returncontents;publicvoidput(intvalue)contents=value;public

137、classCubbyHoleprivateintcontents;privatebooleanavailable=false;publicsynchronizedintget()while(available=false)trywait();/打开锁,等候Producer填值catch(InterruptedExceptione)available=false;notifyAll();returncontents;publicsynchronizedvoidput(intvalue)while(available=true)trywait();/打开锁,等候Consumer取值catch(In

138、terruptedExceptione)contents=value;available=true;notifyAll();java.lang.Objectpublicfinalvoidwait()throwsInterruptedExceptionpublicfinalvoidwait(longtimeout)throwsInterruptedExceptionpublicfinalvoidnotifyAll()/唤醒所有等待的线程publicfinalvoidnotify()/随机唤醒一个等待的线程ThewaitmethodrelinquishesthelockheldbytheConsu

139、merontheCubbyHole(therebyallowingtheProducertogetthelockandupdatetheCubbyHole)andthenwaitsfornotificationfromtheProducer.147Java语言程序设计(下)线程的同步publicclassCubbyHoleprivateintcontents;privatebooleanavailable=false;publicsynchronizedintget()while(available=false)trywait();/打开锁,等候Producer填值catch(Interrup

140、tedExceptione)available=false;notifyAll();returncontents;publicsynchronizedvoidput(intvalue)while(available=true)trywait();/打开锁,等候Consumer取值catch(InterruptedExceptione)contents=value;available=true;notifyAll();线程consumerget()判断当前是否存有值有没有设置为空唤醒producer取值释放锁定等待新值线程producerput()判断当前是否存有值有没有释放锁定等待取值放值设置

141、为有唤醒consumer148Java语言程序设计(下)第七章线程1.概述2.线程的创建n两种方式3.线程的同步1.synchronized2.wait()/notifyAll()/notify()4.线程的生命周期149Java语言程序设计(下)n线程启动1.new SimpleThread1(Jamaica).start(); class SimpleThread1 extends Thread 2.SimpleThread2 a = new SimpleThread2(Jamaica); Thread thread = new Thread(a); thread.start(); cla

142、ss SimpleThread2 implements Runnable n线程停止nA thread dies naturally when the run method exits.线程的生命周期publicvoidrun()inti=0;while(i100)i+;System.out.println(i=+i);150Java语言程序设计(下)n进一步的学习nStarvation (资源缺乏)nDeadlock (死锁)nThreadGroup (线程组) 同时对一组线程进行操作n优先权 (Priorities)nDaemon线程线程151Java语言程序设计(下)第七章结束!152J

143、ava语言程序设计(下)1.对数组对象的操作(Arrays)2.对象集合(Set)3.对象列表(List)4.对象映射(Map)5.对对象数组的操作(Collections)6.枚举(Enumeration)和迭代(Iterator)7.小结第八章集合操作153Java语言程序设计(下)njava.util.Arrays类nThis class contains various methods for manipulating arraysn排序(sorting)n搜索(searching)n填充(filling)对数组对象的操作(Arrays)154Java语言程序设计(下)n全部是静态方法

144、npublic static int binarySearch(byte a, byte key) Searches the specified array of bytes for the specified value using the binary search algorithm.npublic static boolean equals(byte a, byte a2) Returns true if the two specified arrays of bytes are equal to one another.npublic static void fill(byte a,

145、 byte val) Assigns the specified byte value to each element of the specified array of bytes. npublic static void fill(byte a, int fromIndex, int toIndex, byte val) Assigns the specified byte value to each element of the specified range of the specified array of bytes.npublic static void sort(byte a)

146、 Sorts the specified array of bytes into ascending numerical order.对数组对象的操作(Arrays)boolean,char,byte,short,int,long,double,floatObject155Java语言程序设计(下)对数组对象的操作(Arrays)importjava.util.Arrays;publicclassArrayDemo1publicstaticvoidmain(Stringargs)inta1=newint10;inta2=newint10;Arrays.fill(a1,47);Arrays.fi

147、ll(a2,47);System.out.println(Arrays.equals(a1,a2);a23=11;a22=9;System.out.println(Arrays.equals(a1,a2);Arrays.sort(a2);System.out.println(Arrays.binarySearch(a2,11);156Java语言程序设计(下)1.对数组对象的操作(Arrays)2.对象集合(Set)3.对象列表(List)4.对象映射(Map)5.对对象数组的操作(Collections)6.枚举(Enumeration)和迭代(Iterator)7.小结第八章集合操作157

148、Java语言程序设计(下)n数学上“集合”概念的抽象,无序nA Set is a collection that cannot contain duplicate elements. n集合与元素n集合之间n无序集合和有序集合对象集合(Set)158Java语言程序设计(下)njava.util.Set 接口 (集合与元素)npublicbooleanadd(Objecto)Addsthespecifiedelementtothissetifitisnotalreadypresent.npublicbooleanremove(Objecto)Removesthespecifiedelement

149、fromthissetifitispresent.npublicbooleancontains(Objecto)Returnstrueifthissetcontainsthespecifiedelement.npublicintsize()Returnsthenumberofelementsinthisset.对象集合(Set)159Java语言程序设计(下)njava.util.HashSet implement java.util.Setn无序集合对象集合(Set)importjava.util.*;publicclassSetDemo1publicstaticvoidmain(Strin

150、gargs)Sets=newHashSet();for(inti=0;iargs.length;i+)if(!s.add(argsi)System.out.println(Duplicate:+argsi);System.out.println(s.size()+distinctwords:+s);D:javaFindDups1icameisawileftDuplicate:iDuplicate:i4distinctwords:came,left,saw,iD:160Java语言程序设计(下)njava.util.Set接口 (集合之间)npublicbooleancontainsAll(Co

151、llectionc)Returnstrueifthissetcontainsalloftheelementsofthespecifiedcollection.npublicbooleanaddAll(Collectionc)Addsalloftheelementsinthespecifiedcollectiontothissetiftheyrenotalreadypresent.npublicbooleanremoveAll(Collectionc)Removesfromthissetallofitselementsthatarecontainedinthespecifiedcollectio

152、n.npublicbooleanretainAll(Collectionc)Retainsonlytheelementsinthissetthatarecontainedinthespecifiedcollection.对象集合(Set)161Java语言程序设计(下)njava.util.HashSet implement java.util.Set对象集合(Set)importjava.util.*;publicclassSetDemo2publicstaticvoidmain(Stringargs)Setuniques=newHashSet();Setdups=newHashSet();

153、for(inti=0;iargs.length;i+)if(!uniques.add(argsi)dups.add(argsi);uniques.removeAll(dups);System.out.println(Uniquewords:+uniques);System.out.println(Duplicatewords:+dups);D:javaFindDups2icameisawileftUniquewords:came,left,sawDuplicatewords:iD:162Java语言程序设计(下)nHashSet(无序集合)对象集合(Set)importjava.util.*;

154、publicclassSetDemo3publicstaticvoidmain(Stringargs)booleanb;Sets=newHashSet();b=s.add(string1);System.out.println(string1addreturns+b);b=s.add(string2);System.out.println(string2addreturns+b);b=s.add(string3);System.out.println(string3addreturns+b);b=s.add(string1);System.out.println(string1addretur

155、ns+b);b=s.add(string2);System.out.println(string2addreturns+b);Iteratori=s.iterator();while(i.hasNext()System.out.println(i.next();D:javaSetDemo3string1addreturnstruestring2addreturnstruestring3addreturnstruestring1addreturnsfalsestring2addreturnsfalsestring3string1string2D:java.util.Iterator迭代器(int

156、erface)轮循无序输出163Java语言程序设计(下)对象集合(Set)java.util.Set(interface)java.util.SortedSet(interface)java.util.HashSet(class)java.util.TreeSet(class)无序集合有序集合HashSet:SetimplementedviaahashtableTreeSet:SortedSetimplementedasatree164Java语言程序设计(下)njava.util.TreeSet implement java.util.SortedSet对象集合(Set)importjav

157、a.util.*;publicclassSetDemo4publicstaticvoidmain(Stringargs)booleanb;Sets=newTreeSet();b=s.add(string1);System.out.println(string1addreturns+b);b=s.add(string2);System.out.println(string2addreturns+b);b=s.add(string3);System.out.println(string3addreturns+b);b=s.add(string1);System.out.println(string

158、1addreturns+b);b=s.add(string2);System.out.println(string2addreturns+b);Iteratori=s.iterator();while(i.hasNext()System.out.println(i.next();D:javaSetDemo4string1addreturnstruestring2addreturnstruestring3addreturnstruestring1addreturnsfalsestring2addreturnsfalsestring1string2string3D:java.util.Iterat

159、or迭代器(interface)轮循有序输出(自然顺序)165Java语言程序设计(下)对象集合(Set)importjava.util.*;publicclassSetDemo5publicstaticvoidmain(Stringargs)Sets=newHashSet();s.add(37);s.add(newInteger(37);Iteratori=s.iterator();while(i.hasNext()System.out.println(i.next();createasetandaddtwoobjectstoit;theobjectsaredistinctbuthaveth

160、esamedisplayablestringD:javaSetDemo53737D:166Java语言程序设计(下)对象集合(Set)importjava.util.*;publicclassSetDemo6publicstaticvoidmain(Stringargs)Sets=newTreeSet();s.add(37);s.add(newInteger(37);Iteratori=s.iterator();while(i.hasNext()System.out.println(i.next();createaSortedSet,addtwoobjectstotheset;theobjec

161、tsarenotcomparableD:javaSetDemo6Exceptioninthreadmainjava.lang.ClassCastExceptionD:nTheexceptionisthrownbecauseanattemptismadetoordertheelementsoftheset.AStringobjecthasnorelationshiptoanIntegerobject,sotherelativeorderofthetwoobjectscannotbedetermined.167Java语言程序设计(下)1.对数组对象的操作(Arrays)2.对象集合(Set)3.

162、对象列表(List)4.对象映射(Map)5.对对象数组的操作(Collections)6.枚举(Enumeration)和迭代(Iterator)7.小结第八章集合操作168Java语言程序设计(下)n有序对象的集合nA List is an ordered collection (sometimes called a sequence). nLists can contain duplicate elements. nThe user can access elements by their integer index (position), and search for elements

163、 in the list.n方法操作n列表与元素n列表之间对象列表(List)169Java语言程序设计(下)njava.util.List 接口 (列表与元素)npublicvoidadd(intindex,Objectelement)Insertsthespecifiedelementatthespecifiedpositioninthislist.npublicObjectremove(intindex)Removestheelementatthespecifiedpositioninthislist.npublicbooleancontains(Objecto)Returnstruei

164、fthislistcontainsthespecifiedelement.npublicintindexOf(Objecto)Returnstheindexinthislistofthefirstoccurrenceofthespecifiedelement,or-1ifthislistdoesnotcontainthiselement.对象列表(List)170Java语言程序设计(下)njava.util.List 接口 (列表之间)npublicbooleanaddAll(Collectionc)Appendsalloftheelementsinthespecifiedcollectio

165、ntotheendofthislist.npublicbooleanremoveAll(Collectionc)Removesfromthislistalltheelementsthatarecontainedinthespecifiedcollection.npublicbooleancontainsAll(Collectionc)Returnstrueifthislistcontainsalloftheelementsofthespecifiedcollection.npublicbooleanretainAll(Collectionc)Retainsonlytheelementsinth

166、islistthatarecontainedinthespecifiedcollection.对象列表(List)171Java语言程序设计(下)njava.util.ArrayList implements java.util.Listimportjava.util.*;publicclassListDemo1publicstaticvoidmain(Stringargs)Listlist=newArrayList();for(inti=1;i=10;i+)list.add(i+*+i+=+i*i);Iteratoriter=list.iterator();while(iter.hasNex

167、t()System.out.println(iter.next();D:javaListDemo11*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100D:对象列表(List)172Java语言程序设计(下)对象列表(List)java.util.List(interface)java.util.AbstractSequentialList(class)java.util.AbstractList(class)java.util.LinkedList(class)java.util.ArrayList(class)ArrayLi

168、st:ListimplementedviaanarrayLinkedList:Listimplementedasalinkedstructure173Java语言程序设计(下)1.对数组对象的操作(Arrays)2.对象集合(Set)3.对象列表(List)4.对象映射(Map)5.对对象数组的操作(Collections)6.枚举(Enumeration)和迭代(Iterator)7.小结第八章集合操作174Java语言程序设计(下)nA Map is an object that maps keys to valuesnA map cannot contain duplicate keys

169、: Each key can map to at most one value.对象映射(Map)Key1(键)Value1(值)Key2(键)Value2(值)Keyn(键)Valuen(值)MapEntry 1Entry 2Entry n175Java语言程序设计(下)对象映射(Map)对象列表(List)java.util.Map(interface)java.util.AbstractMap(class)java.util.HashMap(class)HashMap:MapimplementedviaahashtableTreeMap:SortedMapimplementedasatr

170、eejava.util.TreeMap(class)176Java语言程序设计(下)对象映射(Map)publicinterfaceMap/基本操作Objectput(Objectkey,Objectvalue);Objectget(Objectkey);Objectremove(Objectkey);booleancontainsKey(Objectkey);booleancontainsValue(Objectvalue);intsize();booleanisEmpty();/批量操作voidputAll(Mapt);voidclear();/CollectionViewspublicS

171、etkeySet();publicCollectionvalues();publicSetentrySet();publicinterfaceEntryObjectgetKey();ObjectgetValue();ObjectsetValue(Objectvalue);njava.uitl.Map接口177Java语言程序设计(下)对象映射(Map)importjava.util.*;publicclassMapDemo1privatestaticfinalIntegerONE=newInteger(1);publicstaticvoidmain(Stringargs)Mapm=newHas

172、hMap();for(inti=0;ijavaTestAReceivednumber=3C:212Java语言程序设计(下)n文件读/写流程1.打开文件流2.条件判断3.读出/写入4.关闭文件流n两种类型文件n (字节流)n (字符流)文件读写操作213Java语言程序设计(下)1.字节流构造方法npublic (File file) throws npublic (String name) throws npublic pathname)npublic (File file) throws npublic (File file, boolean append) throws /是否向已存在的

173、文件后添加npublic (String name) throws npublic (String name, boolean append) throws 文件读写操作214Java语言程序设计(下)n文件读写-实例1文件读写操作importjava.io.*;publicclassCopyBytespublicstaticvoidmain(Stringargs)throwsIOExceptionFileinputFile=newFile(“original.txt);FileoutputFile=newFile(“result.txt);in=new(inputFile);out=new(

174、outputFile);intc;while(c=in.read()!=-1)out.write(c);in.close();out.close();publicintread()throwsIOExceptionpublicintread(byteb)throwsIOExceptionpublicintread(byteb,intoff,intlen)throwsIOExceptionin=new(“original.txt);out=new(“result.txt);publicvoidwrite(intb)throwsIOExceptionpublicvoidwrite(byteb)th

175、rowsIOExceptionpublicvoidwrite(byteb,intoff,intlen)throwsIOException215Java语言程序设计(下)2.字符流构造方法npublic (File file) throws npublic (String ) throws npublic pathname)npublic (File file) throws IOExceptionnpublic (File file, boolean append) throws IOExceptionnpublic (String ) throws IOExceptionnpublic (S

176、tring , boolean append) throws IOException文件读写操作216Java语言程序设计(下)n文件读写-实例2文件读写操作importjava.io.*;publicclassCopypublicstaticvoidmain(Stringargs)throwsIOExceptionFileinputFile=newFile(“original.txt);FileoutputFile=newFile(“result.txt);in=new(inputFile);out=new(outputFile);intc;while(c=in.read()!=-1)out

177、.write(c);in.close();out.close();in=new(“original.txt);out=new(“result.txt);publicintread()throwsIOExceptionpublicintread(charcbuf)throwsIOExceptionpublicintread(charcbuf,intoff,intlen)throwsIOExceptionpublicvoidwrite(intb)throwsIOExceptionpublicvoidwrite(charcbuf)throwsIOExceptionpublicvoidwrite(ch

178、arcbuf,intoff,intlen)throwsIOException217Java语言程序设计(下)n两类缓冲流n针对字节流njava.io.BufferedInputStream类njava.io.BufferedOutputStream类n针对字符流njava.io.BufferedReader类njava.io.BufferedWriter类如何提高文件读写效率218Java语言程序设计(下)n构造方法npublic BufferedInputStream(InputStream in) 2048 bytesnpublic BufferedInputStream(InputStr

179、eam in, int size)npublic BufferedOutputStream(OutputStream out) 512 bytesnpublic BufferedOutputStream(OutputStream out, int size)npublic BufferedReader(Reader in) 8192 bytesnpublic BufferedReader(Reader in, int sz)npublic BufferedWriter(Writer out) 8192 bytenpublic BufferedWriter(Writer out, int sz)

180、如何提高文件读写效率219Java语言程序设计(下)String=“test.txt”;fis=new();intcount=0;intc;while(c=fis.read()!=-1)if(c=A)count+;fis.close();System.out.println(count);n如何提高文件读写效率-实例1如何提高文件读写效率String=“test.txt”;fis=new();BufferedInputStreambis=newBufferedInputStream(fis);intcount=0;intc;while(c=bis.read()!=-1)if(c=A)count

181、+;fis.close();System.out.println(count);fis=new(“test.txt”);intcount=0;finalintBUFSIZE=1024;bytebuf=newbyteBUFSIZE;intlen;while(len=fis.read(buf)!=-1)for(inti=0;ilen;i+)if(bufi=A)count+;fis.close();220Java语言程序设计(下)String=“test.txt”;fr=new();BufferedReaderbr=newBufferedReader(fr);intcount=0;while(br.

182、readLine()!=null)count+;br.close();System.out.println(count);n如何提高文件读写效率-实例2如何提高文件读写效率221Java语言程序设计(下)n概述流的包装(wrap)fr=new();BufferedReaderbr=newBufferedReader(fr);BufferedReaderbr=newBufferedReader(new();PrintWriterout=newPrintWriter(newBufferedWriter(new();publicStringreadLine()injava.io.BufferedRe

183、aderpublicvoidprintln(Stringx)injava.io.PrintWritern利用不同流的特点(方法)n寻找合适的方法完成特定的需求n对已有的流进行再处理222Java语言程序设计(下)n流的种类n节点流n直接对数据源进行读/写操作的流n处理流n对一个已有的流进行某种操作的流流的包装(wrap)223Java语言程序设计(下)n节点流n, PipedInputStream, ByteArrayInputStream, StringBufferInputStreamn, PipedOutputStream, ByteArrayOutputStreamnCharArray

184、Reader, , PipedReader, StringReadernCharArrayWriter, , PipedWriter, StringWriter流的包装(wrap)224Java语言程序设计(下)n处理流nFilterOutputStream, DataOutputStream, BufferedOutputStream, PrintStreamnFilterInputStream, LineNumberInputStream, DataInputStream, BufferedInputStream, PushbackInputStreamnBufferedReader, L

185、ineNumberReader, InputStreamReader, FilterReader, PushBackReadernBufferedWriter, OutputStreamReader, FilterWriter, PrintWriter流的包装(wrap)225Java语言程序设计(下)n一个实例njava.io.npublic (File file) throws npublic (String ) throws njava.io.BufferedReadernpublic BufferedReader(Reader in) 8192 bytesnpublic Buffere

186、dReader(Reader in, int sz)n流的包装改变了流的行为流的包装(wrap)226Java语言程序设计(下)n流的包装(wrap)-实例1流的包装(wrap)importjava.io.*;publicclassEchopublicstaticvoidmain(Stringargs)throwsIOExceptionBufferedReaderin=newBufferedReader(newInputStreamReader(System.in); Strings;while(s=in.readLine().length()!=0)System.out.println(s)

187、;publicstaticfinalInputStreamin(java.lang.System)publicInputStreamReader(InputStreamin)publicBufferedReader(Readerin)程序如何结束(跳出while循环)?227Java语言程序设计(下)n概述njava.io.DataInputStream类npublic DataInputStream(InputStream in)npublic final boolean readBoolean()npublic final byte readByte()npublic final char

188、 readChar()npublic final int readInt()njava.io.DataOutputStream类npublic DataOutputStream(OutputStream out)npublic final void writeBoolean(boolean v)npublic final void writeByte(int v)npublic final void writeChar(int v)npublic final void writeInt(int v)基本数据转换流228Java语言程序设计(下)DataOutputStreamout=newDa

189、taOutputStream(new(invoice1.txt);doubleprices=19.99,9.99;intunits=12,8;Stringdescs=JavaT-shirt,JavaMug;for(inti=0;iprices.length;i+)out.writeDouble(pricesi);out.writeChar(t);out.writeInt(unitsi);out.writeChar(t);out.writeChars(descsi);out.writeChar(n);out.close();n基本数据转换流-实例基本数据转换流DataInputStreamin=

190、newDataInputStream(new(invoice1.txt);doubletotal;trywhile(true)doubleprice=in.readDouble();in.readChar();intunit=in.readInt();in.readChar();charchr;StringBufferdesc=newStringBuffer(20);while(chr=in.readChar()!=n)desc.append(chr);System.out.println(Youveordered+unit+unitsof+desc+at$+price);total=tota

191、l+unit*price;catch(EOFExceptione)System.out.println(ForaTOTALof:$+total);in.close();19.9912JavaT-shirt9.998JavaMug229Java语言程序设计(下)n概述njava.io.File类: 文件和目录的路径名n构造方法npublic pathname)npublic parent, String child)npublic parent, String child)nparent通常表示一个目录, child则表示一个目录或文件n路径名(pathname)nUNIX平台上绝对路径的前缀“

192、/”,相对路径无前缀,例“/etc/inetd.conf”、“inetd.conf”nWindows平台,绝对路径名的前缀由“盘符:”组成;UNC 路径名前缀为“”,然后是主机名和共享名,相对路径名无盘符,例“c:windowsnotepad.exe”、“notepad.exe”目录管理230Java语言程序设计(下)n方法npublic boolean canWrite()/canRead()npublic boolean exists()npublic boolean delete() 删除文件或目录,若删除目录,要求该目录必须为空npublic boolean createNewFile

193、() 创建一个空文件,当且仅当该文件不存在npublic boolean isDirectory()/isFile()/isHidden()npublic long lastModified()/public boolean setLastModified(long time)npublic String list() 得到当前目录下的所有文件名和目录名,若该File对象不是表示目录,则返回nullnpublic boolean mkdir()/mkdirs() 创建一个目录npublic boolean renameTo(File dest)npublic boolean setReadOn

194、ly()目录管理231Java语言程序设计(下)n目录管理方法举例目录管理importjava.io.File;publicclassDirListpublicstaticvoidmain(Stringargs)=newFile(.);Stringlist=path.list();for(inti=0;ilist.length;i+)System.out.println(listi);232Java语言程序设计(下)n目录管理方法举例目录管理importjava.io.File;importjava.io.;publicclassDirListpublicstaticvoidmain(Stri

195、ngargs)=newFile(.);Stringlist=path.list(newDirFilter(args0);for(inti=0;ilist.length;i+)System.out.println(listi);classDirFilterimplements Stringkey; DirFilter(Stringkey)this.key=key; publicbooleanaccept(Filedir,Stringname)Stringf=new).getName();returnf.indexOf(key)!=-1;java.util.接口publicbooleanaccep

196、t(Filedir,Stringname);/是否指定的文件应包含在文件列表中publicStringgetName()injava.io.File/获得文件或目录名,仅仅是最后的部分233Java语言程序设计(下)n随机访问文件(Random Access File)njava.io.RandomAccessFile类n读写操作在同一个类中完成,须在构造对象时指定参数n通过移动文件指针()在文件的指定位置进行读写操作n构造方法npublic RandomAccess name, String mode) throws npublic RandomAccess file, String mod

197、e) throws nmode: “r”, “rw”随机访问文件234Java语言程序设计(下)n方法npublic void seek(long pos) npublic int read()npublic int read(byte b)npublic int read(byte b, int off, int len)npublic final boolean readBoolean()/readByte()/readChar()/readShort()/readInt()/readDouble()/readFloat()npublic final String readLine()np

198、ublic void write(int b)npublic void write(byte b)npublic void write(byte b, int off, int len)npublic final void writeBoolean()/writeByte()/writeChar()/writeShort()/writeInt()/writeDouble()/writeFloat()随机访问文件235Java语言程序设计(下)n随机访问文件(Random Access File)-实例随机访问文件RandomAccessFilerf=newRandomAccessFile(rt

199、est.dat,rw);for(inti=0;i10;i+)rf.writeDouble(i*1.414);rf.close();rf=newRandomAccessFile(rtest.dat,rw);rf.seek(5*8);rf.writeDouble(47.0001);rf.close();rf=newRandomAccessFile(rtest.dat,r);for(inti=0;i10;i+)System.out.println(Value+i+:+rf.readDouble();rf.close();运行结果:Value0:0.0Value1:1.414Value2:2.828V

200、alue3:4.242Value4:5.656Value5:47.0001Value6:8.484Value7:9.898Value8:11.312Value9:12.725999999999999236Java语言程序设计(下)n文件的特性n读和写的权限n文件长度n修改时间n是否是目录njava.io.File类n设定文件属性n查询文件属性文件属性237Java语言程序设计(下)文件属性n获取文件路径importjava.io.*;classAttrDemo1publicstaticvoidmain(Stringargs)throwsIOExceptionFiletestfile=newFi

201、le(.+testfile1);testfile.createNewFile();System.out.println(name=+testfile.getName();System.out.println(path=+testfile.getPath();System.out.println(absolutepath=+testfile.getAbsolutePath();System.out.println(canonicalpath=+testfile.getCanonicalPath();238Java语言程序设计(下)文件属性n获取文件修改时间importjava.io.*;impo

202、rtjava.util.*;publicclassAttrDemo2publicstaticvoidmain(Stringargs)throwsIOException Filetestfile=newFile(testfile2);test();test();longmodtime=test();System.out.println(lastmodificationtime#1=+newDate(modtime);test(0);modtime=test();System.out.println(lastmodificationtime#2=+newDate(modtime);239Java语

203、言程序设计(下)文件属性n获取和设定文件长度importjava.io.*;publicclassAttrDemo3publicstaticvoidmain(Stringargs)throwsIOExceptionFiletestfile=newFile(testfile3);test();test();System.out.println(length#1=+test();RandomAccessFileraf=newRandomAccessFile(testfile3,rw);raf.setLength(100);raf.close();System.out.println(length#

204、2=+test();240Java语言程序设计(下)文件属性n设置读写权限importjava.io.*;publicclassAttrDemo4publicstaticvoidmain(Stringargs)throwsIOExceptionFiletestfile=newFile(testfile4);test();test();if(test()System.out.println(filecanberead#1);if(test()System.out.println(filecanbewritten#1);test();if(test()System.out.println(file

205、canberead#2);if(test()System.out.println(bewritten#2);241Java语言程序设计(下)第九章结束!242Java语言程序设计(下)1.概述2.URL应用3.Socket应用4.UDP数据报第十章Java网络编程243Java语言程序设计(下)概述nThe Java platform is highly regarded in part because of its suitability for writing programs that use and interact with the resources on the Internet

206、 and the World Wide Web. 244Java语言程序设计(下)概述1.AppletnApplet程序嵌在HTML文件中,通过网络下载Applet程序代码,在本地Java-enabled browser 中执行2.HTTPn通过URL类获取服务器端的HTML文件3.Socket(套接字)n实现Client/Server结构的应用4.JDBC (Java Database Connectivity)n通过网络访问关系型数据库nOracle, MS SQL, Sybase5.Servlet/JSP (Java Server Page)nWEB服务器端的动态编程245Java语言程

207、序设计(下)概述n网络基础-TCP/IP协议簇n网络层(Network Layer)nInternet Protocol (IP), nIP地址, 32比特n传输层(Transport Layer)n传输控制协议(TCP: Transport Control Protocol)n用户数据报协议(UDP: User Datagram Protocol)n端口(Port, 16比特, 065535)n应用层(Application Layer)nHTTP, FTP, SMTP, POP3, Telnet, DNS TCPorUDPPort应用PortPortPortPort 数据1应用应用应用Po

208、rt 数据2主机246Java语言程序设计(下)概述nJava语言中基本网络类nPackage .URL.URLC.S.ServerS.DatagramP.DatagramS.MulticastSocket247Java语言程序设计(下)1.概述2.URL应用3.Socket应用4.UDP数据报第十章Java网络编程248Java语言程序设计(下)URL应用n什么是URL?n统一资源定位符(Uniform Resource Locator)na reference (an address, a pointer) to a resource on the I:/协议标识符资源名(主机名,端口号,

209、文件名)http:/ftp/pub/:/249Java语言程序设计(下)URL应用.URL类n构造方法npublic URL(String spec) throws MalformedURLExceptionnpublic URL(String protocol, String host, String file) throws MalformedURLExceptionnpublic URL(String protocol, String host, int port, String file) throws MalformedURLExceptionn n实例方法npublic final

210、 InputStream openStream() throws IOExceptionnOpens a connection to this URL and returns an InputStream for reading from that connectionnpublic URLConnection openConnection() throws IOExceptionnReturns a URLConnection object that represents a connection to the remote object referred to by the URL 250

211、Java语言程序设计(下)URL应用.URL类-示例1.“http:/”nnew URL();2.http:/nnew URL();nnew URL(http, , /academic/index.html);nnew URL(http, , 80, “/academic/index.html);251Java语言程序设计(下)URL应用n实例.*;importjava.io.*;publicclassURLReaderpublicstaticvoidmain(Stringargs)throwsExceptionURLpku=newURL();BufferedReaderin=newBuffe

212、redReader(newInputStreamReader(pku.openStream();StringinputLine;while(inputLine=in.readLine()!=null)System.out.println(inputLine);in.close();.URL类publicfinalInputStreamopenStream()throwsIOException252Java语言程序设计(下)URL应用.URL类-实例2StringBufferdocument=newStringBuffer();StringurlString=“http:/”;tryURLurl

213、=newURL(urlString);URLConnectionconn=url.openConnection();BufferedReaderreader=newBufferedReader(newInputStreamReader(conn.getInputStream();Stringline=null;while(line=reader.readLine()!=null)document.append(line+“n”);reader.close();catch(MalformedURLExceptione)System.out.println(“Unabletoconnectiont

214、oURL:”+urlString);catch(IOExceptione)System.out.println(“IOExceptionwhenconnectedtoURL:”+urlString);System.out.println(document.toString();.URL类openStream()isashorthandforopenConnection().getInputStream()253Java语言程序设计(下)URL应用.URL类n操作流程1.用所要连接资源的有效 URL实例化一个 URL对象(如有问题则抛出 MalformedURLException)2.打开该 U

215、RL对象上的一个连接 3.把该连接的 InputStream 包装进 BufferedReader 以便能按行读取4.用 BufferedReader 读文档5.关闭 BufferedReader (关闭该URL)254Java语言程序设计(下)1.概述2.URL应用3.Socket应用4.UDP数据报第十章Java网络编程255Java语言程序设计(下)Socket应用nTCP协议n从功能上来讲,建立一个可靠的、端到端的通信连接n操作系统实现了TCP协议的内容nSocket(套接字)n代表了TCP所定义的双向通信连接的一个端点n通信双方(两台机器)n一个作为客户端,一个作为服务器端n客户/服

216、务器的本质区别n服务器方(Server)总在监听一个特定的端口n客户(Client)则向该端口发出连接请求nWindows系统TCP/UDP连接状态的监测nnetstat-a256Java语言程序设计(下)Socket应用.Socket类n表示TCP连接的客户方(Client),和谁连接n指定对方的IP地址和端口号npublicSocket(Stringhost,intport)throwsUnknownHostException,IOExceptionnSocket对象包括两个流nSocket代表了TCP所定义的双向通信连接的一个端点n输入流(读取通过网络进来的数据)npublicInput

217、StreamgetInputStream()throwsIOExceptionn输出流(将数据写入输出流中,并通过网络发送)npublicOutputStreamgetOutputStream()throwsIOExceptionn操作步骤1.先建立连接2.进行流的读写操作257Java语言程序设计(下)Socket应用n对客户端对Socket进行读写-实例ServerSocketLocalhostSocketOutputStreamInputStreamInputStreamOutputStream客户端服务器端258Java语言程序设计(下)Socket应用n对客户端对Socket进行读写

218、-实例.*;importjava.io.*;publicclassSimpleClientpublicstaticvoidmain(Stringargs)Sockets=newSocket(“”,5432);InputStreamin=s.getInputStream();DataInputStreamdis=newDataInputStream(in);Stringst=dis.readUTF();System.out.println(st);in.close();s.close();ServerSocketLocalhostSocketOutputStreamInputStreamInpu

219、tStreamOutputStream建立连接打开输入流读取输入流关闭输入流关闭连接259Java语言程序设计(下)Socket应用.ServerSocket类nTCP连接的服务器方(Server),监听端口n等待自客户端发来的连接npublicServerSocket(intport)throwsIOExceptionn接收连接请求npublicSocketaccept()throwsIOExceptionnListensforaconnectiontobemadetothissocketandacceptsit.Themethodblocks(阻塞)untilaconnectionisma

220、den服务器端通过所接收到的Socket对象和客户端通信nSocket代表了TCP所定义的双向通信连接的一个端点n操作步骤1.监听端口2.接收连接3.进行流的读写操作260Java语言程序设计(下)Socket应用n对ServerSocket的实现-实例ServerSocketLocalhostSocketOutputStreamInputStreamInputStreamOutputStream客户端服务器端261Java语言程序设计(下)Socket应用ServerSockets=null;Stringhello=“HelloWorld!”;trys=newServerSocket(543

221、2);catch(IOExceptione)System.out.println(e);System.exit(1);while(true)trySocketcs=s.accept();OutputStreamout=cs.getOutputStream();DataOutputStreamdos=newDataOutputStream(out);dos.writeUTF(hello);out.close();cs.close();catch(IOExceptione)System.out.println(e);ServerSocketLocalhostSocketOutputStreamIn

222、putStreamInputStreamOutputStream接收连接打开输出流写入输出流关闭输出流关闭连接监听端口262Java语言程序设计(下)Socket应用n客户端与服务器端的实现客户端服务器端263Java语言程序设计(下)Socket应用n多线程的服务器实现n为每个客户的连接(Socket)分配一个线程,让其独立处理n两种实现方式1.作为java.lang.Thread类的子类2.实现java.lang.Runnable接口Thread1ThreadnClient 1SocketPServerSocketClient nSocket123123264Java语言程序设计(下)So

223、cket应用n多线程的服务器实现-实例ServerSockets=newServerSocket(5432);booleanlistening=true;while(listening) newServerThread(s.accept().start();s.close();classServerThreadextendsThreadpublicvoidrun()265Java语言程序设计(下)1.概述2.URL应用3.Socket应用4.UDP数据报第十章Java网络编程266Java语言程序设计(下)UDP数据报应用n数据报(Datagram)n通过UDP协议发送数据报, 各个数据报是相

224、互独立, 数据报是否到达(可能丢失)、到达时间、到达顺序不能保证.DatagramPacketn构造一个要发送/接收的数据报对象.DatagramSocketn构造一个用于发送/接收数据报的socket对象.MulticastSocketn构造一个用于发送/接收组播数据报的socket对象267Java语言程序设计(下)UDP数据报应用n数据报(Datagram) 的收/发流程n发送1.构造用于发送的数据报对象(指定要发送的地址和端口号)npublic DatagramPacket(byte buf, int length, InetAddress address, int port)2.构造

225、用于发送数据报的socket对象npublic DatagramSocket() throws SocketException3.发送npublic void send(DatagramPacket p) throws IOExceptionn接收1.构造用于接收的数据报对象npublic DatagramPacket(byte buf, int length)2.构造用于接收数据报的socket对象npublic DatagramSocket(int port) throws SocketException3.接收npublic void receive(DatagramPacket p)

226、throws IOExceptionnThis method blocks until a datagram is received268Java语言程序设计(下)UDP数据报应用n数据报客户端的实现-实例DatagramSocketLocalhostDatagramSocketDatagrampacket客户端服务器端269Java语言程序设计(下)UDP数据报应用n数据报客户端的实现DatagramSocketsocket=newDatagramSocket();Strings=“hello”;bytebuf=s.getBytes();InetAddressaddress=InetAddr

227、ess.getByName(“”);DatagramPacketpacket=newDatagramPacket(buf,buf.length,address,6666);socket.send(packet);packet=newDatagramPacket(buf,buf.length);socket.receive(packet);Stringreceived=newString(packet.getData();System.out.println(“Received:+received);socket.close();DatagramSocketLocalhostDatagramSo

228、cketDatagrampacketpublicDatagramPacket(bytebuf,intlength,InetAddressaddress,intport)publicDatagramPacket(bytebuf,intlength)publicbytegetData()publicDatagramSocket()throwsSocketExceptionpublicvoidreceive(DatagramPacketp)throwsIOExceptionpublicvoidsend(DatagramPacketp)throwsIOException构造数据报Socket构造发送数

229、据报, 发送要发送的地址构造接收数据报关闭数据报Socket从数据报中获取数据接收数据报270Java语言程序设计(下)UDP数据报应用n数据报服务端的实现-实例DatagramSocketLocalhostDatagramSocketDatagrampacket客户端服务器端271Java语言程序设计(下)UDP数据报应用n数据报服务端的实现DatagramSocketsocket=newDatagramSocket(6666);bytebuf=newbyte256;DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.r

230、eceive(packet);Stringreceived=newString(packet.getData().trim();InetAddressaddress=packet.getAddress();intport=packet.getPort();packet=newDatagramPacket(buf,buf.length,address,port);socket.send(packet);socket.close();DatagramSocketLocalhostDatagramSocketDatagrampacketpublicDatagramPacket(bytebuf,int

231、length,InetAddressaddress,intport)publicDatagramPacket(bytebuf,intlength)publicbytegetData()publicInetAddressgetAddress()publicintgetPort()publicDatagramSocket(intport)throwsSocketExceptionpublicvoidreceive(DatagramPacketp)throwsIOExceptionpublicvoidsend(DatagramPacketp)throwsIOException构造数据报Socket,

232、监听端口构造发送数据报得到要发送的地址构造接收数据报关闭数据报Socket接收数据报接收到的字符串得到要发送的端口发送数据报272Java语言程序设计(下)UDP数据报应用n组播数据报(Multicast Datagram)n特定的IP地址(组播地址)n224.0.0.0 239.255.255.255n该IP地址作为组的标识n一个应用向一个组播地址/组发送一个消息,所有组成员都能从该组播地址和端口上接收到该消息。该应用可以不是组成员n类似与邮件列表n当一个应用成为一个组播地址/端口的成员,则它可以接收到其他成员发送的数据报273Java语言程序设计(下)UDP数据报应用n组播数据报(Mult

233、icast Datagram).MulticastSocket类n指定组播地址和端口n加入组/离开组5组播地址组(224.0.0.1)124加入组离开组3274Java语言程序设计(下)UDP数据报应用n组播数据报(Multicast Datagram)的实例Stringmsg=Hello;InetAddressgrp=InetAddress.getByName(228.5.6.7);MulticastSockets=newMulticastSocket(6789);s.joinGroup(grp);DatagramPackethi=newDatagramPacket(msg.getBytes

234、(),msg.length(),grp,6789);s.send(hi);bytebuf=newbyte1000;DatagramPacketrecv=newDatagramPacket(buf,buf.length);s.receive(recv);s.leaveGroup(grp);s.close();.MulticastSocketextendsDatagramSocketnpublicMulticastSocket(intport)throwsIOExceptionnpublicvoidjoinGroup(InetAddressmcastaddr)throwsIOExceptionnpublicvoidleaveGroup(InetAddressmcastaddr)throwsIOExceptionnpublicvoidsend(DatagramPacketp)throwsIOExceptionnpublicvoidreceive(DatagramPacketp)throwsIOException定义一个组播地址构造接收数据报构造组播Socket关闭数据报Socket加入该组构造发送数据报,发送接收数据报离开该组275Java语言程序设计(下)第十章结束!276Java语言程序设计(下)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号