java基础学习资料_第1页
java基础学习资料_第2页
java基础学习资料_第3页
java基础学习资料_第4页
java基础学习资料_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 JAVA 基础 1.1 类、数组、字符串操作 类:是变量和方法的集合体。类可以嵌套定义。类是 java 程序中基本的结构。所有的 java 语句出现在方法中,所有的方法都定义在类中。 类 方法 Java 语句 数组:是最简单的复合数据类型,是有序数据的集合。数组的元素可以是值(基本数据类 型) 、对象或其他数组。一个数组中的所有值都必须是相同的数据类型。 文本字符串:是一种参考数据类型,它本身是由 java.lang.String 定义的对象。 1.2 类 实例化一个类,就能得到一个对象。 类定义由类声明和类体组成。 类声明:class+类名: 类体:成员变量+成员方法 1.2.1 类声明 类声明格式:【修饰符】+class 类名+【extends 父类名】+ 【implements 类实现的接口列 表】 修饰符:指明类的访问控制符合类型说明符,包括:public、默认(friendly) 、 abstract、final 其中: 1、public:指明该类为公共类,可被其他类访问或引用其成员变量和成员方法。 Java 语言规定包含 main()的主类必须是公共类。 2、默认(也称 friendly):没有访问控制符,表示该类只能被同一个包的类访问和 引用,也不能用 import 语句引入。 3、abstract :抽象类,指明不能实例化的类 4、final:最终类,指明该类不能有子类 类名:第一个字母大写并具有类功能特征 extends:指明该类是子类, extends 后面跟父类名,子类与父类之间有继承关系 implements:指明该类实现的接口,后面是接口列表。 1.2.2 类体 class 类名 成员变量声明 成员方法声明 成员变量和成员方法都可用 public、protected 、private 、static、final 来设定访问权。 public:公用 protected:保护访问,可被同一个包中其他类、不同包中该类的子类以及该类自己访 问和引用 private:私有访问,只能被该类自己访问或调用。 static:静态:静态变量(方法) ,否则为实例变量(方法) 。不需要实例化可以被类 直接调用。 final:常量:注意用大写字母。 1.2.2.1 成员变量 声明格式: 修饰符+type+变量名 修饰符:包括:public、protected 、private 、static、final 、transient 、volatile : transient:指明变量为暂时性变量,用于实现不同对象存档功能 volatile:指明多个线程共享的变量,保证各线程对该变量访问的一致性。 1.2.2.2 成员方法 由方法声明和方法体组成 修饰符 +方法返回值类型 +方法名称+ (参数列表)+【throws exception】 方法体 修饰符:public、protected 、private 、static、final 、abstract、native、synchronized 其中 abstract:指明方法是否可以重写 native:指明代码是由各种语言集成 synchronized:指明多线程可并发共享访问。 方法体:是对方法的实现,包括局部变量声明、java 合法指令 Java 中的方法的参数传递是传值调用,而不是地址调用。方法不能改变参数值,但可 以改变变量值,两个对象之间的参数字段,不能相互交换。 1.2.2.3 方法重载 方法的重载是指多个方法可以享用相同的名称,但参数的数量和类型必须不完全相同, 即方法体有所不同,它实现了 java 编译时的多态性(即静态多态性) 。也就是说,程序可 以按参数决定调用对应方法,而此决定是由编译器来做的。 1.2.2.4 构造方法 构造方法是类中的一种特殊方法,是为对象初始化操作编写的方法,用它来定义对象的 初始状态。Java 语言中的每个类都有构造方法,它也是由方法名、参数和方法体组成。构 造方法名必须与类名相同,它没有返回值,用户不能直接调用它, 只能通过 new 自动调 用。 构造方法也有成员、访问权限限制。在构造方法中必须使用成员变量,而且当参数与成 员变量同名是,就只能用 this 关键字。 如果类中没有构造方法,java 语言提供默认的构造方法。但只要类中提供了构造方法,默 认构造方法就无效。 构造方法特点: 1.3 对象、接口、包 一个对象的生命周期可以分为 3 个阶段:生成、使用、清除 对象是一组相关变量和相关方法的封装体,是类的一个实例。对象的特征是对象的行 为、状态和身份。 1.3.1 对象的生存 对象生成包括声明、实例化、初始化 3 方面内容。 一般格式先定义一个对象变量,再用关键字 new 生成一个对象,并为对象中的变 量赋初始值 type objectName = new type(【参数】 ) type objectName:声明时定义对象的类型,包括类和接口的复合类型。 new:new 关键字是实例化一个对象,给对象分配内存,它调用对象的构造方法, 返回该对象的引用。 type:指各种数据类型 1.3.2 对象的使用 对象的使用原则:先定义后使用。 对象的使用包括访问类成员变量和方法的调用,对象作为类成员使用和作为方法 参数(或返回值)使用。 访问格式: 对象名.调用的方法名或变量名 1.3.3 对象的清除 对象的清除指释放对象所占用的内存。其清除途径: 1、 依靠 java 的垃圾回收机制回收内存 2、 调用 System.gc() ,请求垃圾回收 3、 Java 系统开始运行时,自动调用 java.lang.Object.finalize()释放内存 4、 在程序中调用重写的 finalize()释放系统资源,其格式为: super.finalize(); 1.3.4 接口 接口是一种只含有抽象方法或常量的一种特殊抽象类。 在 java 语言中,abstract 修饰符定义的类称为抽象类,在其中的方法称为抽象方法。 abstract 类必须被继承, abstract 方法必须被重写,abstract 类不能实例化。 abstract 的格式: abstract class abstractClass 接口是不包含成员变量和方法的抽象类,它只包含常量和方法的定义。 接口的主要功能是: 不管类的层次,可实现互不相关的类具有相同的行为。 通过接口说明多个类所需实现的方法。 通过接口可以了解对象的交互界面。无需了解对象所对应的类。 接口定义:由接口声明和接口体组成。 程序中的接口定义写成: interface ActionListener /接口声明 void actionPerformed(ActionEvent) /方法定义 =public abstract void actionPerformed(ActionEvent) 这里省略了前面的修饰符 public abstract,这是所有接口中的方法的默认值。 接口的实现:接口的实现用关键字 implements。 接口不包括任何实现,与存储空间没有任何关系。 如果父类可以不带任何方法和变量定义时,应该选用接口而不用抽象类。 1.3.5 包 Java 采用包来管理类名空间。包为编程提供了一种命名机制、也是一种可见性限 制的机制,面向对象方法的封装机制。 包将类和接口封装在一起,便于大量类的接口的管理,并有利于类和接口的安全。 定义: 用关键字 package。在每个类的起始语句加入。 package com.cwch.gzb; 提示:用 package 语句说明一个包时,该包的层次结构必须与文件目录的层次相 同,否则在编译时可能出现查找不到的问题。 使用: 使用一个包中的类时,首先要用关键字 import 导入这些类所在的包: import com.cwch.gzb.*; 当包中有相同名字的类,在使用其中的类时,不用 import 导入,而是直接用带包 名的方法使用: 如 Date 类在 java.util.Date 包中,可直接引入: Class myDate extends java.util.Date 提示:java 语言的 java.lang 包是编译器自动导入的,编程时可不用导入,但使 用其他包中的类,必须用 import 导入。 1.4 类成员修饰符、继承、内部类、类库 1.4.1 类及类成员修饰符 常用的类成员修饰符: 1.4.2 继承 继承是面向对象方法的一种重要基本特征,它使代码可重用,可降低程序复杂性。 Java 语言中,所有的类都是通过直接或间接地继承 java.lang.Object 而得到的。对一个 类的继承是指在现有类(父类)的基础上构建一个新类(子类) ,子类重用(继承)了 父类的方法和状态,同时还可以向新类中增添新的方法和状态。 Java 不支持多重继承。通过在声明中加入 extends 子句来创建子类,其格式为: class SubClass extends SuperClass 重写方法必须遵循的两个原则: 子类方法的访问权限比父类方法的访问权限更高; 子类方法不能产生比父类方法更多的异常。 当子类隐藏了父类的变量,并重写了父类方法后,又要使用父类变量或父类被重 写的方法,可通过 super 来实现对父类变量的访问和对父类方法的调用。 Super 是用来 引用当前对象的父类。 Super 使用有 3 种情况: 用于访问被隐藏的父类成员变量,其格式为:super.变量名 用于调用被重写的父类方法,其格式为:super.方法名; 用于调用父类的构造方法,其格式为:super(【参数列表 】 ) 多态性: 面向对象的另一个重要特性事多态性,他是类的继承和封装性结合而引出的。 在 java 语言中,体现多台性有两方面:静态和动态。 静态的多态性:指编译是调用重写方法的一种机制,即同一个方法用不同参数 体现程序不同的调用,这是编译器在编译时自动确定实现。可以说,方法重载体现了 静态的多态性。 动态的多态性:指运行时,利用子类继续父类的所有变量和方法功能,凡是程序 使用父类的对象都可用子类的对象来代替。运行时,java 解释器会按照调用方法的对 象类型,确定调用子类或父类的方法去执行。这体现了动态多态性。 1.4.3 内部类 在一个类的内部嵌套定义的类称为内部类(Inner Class) ,与普通类相同,但有如 下特点: 通常,使用内部类来生成事件适配器。 1.4.4 类库 类库以包的形式组织,是包的集合。 J2SE 标准平台由工具软件和 java 类库(APIs )组成。其中,java 编程所必需的默 认引用包为 lang 包,实用工具在 util 包中,用户界面工具在 Swing 包和 AWT 包中。 最基本的包:java.lang 包 :运行时由 java 解释器自动引入,程序不用 import 引 入。由接口、类、异常组成。是 java 语言中最底层的类。 java.lang 包括的类有:1、 Object 类、2、Class 类、3、System 类、4、Thread 类 Object 类:是 java 所有类的 根类,其他类都由它扩展而来。在 Object 类中定义 的方法,其他类都可调用。 Class 类:是用于类操作的类。Class 对象由 java 编译器自动生成。隐藏在.class 文件中,它在运行时为用户提供信息,还提供运行时动态装入环境的操作类 ClassLoader。 System 类:是一个 final 类,即不能被实例化的类,它主要提供标准输入、输 出和系统环境信息。有 3 个很有用的成员变量:in (标准输入流对象) 、out (标准输 出流对象) 、err(出错流对象) Thread 类:是提供线程操作和管理的类。 实用工具包:java.util 包,包括许多常有工具的类和接口。 java.util 包括的类有: 1、 GregorianCalendar 日历类、2、Vector 类、3、Stack 类、4、Dictionary 类=5、 Hashtable 类=6、Properties 类 GregorianCalendar 日历类:提供日期和时间的表示,它以格里历(即阳历)来 计算。 Vector 类:实现了动态分配对象列表,使用于可变对象数组的类,它的内存容量 可按照需要自动增加。 Stack 类:实现先进后出的对象栈,是 Vector 的子类,它不能直接被访问,只能 从栈顶压入或弹出。 Dictionary 类 :是抽象类,不能实例化去创建一个对象,是关键字和值的数据存 储的集合。 Dictionary 类扩展出 Hashtable 类,Hashtable 类又扩展出 Properties 类。 1.5 一维数组 一维数组定义:type arrayName或 type arrayName 定义数组时并不分配内存,如要访问数组中元素必须对数组进行内存分配。数组 内存分配是通过 new 操作符或静态初始化来实现。 定义并创建一个数组对象:type arrayName=new typearraySize 如:int a=new int5 = int a=new int5 数组的长度:arrayName.length 数组下标:从 0 开始的整数。 数据边界:0 到 arrayName.length-1 数组初始化: 1、静态初始化 使用于数组元素的个数较少,而且是初始元素可以枚举的情况。 int a=2,3,4,5,6; 2、动态初始化 用 new 动态初始化时,数组元素的默认值参见下表: 数组的复制: 数组的复制可以用 java.lang.System.arraycopy()拷贝,格式: System.arraycopy(源数组名,从源数组下标的第几位开始,目标数组名,从目 标数组下标的第几位开始,复制几位) 调整数组的大小: Java 语言中用一种特殊的类:java.util.ArrayList(数组列表) ,在运行时能动态自 动调整数组大小。ArrayList 类在定义数组时,不必限定数组的大小。在数组列表初始 化时,可用 add()方法将数组元素赋值。 1.6 字符串的操作 在 Java 中,字符串是作为对象出现的,有 java.lang.String 和 java.lang.StringBuffer 定义,这两类都被定义为 final,即参数数据类型。 java.lang.String:处理长度不变的的字符串; java.lang.StringBuffer:处理长度可变的字符串 1.6.1 字符串常量的表示 字符串常量用“”括起来的字符序列。字符串常量可以用来直接初始化一个 String 对 象。字符串长度,即该字符串的个数。如: String s=“Are you student?”; int.length=“Are you student? ”.length(); 1.6.2 用 String 类表示字符串 在 Java 中 String 类提供构造方法可生成一个空串,如:String e=new String(); 通过字符数组或字节数组来生成一个字符对象,如: String (char value) char chars1=l,e,s,t ; String (char chars ,int startIndex,int numchars)=char chars2=l,e,s,t ,l; String s1=new String (chars1); String s2=new String (chars2,0,4);取数组 chars2 的字符,从下标 0 开始取 4 位 s1 与 s2 均为“lest” 字节也相同: String (bye byes) String (byebyes,int startIndex,int numchars) 1.6.3 用 StringBuffer 表示字符串 可用以下构造方法对可变字符长度初始化: StringBuffer(); 这是默认的构造方法,为字符串分配 16 个字符的缓存。 StringBuffer(int length); 该构造方法提供 length 缓存; StringBuffer(String str);用 str 给出字符串初值,并分配 16 个字符的缓存 凡生成 StringBuffer 一个对象后,还可用 setLength()方法或 ensureCapacity() 方法来设定缓存大小,并保证其数组元素的初值都为 0. 1.6.4 字符串的访问 String 类包括的方法有:length()、charAt()、indexOf()、lastIndexOf()、getChars()、 getBytes()、toCharArray()等。 提取字符串长度 String greeting=”Hello”; int n= greeting.length();/返回字符串的字符个数 n=5 提取字符串中指定字符 char last= greeting.charAt(4);/从字符串 0 数到 4 的字符是“t” ,将“t ”赋给 last。 提取字符串中多个字符 Public void getCharsw(int srcbegin,int end, char buf,int dstbegin ),其中: srcbegin:指定要提取的第一个字符在该字符串的位置; end:指定要提取的最后字符在该字符串的位置; buf:目的字符串存储的数组; dstbegin:指定提取字符插入目的字符串的位置 查询字符 在字符串中查询指定字符时,可用 indexOf(); 在字符串中查询指定子串时,可用 lastIndexOf(); 查询成功,返回所查字符的位置,不成功,返回-1。 1.6.5 字符串的修改 对 String 的修改 因它是固定长度字符串,修改必须通过实例。String 提供 concat()、replace()、 substring()、toLowerCase()、 toUpperCase()等方法: concat(String str):将当前字符串对象与指定 str 字符串相连; replace(char oldchar, char newchar): 用新字符替换老字符; substring(int beginIndex):按指定的起始位置获取子字符; toLowerCase():将字符串中所有字符变为小写; toUpperCase():将字符串中所有字符变为大写。 对 StringBuffer 的修改 因 StringBuffer 类表示可变长度字符串,它可以在字符串中插入字符和在字符串 尾加字符,缓存不必管理,Java 解释器自动分配。 方法包括:append() 、insert() 、SetCharAt(). 1.6.6 字符串的比较 测试字符串是否相等,用 equals()方法。 s. equals(t):比较字符串 s 和 t 是否相等。 两串相等则返回 ture、否则返回 false 1.6.7 其他操作 键盘读取字符串的对话框 Javax.swing.JOptionPane 用于从控制台键盘读入字符串,如: String input=JOptionPane.showInputDialog(“How old are you ?”);/该对话框带有提 示信息。 将字符串对象转换为基本数据类型 int age=Integer.parseInt(input);/将字符串 input 转换为整数类型 1.7 异常处理 Java 语言的类库中提供一个 Throwable 类,所有的异常对象都必须是它的实例或它子 类的实例。 Throwable 类是直接从 Object 类继承来的,是所有异常类的根(父类) 。其定义如下: public class Throwable exception Object implement Serializable 它有 public Throwable()和 public Throwable(String message) 两个构造方法,其中的字 符串参数可以利用 getMessage()方法获取参数内容。包括方法有:getMessage()、toString()、 printStackTrace()、fillStackTrace()。 getMessage():用来返回带参数构造方法是的参数内容,对无参数返回是空值。 toString():用来返回异常的类名和 getMessage()能得到的内容,两者用冒号分隔。 printStackTrace():用来在标准输出设备上输出堆栈使用的跟踪。 fillStackTrace():用来在重新抛出异常时对堆栈的跟踪。 Throwable 类分为 Error 和 Exception 两个子类。Error 类包括动态链接失败、硬件设 备和虚拟机出错,通常 Java 应用程序不会捕获和抛出这类异常,而是捕获和抛出 Exception。 异常类型: 按异常处理不同可分为运行异常、捕获异常、声明异常和抛出异常几种。 运行异常:编程时不用定义,运行时由系统捕获后交默认异常处理程序,在标准 输出上显示异常内容和位置:这些异常 jvm 都能自动发现并指出。 A、 算术异常:ArithmeticException,分母为 0 或用 0 取模都会出现。 B、 空指针异常:NullPointerException , 当访问一个空对象、空对象的变量或 方法、访问空数组时都会出现。 C、 类选项异常:ClassCastException ,当把一个对象强制为某个类,而该对 象又不属于该类(或子类)的实例时。 D、 数组负下标异常:NegativeArraySizeException,当数组的长度为负数时。 E、 数组索引越界异常:ArrayIndexOutOfBoundsException ,要求访问数组中 非法元素时。 捕获异常:要求在程序的方法中预先声明,在调用方法时用 trycatchfinally 语 句捕获并处理,用 throws 字句声明异常和定义自己的异常类,用 throw 语句抛出异常。 try 可能出现异常的语句 Catch(ExceptionName e) 异常处理 finally .释放资源 声明异常 抛出异常 异常处理原则: 1.8 输入输出以及文件操作 “流”可以看做是一个流动的数据缓存区。数据从数据源流向数据目的地,流的传送 是串行的。最常见的数据源始键盘,最常见的数据目的地是屏幕。 文件类 File 是 java.io 包中的一个重要的非流类。File 以一种系统无关的方式表示一个 文件对象的属性。 计算机中的流是流动的数据缓存区 在 java 中,字符是作为 Unicode 码来处理的,每个字符用 2 个字节表示。 Java 对 I/O 访问还提供来同步处理机制,这就是过滤流。 Java 的输入输出流包括:字节流(数据流) 、字符流、文件流、对象流以及多线程之 间通信的管道流。 I/O 流的方向 输入输出起到采集数据和提供数据处理结果的双重作用。 输入流:凡是从外部设备流向中央处理器的数据流 输出流:凡是从中央处理器流向外部设备的数据流 java.io 包中的接口 处理字节流(数据流):有 DataInput、DataOutput 接口: DataInputStream 类实现 DataInput 接口; DataOutputStream 类实现 DataOutput 接口; RandomAccessFile 类同时实现这两个接口。 处理对象流:有 ObjectInput、ObjectOutput 接口: ObjectInputStream 类实现 ObjectInput 接口; ObjectOutputStream 类实现 ObjectOutput 接口; 处理字符流:有 Reader 字符输入流、Writer 字符输出流 BufferedReader 带缓冲区的字符输入流 BufferedWriter 带缓冲区的字符输出流 处理文件流: 处理管道流:PipedInputStream 和 PipedOutputStream java.io 包中的抽象类: 处理字节流的抽象类:InputStream 和 OutputStream 处理过滤流的抽象类:FilterInputStream 和 FilterOutputStream ,他们是 InputStream 和 OutputStream 的子类。 处理字符流的抽象类:Reader 和 Writer 类 处理压缩流的抽象类:InflaterInputStream 和 DeflaterOutputStream 非字符输入流 非字符输出流 过滤字节输入流 1.9 线程与对象串行化 进程是由代码、数据、内核状态和一组寄存器组成; 进程是一个内核级的实体,进程结构的所有成分都在内核空间中,一个用户程序不能 直接访问这些数据。 线程是由表示程序运行状态的寄存器(如,程序计数器、栈指针以及堆栈)组成。线 程不包含进程地址空间中的代码和数据,是计算过程在某一时刻的状态。 线程是一个用户级的实体,线程结构驻留在用户空间中,能够被普通的用户级方法直 接访问。 1.9.1 Java 中的线程模型 线程是程序中的一个执行流。 Java 中的线程模型就是一个 CPU、程序代码和数据的封装体。 其模型包括 3 部分: A、一个虚拟 CPU; B、该 CPU 执行的代码; C、代码所操作的数据。 1.9.2 线程创建 Java.lang 的 Thread 类是多线程程序设计的基础。 一个具体的线程也是由虚拟 CPU、代码与数据组成,其他代码与数据构成来线程 体,线程的行为由线程体决定。Java 中的线程体由线程类的 run()方法定义,在该方 法中定义线程的具体行为。 线程的开始:从它的 run()方法开始; Java Application 的开始:从 main()开始; Applet:从 init()开始 两种创建线程的方法: 1、 通过实现 Runnable 接口创建线程 class Hello implements Runnable public void run() 2、 通过继承 Thread 类创建 class Hello extends Thread public void run() 1.9.3 线程的调度与线程控制 Java 中的线程是有优先级的,Thread 类有 3 个线程优先级的静态常量: MIN_PRIORITY:通常为 1,最小优先级; NORM_PRIORITY:默认值 5,普通优先级; MAX_PRIORITY:通常为 10,最高优先级。 线程的优先级是 MIN_PRIORITY 与 MAX_PRIORITY 之间的一个值,数值越大优先级越高。 新建线程将继承创建它的父线程的优先级,一般主线程具有普通优先级。 获取线程优先级:getPriority(); 设定线程的优先级:setPriority(); 线程的调度:指在单个 CPU 上以某种顺序运行多个线程。 Java 的线程调度策略:是一种基于优先级的抢先式调度,选择高优先级的线程进行运 行。 线程终止运行原因有多种:1、执行 Thread.sleep();2、等待访问共享的资源 线程的基本控制 1、 sleep():使比其优先级低的线程运行; 2、 yield():只让给同优先级线程运行 3、 join(): 4、 interrupt();使线程中断状态被清除 5、 currentThread():返回当前线程 6、 isAlive():测试线程是否活着 7、 stop():强行终止线程,容易造成线程的不一致,建议使用标志 flag 终止其 他线程运行 8、 suspend()与 resume():调用 t. suspend(),暂停 t 执行,要恢复,必须用 t. resume():容易造成死锁。建议使用 wait()和 notify() 1.9.4 线程同步 用 wait()和 notify()可以实现线程的同步,这是实现线程通信的两个方法。 对象的加锁: Java 中对共享数据操作的并发控制采用传统的封锁技术。 一个程序中单独的、并发的线程对同一个对象进行访问的代码段,称为临界区。Java 语言中临界区可以是一个语句块或是一个方法,并且用“synchronized”关键字标识。Java 平台将每个由 synchronized(Object )语句指定的对象设置一个锁,称为对象锁(monitor ) , 其对象锁是一种独占的排他锁(exclusive locks):当一个线程获得来对象锁后,便拥有该 对象的操作权,其他任何线程不能对该对象进行任何操作。 1.9.5 死锁的防治 如果程序要访问多个共享数据,则首先从全局考虑定义一个获得锁的顺序,并且在 整个程序中都遵守这个顺序。释放锁时,要按加锁的反序释放。 1.9.6 线程状态与生命周期 线程的生命周期主要分为 5 个状态:新建状态(new)、可运行状态(Runnable)、运行状 态(Running)、阻塞状态(Blocked)、终止状态(Dead)。 1.9.7 对象串行化 对象的串行化:对 java 对象的读、写的过程称为对象的串行化(Object serialization) 对象永久化:将 java 程序中的对象保存在外存中,称为对象永久化 对象的串行化在下列情况下使用: 1、 JAVA 远程方法调用 RMI(Remote Method Invocation) 通过 socket 进行对象间通信。这种远程对象的互操作中,有时需要传输对象。 2、 对象永久化 保存程序中的对象,以便在该程序的日后运行中使用 串行化对象的方法 从一个流重构一个对象首先要完成将对象写到一个流中。 1、 把对象写到对象输出流 通过调用 ObjectOutputStream 类的 writeObject()方法实现。 ObjectOutputStream 类是一个过滤类,因此,对象流必须在其他流的基础 上进行构造。如下,对象流 s 在一个文件输出流上构造: Date d=new Date(); FileOutputStream f=new FileOutputStream(“date.txt”); ObjectOutputStream s=new ObjectOutputStream(f); s. writeObject(d); f.close(); 2、 从对象输入流读取对象 当已经到对象或基本数据类型的数据写入一个对象流后,可以在以后的 操作中把它们读进内存并重构这些对象。 从对象流中读取对象时使用 ObjectInputStream 类的 readObject()方法。 读对象时要按照它们的写入顺序读取。 Date d=null; FileInputStream f=new FileInputStream(“date.txt”); ObjectInputStream s=new ObjectInputStream(f); d= (Date) s.readObject(); f.close(); System.out.Println(“d:”+d.toString(); 构造可串行化对象的类 一个类只有实现了 Serializable 接口,它的对象才是可串行化的。 在实现 Serializable 的类中,静态变量和使用 transient 关键字可以使某些数据不被串行 化。 串行化中对敏感信息的保护 最简单的方法是把一个类中包含敏感数据的成员变量(或称为域)定义为 private transient。 Transient 和 static 类型的数据项不能进行串行化和反串行化。 1.10编写图形用户界面 Java 的图形用户界面技术经历了两个发展阶段,分别通过提供 AWT 开发包和 Swing 开发包来体现。 AWT 和 Swing 的三点思路: 1、 界面中的构件如何放置; 2、 如何让构件响应用户的操作; 3、 掌握每种构件的显示效果和响应用户操作 1.10.1 用 AWT 编写图形用户界面 抽象窗口工具包 AWT(Abstract Window Toolkit)是 java 提供的建立图形用户界 面 GUI 的开发包,AWT 可用于 java 的 Applet 和 Application 中。 其支持图形用户界面编程的主要功能包括: 用户界面构件; 事件处理模型; 图形和图像工具,包括形状、颜色和字体类; 布局管理器,其与特定窗口尺寸和屏幕分辨率无关; 数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴 Java.awt 包提供来三个概念: 构件(Component) ;2、容器(Container) 、3、布局管理器(LayoutManager) 构件不能独立地显示出来,必须将构件放在一定得容器中才可以显示出来。所有 构件都可以通过 add()方法添加到容器中。 容器本身也是一个构件,具有构件的所有性质,还具有放置其他构件和容器的功 能 有 3 种类型的容器:Window、Panel、ScrollPane 常用的有 Frame、panel 、Applet panel 即时容器又是构件 布局管理器是用来管理构件放置在容器的位置和大小。每个容器都有一个布局管 理器。通过 setLayout(null)取消布局管理器。 FlowLayout 是 Panel 和 Applet 的默认布局管理器。 AWT 事件处理模型 事件处理涉及 3 类对象: 1、 事件(Event) ; 2、 事件源(Event Source); 3、 事件处理者(Event Handler) 使用授权处理模型进行事件处理的一般方法: 1、 对于某种类型的事件 XXXEvent,要接收并处理这类事件,必须定义相 应的事件处理类,该类需要实现与该事件相对应的接口 XXXListener; class ButtonHandler implements ActionListener 2、 事件源实例化以后,必须进行授权,注册该类事件的监听器,使用 AddXXXListener(XXXListener)方法来注册监听。 Button b=new Button(“保存”);/事件源实例化 b.AddActionListener(newButtonHandler();/授权,注册事件监听器 事件类 java.util.EventObject 类是所有事件对象的基础父类。所有事件均由它派生出来。 与 AWT 有关的所有事件类都由 java.awt.AWTEvent 类派生出来,也是 EventObject 类的子类。 AWT 事件分为两大类:低级事件和高级事件 事件监听器 1、 注册监听器 add(Listener) 2、 注销监听器 remove(Listener) AWT 构件库 1.10.2 用 Swing 编写图形用户界面 Swing 是由纯 java 实现的轻量级构件,没有本地代码,不依赖操作系统的支持。 Swing 采用了一种 MVC 的设计范式,即“模型- 视图-控制 ”(Model-View- Controller) ,其中: 模型:用来保存内容; 视图:用来显示内容; 控制器:用来控制用户输入。 Swing 是 JFC(java Foundation Classes)的一部分。 几乎所有的 Swing 构件都在 swing 包中,只有 JTableHeader 和 JTextComponent 是 例外。JTableHeader 在 swing.table 包,JTextComponent 在 swing.text 包中。 Swing 构件以“J ”开头 在一个 MVC 用户界面中,存在三个通信对象:模型、视图和控件: 模型是指定的逻辑表示法; 视图时模型的可视化表示法; 控件则指定了如何处理用户输入。 1.11Applet 程序设计 Applet 是 java 与 web 相结合而引入的一种重要的 java 应用形式。 Applet 是能够嵌入到 HTML 页面中,并能够在浏览器中运行的 java 类。 Applet 自身不能运行,必须嵌入在其他应用程序(web 浏览器或 java appletviewer ) 中运行。 Applet 与 Application 的主要区别在执行方式上: Application 以 main()方法为入口点运行,Applet 要在浏览器或 appletviewer 中运行。 Applet 的运行过程经历 4 个步骤: 1、 浏览器加载指定 URL 中的 HTML 文件; 2、 浏览器解析 HTML 文件; 3、 浏览器加载 HTML 文件中指定的 Applet 类; 4、 浏览器中的 java 运行环境运行该 Applet。 Applet 的生命周期:包括 Applet 的创建、运行与消亡。 Applet 是一个面板容器,它默认使用 Flow 布局管理器。 Applet 的关键方法:指生命周期方法和 Applet 显示方法 生命周期方法:init()、start() 、stop() 、destroy() init():装载 Applet 是被调用; start():在 init()方法之后被调用; 当浏览器重新返回 Applet 所在页面时,将 调用该方法。 stop():在浏览器离开含有 Applet 的网页时被调用; destroy():在浏览器完全关闭之前被调用。 Applet 的显示: paint()方法:Applet 初次显示时调用 repaint()方法:用于 Applet 重新显示,运行过程中浏览器窗口大小发生变化时调 用 update()方法:用于更新 Applet 的显示。 每个 Applet 必须至少实现 init()、start()和 paint()中的一个方法。与 java Application 不同, Applet 不需要实现 main()方法。 Applet 要嵌入在 HTML 页面中才能运行。通过使用标记,至少要指 定 Applet 子类的位置以及浏览器中 Applet 的显示尺寸。 Java 平台提供的安全模型被称为沙箱模型。通过签名信任技术使一些 Applet 成 为可信代码,被允许访问沙箱之外的系统资源。 每个 Applet 必须定义为 Applet 的子类。 一个 Applet 标记中,必须出现的属性项有:CODE 、WIDTH、HEIGTH 编写同时具有 Applet 与 Application 的特征的程序,具体方法: 作为 Application 要定义 main()方法,并把 main()方法所在的类定义为一个 public 类。为使该程序成为一个 Applet,main()方法所在的这个类必须继承 Applet 类 或 JApplet 类。 JDK J2SDK 的命令可以分为 6 类:基本命令、RMI 命令、国际化命令、安全控制命 令、java IDL 和 RMI-IIOP 一个类的定义分为类注释、类声明和类体的定义 成功编写好的 java 程序代码应该: 遵守命名规则;为代码写文档、注释;为代码分段;适当使用空白行;遵守第 32 条规则(成员方法不要太长) 类名和接口名都采用完整的英文描述符,并且所有单词的第一个字母大写。 布局管理器的相关类主要包括: FlowLayout、BorderLayout 、 GirdLayout、CardLayout 、GridBagLayout FlowLayout 是 Panel 和 Applet 的默认布局管理器。 BorderLayout 是 Window、Frame 和 Dialog 的默认布局管理器, BorderLayout 把 容器分为 5 个区域:North、 South、East、West 和 Center GridLayout 布局管理器使容器中各个构件呈网格状布局,平均占据容器的空间。 CardLayout 牌布局管理器能帮助用户处理两个以至更多的成员共享同一显示空 间 任何嵌入在 web 页面中或 appletviewer 中的 Applet 必须是 java 中 Applet 的子类。 2 数据库基础 2.1 关系模型的完整性 E-R 图中: 矩形表示实体、椭圆表示属性、菱形表示联系 关系模型中通常可分为三类完整性约束:实体完整性、参照完整性、用户定义的完 整性。 其中实体完整性、参照完整性是关系模型必须满足的完整性约束条件。由关系数据库 管理系统(RDBMS)自动支持。 用户定义的完整性是应用领域要遵守的约束条件,体现了具体领域的语义约束,用户 可利用 RDBMS 或开发工具提供的相应功能实现。 实体完整性规则:是对关系中主属性的约束。若属性 A 是基本关系 R 的主属性,则属 性 A 不能取空值。就是主键不能取空值。 关系完整性规则:就是定义外键和主键之间的参照应用规则。参照就是属性的引用。 参照完整性规则:即外键只能取空值(每个属性值为空,即表中没有数据) ,或者取 被参照关系中的主键值,别无其他选择。 用户定义完整性:就是针对某一具体关系数据库的约束条件,它反映某一具体应用所 涉及的数据必须满足的语义要求。如,学生成绩的取值范围必须在 0100 之间等。 2.2 关系代数 关系代数是关系数据操纵语言的一种传统表达方式。 数据库中传统的集合运算均为 N 目表示 N 列,n 个属性;元组,即一行一行的数据 有 R、S 如下: 1、 并:Union 关系 R 和 S 的并:由属于 R 或属于 S 的元组组成,其结果任为 n 目(即 n 个属性) 。即将 R 和 S 合并,相同的行取其一,不同的行并在一起。 2、 差:Difference :由属于 R 而不属于 S 的元组组成其结果任为 n 目关系,即 在 R 中去掉与 S 相同的行即可,如: 3、 交:Intersection:既属于 R 又属于 S 的元组,即,取 R 和 S 相同的行 4、 广义笛卡尔积:n 列 k1 行 R,m 列 k2 行 S,RxS 后为 n+m 列,k1 x k2 行 专门的关系运算 专门的关系运算有四种:选择、投影、连接和除 关系 R 如下: 1、 选择 selection():从行的角度运算,从关系 R 中选出符合要求的行。 A=a1或 1=a1 :表示关系中第 A 列或第 1 列字段的值为a1 。 第二列则 2=b1 ,第二列字段为 B,还可表示为 B=b1 。 求关系 R 中字段 A=”a1” 则表示为 A=a1 (R ) ,则如下: 2、 投影 projection():从列的角度运算,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论