• 1. 面向对象的 Java2 高级编程
  • 2. 访问控制符-修饰属性和方法public: 可以被任何类访问。 缺省:可以被包任何类访问。 private:只能被本类的方法访问。 protected:本包内和所有的子类。 private protected:所有的子类。
  • 3. 静态属性、静态方法和静态初始化器static 属性:属于类,而不是对象,类属性。 static 返回类型 方法名:属于类,而不是对象 static{} 非方法,用来初始化静态属性。 static {m_NextEmpNo=1001;} 注意:static方法只能操作同一个类中的static属性,但可以操作其他类的对象,就像在main中所作的那样。
  • 4. 抽象类与抽象方法 abstract class 类名{ abstract 返回类型 方法名(参数名); } 表示抽象的概念,作为基类,描述具有相同性质类的共性,而且只定义方法的接口,不实现。 抽象类不能实例化对象。 抽象的方法必须放在抽象的类中。 抽象方法实际上只定义了方法的接口。
  • 5. 抽象类举例abstract class PhoneCard{ double balance; void performDial(){ …….. } ……….. }
  • 6. 抽象类举例abstract class Shape{ double x,y; abstract void draw(); abstract double area(); double getX(){ return x;} double getY(){ return x;} }
  • 7. 最终类、最终属性、最终方法 final class 类名:不能有子类 final 类型 属性:常数 final 返回类型 方法名:不能被覆盖。 finalize():对象消失时执行的方法 注意:abstract不能与final合用。
  • 8. 继承的例子电话卡类有卡号类200卡无卡号类IP卡校园201卡磁卡IC卡
  • 9. 继承的例子图形类多边形类三角形椭圆五边形四边形园点直线
  • 10. 类和对象的图形表示-UML
  • 11. 类和对象的图形表示-其他表示方法CustomerJackCustomerJillAccount balance=100SV129CustomerAccountdepositdeposit 2000drawdraw 1000
  • 12. 类的继承继承关系的定义 属性的继承与隐藏 方法的继承、覆盖和扩展 构造函数的继承与重载 父类对象与子类对象的使用和转化-多态性
  • 13. 继承的定义 [修饰符] class 类名 [extends 父类] [implements 接口名] { [修饰符][类或类型 类成员变量;] [修饰符][类或类型 类方法(参数列表){}] }
  • 14. 属性的继承与隐藏int a;int a; int a; int b;父类子类
  • 15. 属性的继承与隐藏class A{ int a; A(){ a=0; } } class B extends A{ B(){ a=0; //super() b=0; }
  • 16. 方法的继承、覆盖和扩展A draw()B draw()A draw()B draw()A draw()B draw(){ super.draw () ......}
  • 17. 方法重载(oevrload)和覆盖(orveride)同类中允许同名但不同参数的方法。称为:overload。 System.out.println() System.out.println(int x) System.out.println(double x) System.out.println(char x) ...... 子类对父类同一函数进行重新实现称为:override。
  • 18. this—对象自身class B extends A{ int y; B(int x,int y){ super(x); this.y=x; } B(){ this(0,0); } public setX(int x){ this.x=x; }
  • 19. super--父类对象class A{ int x; A(int x){ this.x=x; } A(){ this(0); } public setX(int x){ this.x=x; }
  • 20. 构造函数的重载与继承重载:和普通方法的重载是一样的,但可以根据this来 调用其他构造函数。前页例子说明了这一点。 继承: 父类的不含参数的构造函数。 如果子类没有构造函数,自动将父类的无参构造函数作为自己的构造函数。如果子类有构造函数,则在创建新对象的时候,先执行父类的无参构造函数,再执行自己的构造函数。 子类可以在构造函数中使用super关键字来调用父类的含参构造函数,但必须是第一句。
  • 21. 父类对象与子类对象的转化多态性:同一个对象具有多种形态。 同一个方法可能会有不同的表现。 父类对象引用子类对象,是安全的。 Employee emp=new CommonEmployee(); 只能调用父类中定义的方法。但是对于子类覆盖父类对象 的方法则调用子类的方法(动态联编、动态性)。 Graphics g=new Graphics(); Graphics2D g2=(Graphics2D) g; //将父类对象看成是子类对象,不安全,系统必须要支持
  • 22. 多态性举例abstract class Shape{ abstract double area(); //强制子类实现 } class Circle extends Shape{ double radius; Circle(double r){ radius=r; } double area(){return Math.PI*radius*radius;} } ......
  • 23. Object—所有类的基类Java是单根类面向对象程序设计语言。C++则不是。 Java只支持单继承,不支持多继承,但是可以通过接口来实现多继承。 Java自动地取了C++的优点,例如:动态分配内存、动态联编。所以说:java在语法上可以看成C++的子集。
  • 24. 接口-----interface 接口类似于类,是纯抽象类,它规定了类操作的规范和对外接口,但不规定其实现,是典型的说明和实现分离的语言机制。 利用接口可以定义较抽象的概念,这样可以在抽象概念的基础上去建立更一般的程序模型。 接口支持继承,对接口进行实现比较类似于类的继承,但这不需要实现类和接口有真正的继承关系。这就为我们抽象现实世界的关系又提供了一种有力的工具。 比如说:人可以speak, 动物也可以speak,这是一种共性,但是不需要建立一个继承体系,因为这种体系不容易扩充,可以建立一个接口,包含一个speak的抽象方法,这种方式容易扩充,比如又出现了一种新的既不是人,也不是动物的对象,具有该方法speak,如:机器人、汽车、报警器等,就非常容易扩充。在具有同一个speak方法接口这方面,这鞋类是具有共性的。 Java利用接口可以实现多继承。在UML中,继承关系和实现关系的表示法是非常相似的。
  • 25. 接口的声明[public] interface 接口名 [extends 父接口名列表]{ //常量域说明; [public] [static] [final] 域类型 域名=常量值; //抽象方法说明; [public][abstract][native]返回类型 方法名(参数列表)[throw 异常列表]; }
  • 26. 接口的声明-举例1interface Shape{ //静态常数说明; static final int MAXNUMBER=1000; //抽象方法说明; public double area(); } //implements接口 class Circle implements Shape{ ...... public double area(){ return 3.14*radius*radius;} }
  • 27. 接口的声明-举例2public interface ActionListener extends EventListener { /** * Invoked when an action occurs. */ public void actionPerformed(ActionEvent e); }
  • 28. 接口的声明-举例2public class Frame3_AboutBox extends JDialog implements ActionListener { ...... button1.addActionListener(this); ...... public void actionPerformed(ActionEvent e) { if (e.getSource() == button1) { cancel(); } } }
  • 29. 如何使用已存在类—类与类之间的关系继承 class Point class Line extends Point 关联 class Line{ Point p1,p2; } 依赖 class Line{ void draw(Point p1,Point p2){} }
  • 30. 类之间关系的UML图
  • 31. 流式输入输出与文件处理流Stream Java输入输出类库 数据输入输出库 文件的处理与随机访问
  • 32. 流-Stream流是在输入和输出之间的数据序列。每个流都有一个源和一个目的,流中的数据的存取都是严格按顺序的。 流中的数据可以是原始的二进制数据,也可以是经过编码处理过的符合某种格式的特定类型的数据,例如:字符流、数字流等。 对于不同的数据类型使用不同的流类来抽象,而流提供的方法也不一样。 不同的流类是有联系的,构成一个非常好的类体系结构,其中使用了Decorator设计模式。 流类总共分为两大类,字节流和字符流。根据数据类型的不同和输入输出的不同,有分为不同的流类。 32
  • 33. 输入流-InputStream数据源Program控制台、文件、网络套接字放入数据 (自动)取出数据 read()输入流FileFileInputStreamMyClassdecoratorassociation
  • 34. 输出流-OutputStream数据目的Program控制台、文件、网络套接字放入数据 自动放入数据 write print输出流FileFileOutputStreamMyClassdecoratorassociation
  • 35. 数据流的层次模型字节数据流 Stream字符数据流 Reader/Writer格式化数据流 DataInputOutput对象数据流 ObjectStream数据源或者目的Chemical elementsflavor, meatsandwichesDecorator
  • 36. 字节流 字符流数据流的层次模型—输入流控制台、文件、网络套接字数据源缓冲字节流或字符流格式化数据流a=readDouble()
  • 37. 字节流 字符流数据流的层次模型—输出流控制台、文件、网络套接字数据目的缓冲字节流或字符流格式化数据流writeDouble(a);
  • 38. 流的分类字节流和字符流 最基本的两种流分类,按照流的最基本单位是字节还是字符来分。 输入流和输出流 相对于程序来说,向程序输入成为输入流,否则称为输出流。 结点流(Node)和转换流(Transform) 流的一个端点和一个固定数据源或者目的相连,称为结点流,如:System.in,FileInputStream如果一个流和另一个流相连,则称为转换流。
  • 39. Java输入输出类库- 字节输入流InputStreamFileInputStreamObjectInputStreamPipedInputStreamSequeceInputStreamFilterInputStreamStringBufferInputStreamByteArrayrInputStreamDataInputStreamPushbackInputStreamBufferedInputStreamLineNumberInputStream
  • 40. Java输入输出类库- 字节输出流OutputStreamFileOutputStreamObjectOutputStreamFilterOutputStreamPipedOutputStreamByteArrayrOutputStreamDataOutputStreamBufferedInputStreamPrintStream
  • 41. Java输入输出类库-字符输入流ReaderBufferedReaderCharArrayReaderStringReaderPipeReaderFilterReaderLineNumberReaderFileReaderPushbackReaderInputStreamReader
  • 42. Java输入输出类库-字符输出流WriterBufferedWriterCharArrayWriterrStringWriterPipeWriterFilterWriterFileWriterOutputStreamWriterPrinterWriter
  • 43. 基本输入流:InputStream抽象类 public int read() public int read(byte b[]) public int read(byte b[],int off,int len) public long skip(long n) public void mark() public void reset() public void close()
  • 44. 基本输出流:OutputStream抽象类 public void write(int b); public void write(byte b[]); public void flush(); public void close();
  • 45. 具体的输入输出流-stream jdk1.0FilterInputStream->DataInputStream,PushbackInputStream,BufferdInputStream LineNumberInputStream FilterOutputStream->DataOutputStream,BufferedOutputStream,PrintStream FileInputStream FileOutputStream ObjectInputStream ObjectOutputStream PipedInputStream PipedOutputStream ByteArrayInputStream ByteArrayOutputStream SequenceInputStream
  • 46. 具体的输入输出流-字符流jdk1.1BufferedReader->LineNumberReader BufferedWriter CharArrayReader CharArrayWriter StringReader StringWriter InputStreamReader ->FileReader OutStreamReader -> FileWriter PipedReader PipedWriter FilterReader-PushbackReader FilterWriter PrintWriter
  • 47. 标准输入输出流-控制台System.in 输入流类对象,输入源为键盘。可以 重新定向。该对象类为:InputStream,被系统自动初始化为一个对象。 使用举例和重新包装 System.out 输出流类对象,输出目的为屏幕。可 以重新定向。
  • 48. 文件的处理与访问File不属于流类,是管理文件和目录的,作为流 类的数据源或者数据目的。每个File对象对应着 一个文件或者目录,其属性包括了文件或者目录 的属性例如:名称、长度、所含文件个数等。 创建File对象 File(String path); File(String path, String name); File(File dir, String name);
  • 49. 文件读写的操作举例从控制台读入一些字符,写入一个文本文件。 File f=new File(“mydat”) FileWriter fout=new FileWriter(f) fout.writeln(s) WriteFile.txt 从文本文件中读出,然后再输出到控制台上。 File f=new File(“mydat”) FileReader fin=new FileReader(f) fout.readln(s) ReadFile.txt
  • 50. File的方法exists() isFile(), isDirectory() getPath(),getName(); long length(); canRead() canWrite() String[] list(); renameTo(); delete() mkdir()
  • 51. 程序的图形用户界面(GUI)字符用户界面: Text User Interface 用户使用字符和程序交互,输入字符命令和数据,用字符显示结果。 使用键盘操作,单事件驱动。 图形用户界面: Graphics User Interface 用直观的GUI控件来接收命令和数据,使用图形控件或者 使用鼠标和键盘操作,多事件驱动。 Java的图形用户界面类: java.awt,javax.swing
  • 52. 图形用户界面的构成和设计图形用户界面的构成—组件(Javabean) 容器组件:Container,Frame,Panel 标准组件: Label, Button, Menu, List 布局方式: BorderLayout, FlowLayout 事件处理: 层次模型(jdk1.02)和委托模型(jdk1.1以后) 设计&实现图形用户界面的步骤 根据需求创建GUI的组成构件,并安排布局和外观 定义GUI各构件对不同事件的响应,实现与用户的交互功能
  • 53. 从一个简单窗口开始创建GUI应用程序 如果是Applet,本身就是图形界面 如果是Application,包括main函数和至少一个Frame,可以采用继承或者关联的方式。 注意:处理关闭窗口的事件。
  • 54. AWT包XAbstract Windows Toolkit 标准:提供各种构成GUI的标准控件。 抽象:抽取不同软硬件平台中所实现的窗口的公共特性,针对具有上述公共特性的虚窗口操作。 依赖:依赖于具体平台操作系统的实现,调用操作系统的本地资源。 不同操作系统下显示效果有所不同。
  • 55. BoaderLayoutCheckboxGroupFontDimensionColorEventFlowLayoutMenuComponentComponentMenuBarMenuMenuItemCheckBoxMenuItemButtonContainerCheckBoxChoiceListTextComponentPanelWindowTextFieldTextAreaAppletDialogFrameFileDialog
  • 56. AWT类容器类(Container) Window Dialog Frame Panel 控件类(Component) Canvas 画布 Button 按钮 Checkbox 校验盒 、Choice选择框 Label 标签 List 列表框 Menu 菜单 Scrollbar 滚动条 TextArea 多行文本区 TextField 单行文本区
  • 57. AWT包布局类(Layout) BorderLayout CardLayout FlowLayout GridBagLayout GridLayout 事件类(Event) Event AWTEvent 绘图类(Draw) Color Font Graphics Image
  • 58. AWT类- Componet 它为所有AWT控件的父类, 抽象类。功能如下: 基本的绘图支持 paint() 绘制控件 paintAll() 绘制控件及其子控件 repaint() 重新绘制控件, 自动调用update(),在程序中使用 update() 刷新控件。先用背景色清除控件, 再设置绘图色为控件色,最后由paint()重新绘制控件 注: AWT绘图系统通过一个单独的线程进行控件的绘制。
  • 59. 外观控制--字体、颜色获取控件字体 public Font getFont() 设置控件字体 public synchronized void setFont(Font f) 获取控件颜色模板字体 public synchronized ColorModel getColorModel() 设置控件颜色 public synchronized void setForeground(Color c) 获取控件背景色 public Color getBackground() ……
  • 60. 大小和位置控制控件最小化 public Dimension minimumSize() 控件最恰当的大小 public Dimension preferredSize() 重新设置控件大小 public void resize(int width, int height) 重新设置控件形状 public synchronized void reshape(int x, int y, int width, int height) ……
  • 61. 控件的状态控制控件是否可视 public boolean isVisible() 控件是否显示在屏幕上 public boolean isShowing() 控件是否激活 public boolean isEnabled() 激活控件 public synchronized void enable() 屏蔽控件 public synchronized void disable() ……
  • 62. 事件处理—层次模型(过时) 当用户对某个控件进行操作时, 生成一个事件对象(Event),由系统对其处理。 public boolean handleEvent(Event evt) public boolean action(Event evt, Object what) public boolean mouseDown(Event evt, int x, int y) public boolean mouseDrag(Event evt, int x, int y) public boolean keyDown(Event evt, int key) public boolean keyUp(Event evt, int key) ……
  • 63. 事件处理—委托模型定义事件监听器对象,实现监听器接口,或者继承监听器适配器类。 在组件中注册事件监听器对象。 addActionListener(EventListner l)
  • 64. 类Container 为所有AWT容器的父类, 为抽象类具有控件的功能,可以包含其它控件, 并使用布局管理器来控制包含控件的位置和大小。 控件管理 public Component add(String name, Component comp) public void remove(Component comp) public int getComponentCount() public Component[] getComponents()
  • 65. 布局管理 每个容器都有对应的布局方式,布局方式是一个对象。 没有设置布局方式时,为缺省的布局方式。Frame为:BorderLayout, Applet为FlowLayout, Panel为FlowLayout 等。 由布局管理器来管理每个容器内控件的布局方式。 布局管理器提供了接口LayoutManager,可以实现不同的布局管理器。 方法 setLayout(LayoutManager);用来设置新的布局方式。
  • 66. 布局管理使用setLayout() 可以设置以下布局方式: BorderLayout:使用East, West, South, North,Center 的方式 FlowLayout :从左到右显示控件,类似文本显示。 VerticalFlowLayout:从上到下,Jbuilder扩充的布局方式。
  • 67. 布局管理CardLayout :使用卡片方式,一次只显示一个控件 GridLayout 分成等大小的矩形,一个控件占一个矩形,每个控件充满矩形。 GridBagLayout 按照水平从左到右,垂直从上到下排列每个控件,一个控件占一个或多个矩形,可以充满也可以不充满。 XYLayout:设置一个利用x,y坐标来定位的布局方式和null基本相同,width,height取-1表示去最佳的尺寸外。Jbuilder扩充的布局方式。
  • 68. 布局管理BoxLayout2:Jbuilder补充,com.sun.java.swing.BoxLayout的wrapper.类似于FlowLayout,但是当窗口resize的时候,不折行。 PanelLayout:专用于SplitPanel
  • 69. FlowLayout 为Applet的缺省布局方式,一般用在Panel中。容器中的各个控件从左到右排列;各个控件依其标签自动调整大小;对齐方式: 有(LEFT、RIGHT、CENTER); 用方法setAlignment(int) 来设定。 可设置控件间隔:setHgap(int)。
  • 70. BorderLayout为Frame、Dialog的缺省布局方式 容器中的各个控件位置分在五个区: North, South, East, West,CenterCenterNorthSouthWESTEAST
  • 71. GridLayout 容器中的各个控件按网格状整齐排列, 每个控件占一个格, 大小一样,类似于表格。
  • 72. GridBagLayout 容器中的各个控件按网格布局, 每个控件可以占一个或多个网格,控件可以填充所占单元格,也可以占满,保持原来大小。
  • 73. GridBagLayout 除了生成GridBagLayout对象外,还需生成GridBagConstraints对象来设置每个控件的约束条件。 使用以下几个实例变量: gridx, gridy: 控件左端、上端的位置,用单元坐标表示。 gridwidth, gridheight: 控件所占的行列数。 fill: 控件的填充方式,none, horizontal,vertical,both。 ipadx, ipady: 边框尺寸,一般不用。 insets : 控件与边缘的距离。 anchor: 控件的停靠方式。 Center,north, south,east,wetst,northwest,… weightx, weighty : 权重。
  • 74. CardLayout容器中的每个控件作为一张卡片看待, 每次只显示一 张卡片。容器相等于一个卡片栈。 卡片的顺序由容器内部确定。 卡片的切换通过方法:show(Container, String) ; 将控件增加到卡片中去, 用方法: addLayoutComponent(Component, Object) ;
  • 75. 无布局方式直接对容器中的每个控件的大小和位置进行设定。 使用方法: reshape(int x,int y,int width,int height) ; XYLayout (Jbuilder的缺省布局管理器) 与无布局方式类似。 举例:NullLayoutDemo.wri
  • 76. 菜单 菜单控件(MenuComponent)和下拉菜单(Menu) 菜单控件包括菜单条(MenuBar)、菜单项(MenuItem)。 下拉菜单包括菜单项或子下拉菜单。 菜单条一般放在窗口(Frame)的最上方。
  • 77. AWT事件处理机制 当用户按鼠标或键盘时,AWT事件处理系统生成类Event的一个对象,并传递给相关的每个控件,或向上传播事件 JDK1.02的事件模型-层次模型 JDK1.1的事件模型-代理模型FramePanelButtonAction Event层次模型FramePanelButtonAction EventActionListener
  • 78. 层次模型的优缺点:简单,利用了OOP性质,在Component中定义了handleEvent()方法,在每个子类中重新实现该方法。 事件只能被产生事件的对象或者其容器处理。 大量的CPU时间被浪费在无关紧要的事件中,这些事件在放弃之前,要遍历整个容器树,没有一个简单方法来过滤他们。 为处理事件,你必须要么继承component要么在基container中创建handleEvent()
  • 79. 代理模型的优缺点:事件处理和产生事件的对象分离,更加灵活,符合OOP的一个设计准则,分离。 事件处理和时间对象可以有多对多的关系,可以重用事件处理对象。 程序结构复杂。 由1.0模型向1.1模型转换比较复杂。
  • 80. 事件处理方法—层次模型重写方法:boolean handlerEvent(Event evt); 返回值有三种: true: 表示事件在本方法内处理,不再传播。 false: 表示事件不在本方法内处理,向上传播。 Super. handlerEvent(); :表示事件不在本方法内处理,向父类传播。 boolean action(Event e, Object o); 返回值有三种: true: 表示事件在本方法内处理,不再传播。 false: 表示事件不在本方法内处理,向上传播。 Super. handlerEvent(); :表示事件不在本方法内处理,向父类传播。
  • 81. 事件监听器—代理模型ActionListener MouseListener MouseMoveListener ItemListener AdjustListener ComponentListener ContainerListener FocusListener KeyListener TextListener WindowListener 组件和事件监听器是有一定的对应关系的。
  • 82. 常见组件和事件监听器之间的关系Comp TypeActAdjCmpcntFocitmkeymouMMTextWinButtonXXXXXXCanvasXXXXXCheckboxXXXXXXCheckboxMenuItemXChoiceXXXXXXComponentXXXXXContainerXXXXXXDialogXXXXXXX
  • 83. 常见组件和事件监听器之间的关系Comp TypeActAdjCmpcntFocitmkeymouMMTextWinFrameXXXXXXXLabelXXXXXListXXXXXXXMenuItemXPanelXXXXXXScrollbarXXXXXXScrollPaneXXXXXXTextAreaXXXXXXTextFieldXXXXXXXWindowXXXXXXX
  • 84. Swing第二代GUI组件。 是JFC(Java Foundation Class)的一部分。 轻量级,与平台无关,不调用本地代码。
  • 85. JFC和AWT、Swing的关系JFCAWTAWT Component Button Label ScrollBar WindowFrameJava2DFontGraphicsDiaglogColorDrag and DropAccessbilityAWT EventTool kitSwingYour Application
  • 86. JComponent ClassBorders:可设置图标 Icon:可设置图标 Double buffering:双缓冲 Tool tips:工具提示 Application-wide pluggable look and feel:应用程序级的界面外观改变 MFC模式:如Button和ButtonModel
  • 87. Swing 层次树
  • 88. Swing Componentstext handling:JTextField,JTextArea Buttons:jButton, ToggleButton, JRadioButton,JCheckbox Label: JLabel Lists: JList Panes: JPane combo boxes: JComboBox Scrollbars: JScrollbars Scrollpanes: JScroollpanes Menus: JMemu Tables: JTable Trees: JTree
  • 89. 其他高级Swing技术--JOptionPane消息对话框: showMessageDiaglog( parent,msg,title,msgtype=error|info|warning||question|plain) 确认对话框: showConfirmDialog() Opttype=yes_no_cancel,yes_no,ok_cancel returnvalue=JOptionPane.showConfirmDialog() 输入对话框: showInputDialog() String input=JOptionPane.showInputDialog()
  • 90. 其他高级Swing组件颜色选择器 JColorChooser, jbcl.ColorChooser 文件选择器 FileChooser 字体选择器 FontChooser
  • 91. 设计一个界面的顺序---代码方式1、首先确定Container 确定Layout 确定Border 确定background, foreground 3、确定Component 确定位置、大小 确定边框、图标、颜色、字体等 4、将Component加入Container
  • 92. Java多线程机制 多任务操作系统,CPU同时执行多个程序(进程)。 一个程序(进程)中同时有多个线程在同时执行。 程序、线程和进程的区别。 程序是静态的代码。 进程是程序的一次动态执行过程。(有点 像用例)。加载到不同的内存区域中执行。 线程是比进程更小的执行单位。线程之间可 以共享内存单元(代码和数据),并利用这些共 享单元实现数据交换、实时通信、同步操作等。
  • 93. 什么是线程?线程,也是执行单元上下文,包括:虚拟CPU和其中 的代码和数据。 CPUCodeData
  • 94. 线程的生命周期—线程是一个对象NewbornRunnable Blocked Running Deadstart( )等到时间片yield( )finishThread.sleepwait() I/O操作resume() notify()
  • 95. Java中的线程类Thread类 Thread(); Thread(Runable target);用target中的run方法覆盖线程 对象的run方法。 Thread(String ThreadName);
  • 96. Java中的线程类Thread.setPriority(),优先级:1-10 Thread.start();启动一个线程。 Thread.run(); 须在子类中覆盖,自动被调用 Thread.sleep();线程休眠 Thread. stop(); 停止线程。 Thread.isAlive();判断线程是否活动。
  • 97. Runable接口Runnable接口 只有一个方法,run,所有实现该接口的类都需要实现该 方法。该run方法可以被JVM识别和自动执行。
  • 98. 多线程的实现1、继承Thread,覆盖父类的run方法。 class MyThread extends Thread{ } 创建线程实例。thread1=new MyThread(); 启动线程:thread1.start()
  • 99. 多线程的实现 2、 实现Runerable class MyThread implements Runable{ public void run(){ }} 使用Runable对象来定义Thread Thread t1=new Thread(MyThread);
  • 100. 线程的死锁和同步 由于线程可以共享数据,这样就会碰到数据并发访问所带来的问题,同步和死锁。 sychronized, deadlockthread1 push(char ch){ s[top]=ch; top++; abctopthread2 push(char ch){ s[top]=ch; top++;
  • 101. 线程间的通讯使用wait和notify在线程中通讯。 使用synchronized来保护数据 不再使用suspend, resume, and stop. (dprecated)
  • 102. Java网络编程网络应用的层次和结构 用Java实现底层网络通信 Java程序对网上资源的访问
  • 103. 网络应用的层次和结构网络通讯的层次 物理层 数据链路层 网络层IP 传输层TCP 会话层 表示层 应用层HTTP 网络计算结构 C/S B/S/S n层
  • 104. 底层网络通信用Java程序实现网络通信协议所规定的功能和操作。网络通讯协议有多种:tcp/ip, udp, snmp,http等。
  • 105. 基于连接的流式套接字-socketSocket是TCP/IP的编程接口,利用此API就可以实现通过TCP/IP来完成通信。 InetAddress类:根据域名获取计算机的IP和HostName。 InetAddress ipa=InetAddress.getByName(“sun.com”); ipa.getHostName() ipa.toString() //ip address ipa.getLocalHost()
  • 106. Socket通信机制-基于连接的通信创建ServerSocket监听接收Client请求创建Socket和Server连接向Socket中读写数据与client通信向Socket中读写数据与server通信关闭Socket关闭Socket关闭ServerSocket对象结束监听服务建立连接关闭连接
  • 107. ServerSocket vs. SocketServerSocket listener=new ServerSocket(8080); Socket linkSocket=Listener.accept(); listener.close();Socket mySocket=new Socket(“computername”,8080); mySocket.getOutputStream() mySocket.getInputStream() mySocket.close();
  • 108. 无连接的数据报UDP协议无连接的远程通信服务。以包为传送单位。不保证传送顺序。 UDPSocket无需建立和拆除连接。 DatagramPacket: 数据报对象。 DatagramSocket: 数据报的发送和接收。
  • 109. DatagramPacket-创建数据报对象DatagramPacket(byte ibuf[],int ilength); 用来接收数据报的数据部分。 DatagramPacket(byte ibuf[],int ilength,InetAddress iaddr, int iport); 用来创建发送给远程系统的数据报
  • 110. DatagramSocketDatagramSocket() 数据报Socket,连接在localhost任何一个可用的 端口上。(类似于Socket) DatagramSocket(int port) 指定的端口上创建一个Socket. DatagramSocket(int port, InetAddress localAddr) 多IP地址主机上创建数据报Socket.
  • 111. Receive and Sendvoid receive(DatagramSocket p) void send(DatagramPacket p) 为防止线程死机,可以设置超时参数(timeout)
  • 112. JDBC-Java DataBase ConnectionJava数据库应用程序JDBCJDBC-ODBC专用驱动协议驱动ODBC驱动DBMSDBMSDBMS中间件DB协议解释器
  • 113. JDBC应用编程模型驱动程序管理器驱动程序连接connection预定义语句 (preStatement)SQL语句 (Statement)可调用过程 (callableStatement)结果集 ResultSet
  • 114. Java对数据库的访问与操作-JDBCclass.forName(“JDBC驱动”) ("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con=DriverManager.getConnection(“url”); jdbc:odbc:soft Statement s=con.createStatement(); ResultSet rs=s.executeQuery(sql); rs.getString(1);...... s.executeUpdate(sql); con.close();