360 likes | 616 Views
第 6 章 程序包和核心类. 包( package ). 作用 组织相关的源代码文件 防止类型名称发生冲突 提供程序包级别的封装和访问控制 其作用相当与 c 语言中的命名空间 使用方法: 使用关键字 package 在源代码的最前面添加一行: package somePackage 没有 package 声明的会成为 unnamed 程序包的一部分. 例 1 : package my.javaWork ; public class HelloWorld{ public static void main(String[] args){
E N D
包(package) • 作用 • 组织相关的源代码文件 • 防止类型名称发生冲突 • 提供程序包级别的封装和访问控制 其作用相当与c语言中的命名空间 • 使用方法: 使用关键字package 在源代码的最前面添加一行: package somePackage • 没有package声明的会成为unnamed程序包的一部分
例1: package my.javaWork; public class HelloWorld{ public static void main(String[] args){ System.out.println(“Hello World!”); } }
导入包 • 使用关键字import。有2种方式 • import java.util.ArrayList; • import java.util.*; • import java.util.Zip.*;
程序包命名约定 • 使用所在机构的Internet域名构成程序包的前缀。 • 如:org.w3c.dom.Document是机构 w3c.org的域名为前缀 EDU.ken.cs.factor.*是机构cs.ken.edu的域名为前缀
包的使用方法 • 类属于某个包,那么类的源文件必须放置在该package所对应的相对路径下。 如:例1的源文件必须放置在相对路径 my\javaWork下 • 要使用某个程序包,需要将它的程序包目录包括到CLASSPATH中。 • 执行java程序时,必须到指定的包路径的上一层路径下执行。
如何编译执行例1 说明:在示范执行该类时,当前路径是d:\ • 先在当前目录下建以下目录:my\javaWork • 把例1的源文件存放在 d:\my\javaWork目录下,取名HelloWorld.java • 编译:命令行中,在当前路径下输入 javac my\javaWork\HelloWorld.java 或在任意路径下输入: javac d:\ my\javaWork\HelloWorld.java • 执行:在d:\路径下输入 java my.javaWork.HelloWorld
输入和输出 • java.io程序包提供面向字节和面向字符的I/O流,以支持大量实用的输入输出操作和将程序与操作系统特定的I/O细节隔离开来。 • 流是代表数据、字节或字符的有序序列的对象,这种对象具有输入源和输出目标。
3种标准的I/O流:System.in、System.out、System.err可用于每个java程序。这些流是System类中用于从终端接受字节和向终端发送字节的静态字段。3种标准的I/O流:System.in、System.out、System.err可用于每个java程序。这些流是System类中用于从终端接受字节和向终端发送字节的静态字段。 • System.in是InputStream类的实例, System.out、System.err是PrintStream类的实例。
面向字节的I/O受InputStream、OutputStream及其子类的支持。用于ASCII和二进制I/O面向字节的I/O受InputStream、OutputStream及其子类的支持。用于ASCII和二进制I/O • 面向Unicode字符的I/O受Reader、Writer及其子类的支持。用于读写文本。
文件I/O • InputStream/OutputStream的一个直接子类FileInputStream/FileOutputStream用于文件输入/输出 • new FileInputStream(name)-打开与name指定的文件名、File对象活FileDescriptor对象相连的输入流。 • new FileOutputStream(name)-打开与name指定的文件名、File对象活FileDescriptor对象相连的输出流
File类提供用于在主机平台上检查和处理文件名、文件和目录的方法。创建File对象的语句:File类提供用于在主机平台上检查和处理文件名、文件和目录的方法。创建File对象的语句: • new File(name) • new File(dir.name) 例:File fo = new File(“c:\\abc\\xyz”);
缓冲式I/O • BufferedInputStream/BufferedReader和BufferedOutputStream/BufferedWriter 添加字节/字符缓冲区 例: BufferedOutputStream out = new BufferedOutputStream (new FileOutputStream(“outFile”)); BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
PrintStream/PrintWriter • PrintWriter输出代表基本类型和对象的字符串。使用重写的toString方法把基本数据类型、字符串和对象转换为字符序列输出。 • PrintStream功能类似,只是输出时会根据平台默认的字符编码把字符转换成字节
文件更新 • 使用RandomAccessFile同时对一个文件进行读写。 • 例2:LowerIO.java
文本和Unicode字符的I/O • 字符的输入输出由抽象的Reader和Writer子类来完成 • 例如:InputStreamReader和OutputStreamWriter类基本上可以提供与InputStream和OutputStream相同的操作,只是操作对字符起作用而不是对字节起作用。
DataInputStream和DataOutputStream • 提供了用于直接读写java的所有基本数据类型的方法。 • readType( )-返回读取的基本类型。 • writerType(d) -将参数d编写为指定的基本类型。 • 例4:DataIO.java
ObjectInputStream和ObjectOutputStream • 用于直接读取对象。 • 要使用对象I/O,该对象必须实现Serializable接口。 • 例4:FreeIO.java
数字和日期格式化 • 见包java.text
捕获异常 try{ …… }catch(e-type1 e) {……} catch(e-type2 e) {……} …… finially{ …… }
指定异常 在方法名后加 throws Exception_1,…Exception_I 如: public void doio( )throwsSQLException, IOException
抛出异常 方法可以检测错误并指出或抛出异常。要抛出异常必须创建一个异常对象并使用throw运算符即可。 如: public void doio( File fo) { if( fo = = null) thrownewIOException(“File not found”); ……. }
异常类型 • Java解释程序异常-java运行时系统会在执行程序的过程中对字节代码进行解释,可以检测多种错误和异常(如空指针、除数为0、非法数组索引等)java解释程序保留了RuntimeException和Error类下的异常,java解释程序只会抛出这些异常。也叫运行期异常
已检测的异常-除java运行期异常都是已检测的异常。已检测的异常供用户代码使用,而且是方法调用的一部分。方法会指定可能由方法头中的throws子句引起的已检测异常。由编译器来检查throws规范是否正确。因此调用任何java方法时,都要知道应该如何处理已检测的异常。已检测的异常都是Exception超类的子类已检测的异常-除java运行期异常都是已检测的异常。已检测的异常供用户代码使用,而且是方法调用的一部分。方法会指定可能由方法头中的throws子句引起的已检测异常。由编译器来检查throws规范是否正确。因此调用任何java方法时,都要知道应该如何处理已检测的异常。已检测的异常都是Exception超类的子类
创建自定义异常 • 自定义的异常类都必须是Exception的直接或间接子类。 • 如: public class MatrixException extendsException { public MatrixException() {} public MatrixException(String s) { super(s); } }
其他核心包 • 数学计算 类:java.lang.Math为数学计算提供方法。 • java.util 例5:日期和日历的使用
系统和环境属性 • 显示系统和环境属性 • 加载和设置属性。 prop.txt是一个已存在的属性文件 Properties p = System.getProperties( ) Properties basePros = new Properties( p); FileInputStream in = new FileInputStream(“prop.txt”); basePros.load( in);
import java.io.*; import java.util.Properties; public class ShowProp { public static void main(String[] args) throwsIOException { Properties p= System.getProperties(); p.list(System.out); FileOutputStream o = new FileOutputStream("prop.txt"); p.store(o, "Here it is"); o.close(); } }
Properties p = System.getProperties( ) Properties basePros = new Properties( p); FileInputStream in = new FileInputStream(“prop.txt”); basePros.load( in);
小结 • InputStream(System.in)、OutputStream、FileInputStream、FileOutputStream-支持面向字节的I/O(8位) • InputStreamReader、OutputStreamWriter-提供字符I/O(16位unicode)。 • BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter-缓冲字节和字符I/O • PrintStream、PrintWriter-输出ASCII和基本类型与对象类型的字符串表示。
RandomAccessFile-执行面向字节的文件更新和添加操作RandomAccessFile-执行面向字节的文件更新和添加操作 • DataInputStream、DataOutputStream-为基本类型执行二进制I/O • ObjectInputStream、ObjectOutputStream-为可串行化的对象执行二进制I/O。 • 一些常使用的核心包java.text、java.lang.Math、java.util等