第5章 面向对象程序设计

单词和缩写

  OOP(Object-oriented Programing)

  object data method class extends interface prototype packge

  public private protected static final native

 abstract this super

  面向对象(Object)(P93)

名称

说明

举例

对象

object

类中的实例,

对象的源代码

把数据、变量、操作和方法

封装在一起。

小车是汽车类中的实例。

class myclass
  {
    myclass myobject;

    myobject=new myclass(int x);
   }

class

定义对象的状态和行为的模板,

Java 语言中的程序模块。

java 语言 awt 工具包中的

Graphics 图形类。

 什么是面向对象(P )

  构成 行为
物体 属性 方式
汽车 发动机、车轮 发动、行驶
对象 数据 方法

5.1 Java 语言中的类

5.1.1  class 类

 1.类的声明格式(P82)

   [类修饰符] class 新类名 [extends 超类名] [implement 接口名]

 2.类修饰符

   public 公有成员,可以被任何对象使用或扩展。

   protected 保护成员,仅能被该类及其派生类访问。

   private 私有成员,仅能被该类的其他成员访问。

   abstract 未完成的类,只是声明方法,而不实现方法。

   final 终类,完整的,不能有子类。

 3.超类

  扩展超类:得取该类的副本,可在副本上添加其他功能。

 [示例 5.3]

    abstract class myClass1            //定义抽象类

    {

    abstract void method1();  //定义抽象方法

   }

   class myClass2 extends myClass1{

       public void method1(){

       ......;

   }

   }

 1. 封装

  1)封装(encapsulation)是把类的数据、变量、操作和方法

    封装在类体中,使之与外界分隔开。

  2)外界访问类对象:

    通过类中公共的数据方法访问私有的数据和方法。

5.1.2 子类(P )

 1. 类的继承

  1)类的继承(extends)

    新的类继承原有类的基本特性。

  2)新的类:子类、派生类。

  3)原有类:父类、超类(superclass)、基类。

 2. Java 语言在运行时的多态性(P85)

  1)类的多态性(polymophism)

    一个名称有多种功能,或者相同的接口有多种实现方法。

  2)类的多态性的实现

    通过方法的重载(overloading)、复盖(overriding)

    和接口来实现。

  3)方法的重载

    多个方法具有相同的名称,但各个方法的参数表不同,

    即参数的类型和参数的数量不同。

  例如,求一个数的立方(cube)

    int cube (int i);

    float cube (float a);

    double cube (double d);

    调用时系统自选方法。

  例如,cube(5),cube(3.2f),cube(6.7)。

  4)复盖:子类中的方法复盖父类中同名的方法。

  5)接口:特殊的类,只有方法的原型,

    方法的实现在其子类中具体定义。

5.1.5 定义构造函数(P )

  构造函数:为类提供初始化的方法。

 [示例 5.10]

 class point{

     int x,y;   // 声明变量

     point(){   //构造函数

        x=0;

        y=0;

     }

    point(int newx,int newy){  // point 方法的重载

        x=newx;

        y=newy;

    }

  }

 创建、使用对象

 声明和创建对象(P )

  创建对象语法格式:

  类名  对象名;   //声明对象

  对象名=new 类名(); //创建对象

 [示例 5.12]

  class myClass1{

     myClass myObject;

     myObject=new myClass(int x,int y);  // 分配空间,实例化

   }

 对象的初始化(P )

  若类成员未赋值,则系统赋予固定的初始值。

  数值变量:0

  布尔变量:false

  未初始化的引用:null

 [示例 5.18]

  Point p1=new Point();   //初始化为 x=0,y=0

  Point p2=new Point(5,10);   //初始化为 x=5,y=10

 对象的使用(P )

 运算符“.”可以访问变量和调用方法。

 [示例 5.19]

  class Point {    // 声明 Point 类

    int x,y;

    String name="a point";

    Point(int x,int y, String name){  // 定义方法

       this.x=x;     // 用运算符“.”访问变量

       this.y=y;

       this.name=name;

     }

   }

 // Point 类的应用

  public class AccessVariable{     //声明 AccessVariable 类

  Point p=new Point();              //生成类 Point 的对象 p

  p.x=10;                           //用 p.x,p.y 来访问 x,y

  p.y=10;

  tx=new point().x;         //用 new 生成对象的引用后直接访问

  }

 类和对象

 类是定义对象的状态和行为的模板,对象是类的实例。

 Java 语言中的方法

 方法的定义(P )

  方法:可以被调用的代码,传递固定数量的参数,

 类似 C 语言的函数。

  方法声明格式:

  方法修饰符 结果类型 方法名([参数列表]){方法体}throws子句

 [示例 5.24]

  class point{

     int i;

     float x,y;

     void add_x+y(){     // 定义 x+y 的方法

     for(i=1;i<10;i++)x=x+y;

     ......;

    }

  }

 构造方法(P )

 [示例 5.27]

  class point{

     int x,y;

     point(){

        x=0;

        y=0;

   }

 point(int x,int y){

        this.x=x;

        this.y=y;

   }

  }

 finalize 方法(P )

  finalize 方法终结扫尾,释放系统资源。

 this 和 super 变量(P )

  this 变量:当前的对象。

  super 变量:引用超类(父类)中的对象。

  1.static方法:类方法(class method),

    Math 类中含有数学计算方法:指数、对数、三角函数。

 2.向方法传递信息

    public static long max(long a,long b){

        return (a>=b) ? a : b;

     }

  例:

   class Circle {

    int x,y,radius;  //成员变量x,y

    public Circle(int x,int y,int radius)  //构造器参数x,y

    {

      this.x=x;   //赋值给当前对象的变量x

      this.y=y;

      this.radius=radius;

     }

   }

 3.main方法

  main方法:程序执行的起点。

  定义格式:public static void main(String args[]){方法体}

5.3 接口的概念(P109)

  应用程序接口 API(Application Program Interface):

 由类和接口组成具备各种功能的类的形式。

  例如:java.applet.AppletContext接口的getImage方法

      使运行Applet的浏览器下载图片。

5.3.1 接口类型

 接口中的数据成员:

 公共的(public)、静态的(static)、最终的(final)。

(1)声明接口的语法格式:

  public interface 接口名[extends 接口列表]{...;}

5.3.2 接口的实现(implements)(P)

(1)类实现接口的语法格式:

   class myclass implements SomeInterface{...}

(2)多个接口的实现(声明用逗号分隔接口)

   class myclass implements Interface1,Interface2{...}

(3)接口的多重继承

   Interface myInterface extends Interface1,Interface2{...}

  引入包中的类和接口(P)

  例如:

    import java.awt.color;

    import java.awt.Graphics;

    import java.awt.Image;

    import java.awt.*;

  导入整个包,浏览器必须从网上下载包中的所有类文件,用时间多。

5.4 Java 包(P113)

 包(package):由一组类和接口的程序段组成。

 包:类似 C++ 语言中的类库,用途相近功能不同的类和接口的集合。

相当子目录,包与文件系统的目录对应,用圆点(.)指明目录的层次。

  例如:java.awt.Graphics

5.4.1 java 核心包(P)

  API(Application Programming Interface)

(1)java.lang 基本包:支持基本对象和数值类型。

(2)java.io 输入输出包:用于管理文件输入输出流。

(3)java.util 工具包:提供工具类。

(4)java.net  网络包:支持网络编程。

5.4.2 java 语言提供的其他包

(1)java.awt 抽象窗口工具包:

   用于管理窗口、对话框、按钮、菜单、滚动条等。

(2)java.applet 小程序包:用于创建 Java 小程序。

(3)javax.swing 新图形界面库:新的图形界面类库。

5.4.3 构造 Java 包

  package 包的名称;

5.4.4 

  接口(interface):抽象方法和变量的集合。

 类的原型(prototype),接口规划出类的共同行为,

 具体类实现特殊功能。

 

第6章 字符串处理

6.1 创建String类对象

  1.隐式创建字符串String对象(P )

    g.drawString("This is a string",50,50);

  2.显示创建字符串String对象(P26)

    string str=new String("This is a string");

 

第7章 输入输出处理

 * 文件输入输出(I/O)流:

   信息源和目的地之间的通信路径。

 * 文件输入流对应抽象基类 InputStream;

 * 文件输出流对应抽象基类 OutputStream。

 

第8章 Java Applet

8.1.3 在 HTML 文件中嵌入 Applet(P163)

//类文件中嵌入图像 *.JPG

<applet

code=xhpp.class

name=xhpp

width=571

height=393 >

<param name="graphic" value="QHXJ.jpg">

<param name=label value="This string was passed from the HTML host.">

<param name=background value="008080">

<param name=foreground value="FFFFFF">

</applet>

8.2 Applet 的创建和执行

8.2.1 Applet 的类层次及框架结构(P164)

 2. Applet 的框架结构

 * Applet 小程序运行过程

init( )
初始化

———

start( )
 启动

————

stop( )
 停止

———

destory( )
 释放资源

————

(1)加载含 Applet 的页面,设置字体、装载图片等;

(2)启动或恢复执行;

(3)执行被挂起,浏览器调用 stop() 方法停止小程序的运行;

(4)若关闭浏览器停止 Applet 运行,

浏览器调用 destory() 方法终止小程序。

(5)调用 paint() 方法绘制图形。

8.3 Applet 的 AWT 绘制(P171)

8.3.2 应用字体

  ckkj ckkj_dm

// 创建字体对象

Font fnt20 = new Font("TimesRoman",Font.PLAIN,20);

g.setFont(fnt20); // 设置当前字体

g.setColor(Color.yellow);// 黄字

g.drawString("广播电视大学",55,30);

8.3.4 绘制图形(P175)

  矩形圆形 jvjy.exe jvjy_dm

8.5 Applet 的应用(P180)

  Applet小程序:插入网页。

  Java.net  Java核心包的网络包:网络通讯(客户端、服务器端)

 网络技术基础

    提供适用TCP和UDP网络协议的类。

应用层 HTTP,FTP

TCP,UDP

IP

设备驱动程序

应用层
传输层 传输层
网络层 网络层
链路层 链路层
物理层
(网络的物理连接设备)

 1.网络通讯协议(TCP)(P )

   点对点网络连接传输,应用程序有HTTP,FTP。

 2.用户数据报协议(UDP)

   数据包网络通信方式。

   应用程序有ping,测试网络连接的计算机接通情况。

 3.网络通信地址标识(P )

目的计算机

端口(COM1)

主机名(IP地址)
网易ftp.go.163.com

应用程序
DOS功能调用 INT21
异步通讯输入、输出 AH=03H 04H

 4.网络数据包的传送(P )

应用程序

|

端口8080

TCP或UDP

|

网络数据包

|

主机名(IP地址)
http://www.ncsa.uiuc.edu

端口号
:8080

数据(路径/文件名)
/demoweb/index.html

 URL概念(P )

  统一资源定位器URL(Uniform Resource Locator)

  网上资源的指针,指向文件、目录、对象(查询数据库、搜索引擎)

主机名(IP地址)
http://www.ncsa.uiuc.edu

端口号
:8080

数据(路径/文件名)
/demoweb/index.html

   主机名分隔符(://)

   端口分隔符(:)

   路径/文件名分隔符(/)

 URL类(P )

 1.构造器

   URL对象是确定资源的位置。

   public URL(string protocol,string host,int port,

     string file) throws MalformedURLException

   (协议:http,ftp、主机名、端口、主机文件、形成URL出错异常)

  例如:创建URL对象

  try{

      URL urla=new URL("http","hostname",80,"index.html");

      }catch (MalformedURLException e){......}

 2.方法

   public int getPort() 得到URL对象的端口号

   public String getProtocol() 得到URL对象的协议名

   public String getHost() 得到URL对象的主机名

   public String getFile() 得到URL对象的文件名

12.2.3 URLconnection类(P265)

   URLconnection类:抽象类,实现应用程序和URL间通信连接,

     读写URL的资源。

   abstract public void connect() throws IOException

   打开与URL所指定资源的通信连接。

 实例:从Internet下载HTML文件(P )

   创建FileOutputStream对象用于写文件

   FileOutputStream fileOut=new FileOutputStream(args[1]);

 InetAddress类(P )

 InetAddress类简介

   InetAddress类:存储远程系统的IP地址。

   InetAddress remoteOP=InetAddress.getByName("java.sun.com");

   通过名字确定机器的IP地址。

 TCP Sockets套接字编程

 TCP Sockets基础(P )

 1.TCP Sockets是两台机器进行通信的端点,

     开发“客户机/服务器”应用。

 2.创建TCP Sockets需要的信息:

   本地系统的IP地址。

   本地应用程序正在使用的TCP端口号。

   远程系统的IP地址。

   远程系统应用程序相应的TCP端口号。

 3.Sockets在“客户机/服务器”中的应用:

   守护进程,等待请求,处理并返回结果。

 4.UNIX操作系统中端口的分配:

   低于1024的端口:捆绑拥有超级用户权限的应用,

   高于1024的端口:动态或临时分配给客户机应用程序。

 5.客户机应用程序建立Socket连接,捆绑端口(FTP 21,HTTP 80)。

 SocketImpl类(P )

   SocketImpl类:创建客户机Socket和服务器Socket。

 1.成员变量

   protected FileDescriptor fd; //socket 的文件描述符对象类

   protected InetAddress address; //socket 远端的IP地址

   protected int port; //socket 连接的远程主机的端口号

   protected int localport; //socket 连接的本地端口号

 2.方法

  * protected abstract void create(boolean stream)

   throws IOException

   创建一个流(stream)或数据报(datagram)Socket,

   stream为true:创建一个流Socket

   stream为fals:创建一个数据报Socket

  * protected abstract void connect(string host,int port)

   throws IOException

   连接Socket到远程主机host上的指定端口port。

  * protected abstract void bind(InetAddress host,int port)

   throws IOException

   捆绑Socket到IP地址为address的远程主机的指定端口port。

 Socket类(P )

  Socket类:实现客户端的Socket的实例,执行Socket的实际工作。

 1.构造器

   public Socket

   (String host,int port,InetAddress localAddr,intlocalPort))

   throws IOException

 2.方法

  * public InputStream getInputstream()throws IOException

    得到从Socket读取字节的输入流。

  * public OutputStream getOutputstream()throws IOException

    得到向Socket写字节的输出流。

 ServerSocket类

   ServerSocket类:创建TCP Socket服务器。

 1.构造器(P276)

   public ServerSocket(int port)throws IOException

   在指定端口创建监听ServerSocket

 2.方法

   public int getLocalPort()

   得到ServerSocket用于监听的端口号。

 3.ServerSocket类的使用(P )

   在端口创建ServerSocket后,

   用accept()方法等待客户的连接请求,

   客户机完成连接后,打开流,处理发生的通信。

 “客户机/服务器”通信协议的开发流程

  “客户机/服务器”通信:实现通信协议的基本步骤(P )

 

客户机

服务器

初始化

2.建立Socket对象
  向服务器发出链接请求

1.建立ServerSocket对象
  等待客户机的链接请求

建立链接

 

3.响应客户机,建立链接

请求响应

4.发出请求

5.响应请求

处理结果

7.接收处理结果

6.返回处理结果

中断链接

8.直到结束对话

9.中断链接,结束通信