• 1. Java核心◆第一章:JAVA前言 ◆第二章:标识符、关键字、类型 ◆第三章:表达式与控制流 ◆第四章:数组 ◆第五章:对象和类(OO思想) ◆第六章:高级语言特性 ◆第七章:标准I/O流与文件
  • 2. 第一章 JAVA 前言◆JAVA的特点 ◆JAVA运行原理 ◆JAVA目录 ◆JDK (Java Development Kit) ◆设置环境变量 ◆类装载机制 ◆JAVA程序
  • 3. JAVA的特点◆简单 (Java语法是C++语法的一个“纯净”版本) ◆可移植性 (一次编译到处运行) ◆面向对象 ◆分布式 (使网络任务变得容易) ◆健壮性 ◆多线程 ◆安全 ◆动态 ◆体系结构中立
  • 4. JAVA 的运行原理◆编译:*.java文件 ------------> *.class文件 ◆运行:*.class文件------> 加载----> JVM (JAVA虚拟机)
  • 5. JAVA的目录◆JRE ———— 运行环境 ◆SRC ———— 类库 ◆BIN ———— 应用程序 (二进制,JAVA工具) ◆demo ———— 范例 ◆include ———— C语言
  • 6. JDK (Java Development Kit)◆JDK是整个java的核心,包括了Java运行环境(Java Runtime Envirnment),Java工具和Java基础类库(rt.jar) ◆JDK的下载和安装: ——下载 (http://java.sun.com/j2se/downloads.html) ——安装 ◆JDK的命令工具 ——java: 启动JVM执行class ——javac: Java编译器 ——jar: Java打包工具 ——javadoc: Java文档生成器
  • 7. 设置环境变量◆csh (服务器) setenv JAVA_HOME /opt/java/jdk/jdk 1.5.0_06 setenv PATH /opt/java/jdk/jdk 1.5.0_06/bin:$PATH setenv CLASSPATH ◆bsh/ksh (本机) export JAVA_HOME=/opt/java/jdk/jdk 1.5.0_06 //JDK安装路径 export PATH=/opt/java/jdk/jdk 1.5.0_06/bin:$PATH export CLASSPATH=. // 设置为点,默认为当前目录 ◆检测 echo $PATH . . Bashrc java javac
  • 8. 类装载机制◆启动类(bootstrap)装载器 $jdk/jre/lib/rt.jar ◆扩展类(extension)装载器 $jdk/jre/lib/ext/* ◆系统类(system)装载器 $CLASSPATH Helloworld ------>Helloworld.class System System(.) 双亲委托机制:系统类------>扩展类------>启动类(委托),上一级不要先装载,装载不成功时才开始装载。 报出错误:classNotFound ◆网络类装载器 作用:保证JAVA的优良特性
  • 9. 例子回到HelloWorld的例子。当虚拟机一开始加载HelloWorld类的时候,它的initiating class loader是application class loader,该类调用extension class loader,它又调用bootstrap class loader;bootstrap class loader(在rt.jar中)找不到HelloWorld类,抛出异常;extension class loader截获异常后开始试图自己加载,但是它(在扩展包内)也找不到HelloWorld,于是也抛出异常;application class loader截获这个异常,它在CLASSPATH中找到了HelloWorld于是加载并定义了这个类,所以HelloWorld类的defining class loader就是这个application class loader实例。
  • 10. JAVA 程序◆源文件:在最顶层只包括一个public类型的类/接口,文件名与类/接口名相同并以.java作为文件后缀 —— package:包 —— import:导入 —— class:类 —— method:入口点是固定的 (public static void main)
  • 11. HelloJava.java◆规定包名:lesson.ch01 ◆编写: lesson/ch01/HelloJava.java package lesson.ch01 /** *This is my first java program, *which output the string “hello java, so simple !” */ import java.lang.*; public class HelloJava{ public static void main (String[] args){ System.out.println (“hello java, so simple !”); } } ◆编译:javac -d./lesson/ch01/HelloJava.java ◆运行:java lesson.ch01.HelloJava
  • 12. 第二章 标识符,关键字,类型◆3种类型的注释 ◆Java中的语法规则 ◆命名规则 ◆标识符 ◆关键字 ◆基本数据类型 ◆内存的逻辑分区 ◆程序范例 ◆类与对象
  • 13. 3种类型的注释◆单行注释: —— //注释内容 ◆多行注释: —— /*注释内容*/ ◆文档注释: —— /**注释内容*/ —— 生成帮助文档:javadoc –d ******.java —— 示例:javadocs –d doc/ch01/Hello.java
  • 14. Java 中的语法规则◆java语句以分号结束; ◆java的代码块包含在大括号内; ◆忽略空格“space” 和换行符“Tab”,它们无特殊含义
  • 15. 命名规则◆类/接口名:单个单词的首写字母大写,复合词则每个单词首写字母都大写 ◆方法、变量名:第一个单词首写字母小写,其余单词的首先字母大写 ◆常量名称:全部字母大写,单词间用“_”连接 ◆包名:全部字母小写
  • 16. 标识符:程序元素的名字◆用以命名类、方法和变量、以及包 ——遵守JAVA命名规范 ——类名的每个单词都以大写字母开头 ——方法和变量名第一个单词的首字母小写,其他的大写 ◆以字母、“_”或“$”开头 ◆大小写敏感,即大小写严格区分 ◆无长度限制
  • 17. 关键字:一类已经被启用的标识符◆所有Java关键字都是小写英文字符串,不同于C语言中的TRUE、FALSE、NULL等 ◆Java中不建议使用“goto”和“const”,在JAVA语言里无意义,但作为关键字保留 ◆“ture”,“false”和“null” 不属于关键字,属于保留字
  • 18. 基本数据类型◆决定了内存空间大小以及对内存空间所存放的值的类型的限制,有整数(数值)型、浮点型、文本型(字符类型)、逻辑型(布尔型) TypeBytesBitsRange整数型 (数值型)byte1B8位-128到127Short2B16位2^15到2^15-1Int4B32位-2^31到2^31-1long8B64位-2^64到2^63-1浮点类型float4B32位单精度double8B64位双精度文本型(字符类型)char8B16位————逻辑型(布尔型):boolean false/true 讨论它占了多少字节是没有任何意义 的,大多数情况下是占了32bit
  • 19. 基本数据类型◆注: (1) char是无符号的16位整数,字面值必须用单引号括起来,例‘a’ (2) String 是类,非原始数据类型,本质上不属于基本数据类型,属于复杂类型 (3) 长整型字有一个后缀为“L”或“l”,八进制前缀为“0”,十六进制前缀为“0x” (4)默认整数类型为int,默认浮点类型为double (5)float数据类型必须有一个后缀为“f”或“F”,double数据类型后可以跟后缀“D”或“d” (6)在JAVA中的编码都是Unicode编码,长度都是以16bit作为单位的,不分中英文。
  • 20. 脚下留心String,StringBuffer,StringBuilder的区别? 1. String:不可变字符串,在大量字符串进行连接时不使用String; 2.StringBuffer:Java5中的可变字符串,线程安全的; 3.StringBuilder:线程不安全的,性能较高,没有多线程的情况下进行大量字符串连接时使用;
  • 21. 内存的逻辑分区◆栈区:先进后出的分配原则------>通常存放局部变量 ◆堆区:自由存储区 c/c++:动态分配的内存,指针变量 java:对象 ◆代码区:专门用于存放函数的区域 函数指针:函数在代码区当中的地址 指针函数:函数的返回值为指针类型的函数 ◆静态常量存储区
  • 22. 类与对象 语言层面 实际应用 ---------------------------------------------------------------- 类 群体 对象(object) 个体 实例(instance) 分配内存空间 实例化 创建对象 成员变量(member variable) 属性(attribute) 成员方法(member method) 操作(operation) 引用(reference) 唯一标识/地址 引用型变量(reference variable)
  • 23. 第三者 表达式与流控制◆变量和作用域 ◆操作符 ◆类型(造型)转换 ◆流控制
  • 24. 变量和作用域◆局部变量 —— 范围:定义在一个方法内部的变量 —— 作用域:所在代码块 —— 生命周期:从创建开始到方法结束 —— 特点:使用之前必须初始化 —— 一律放在栈中 ◆实例变量 —— 范围:定义在一个类内部但不在方法中的变量 —— 作用域:整个类 —— 生命周期:对象被创建开始,到对象被垃圾回收结束 —— 特点:如未定义初值,系统默认初始化(null) —— 每一个对象的实例变量的值是相互独立的 —— 一律放在堆中 区别:局部变量先赋值,再运行;实例变量均已经赋初值。
  • 25. 变量和作用域◆默认数值 类型 默认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char ‘\u000’空格 boolean false String null
  • 26. 操作符◆>> 和<< (移位):高位正数补零,复数补一 >>> (移位):无符号右移,高位始终补零 ◆& (与),相同保留,不同取零; | (或),相同保留,不同取一; ^ (异或),相同取零,不同取一; ~ (取反):全部相反 ◆&& (短路与):前面为假,表达式为假,后面不须计算 ◆|| (短路或):前面为真,表达式为真,后面不计算 ◆赋值运算:a+=b和a=a+b ◆条件运算:A?a:b,A为一个独立的表达式,若A为True,则取“:”前面的;否则取“:”后面的
  • 27. 类型(造型)转换◆分类 隐身转换:低精度向高精度的转换(不用任何说明就能转换成功) 显示转换:高精度向低精度的转换(须对其进行强制性转换说明) ◆原则:在类型转换时保证数据的完整性 ◆基本数据类型之间的转换 byte ——> short ——> int ——> long char ——> int ------> float float ——> double long ------> float ——>表示无信息损失的转换 long ------> double ------>表示转换可能引起损失 int ------> double ◆强制类型转换:double x=9.997; int nx=(int)x; ◆转换的两种类型:赋值、方法调用 赋值: double d=1.0f; int i=(int)d; 方法调用: double converValue (int value){return value;} ◆数值计算转换:科学计算法
  • 28. 流控制◆判断结构 if() {……} if() {……} else {……} if() {……} else if {……} else {……} ◆switch块 switch (){ case variable: {……} …… Default: System.put.println (“default”); } ◆循环语句 for(;;) {……} while() {……} do {……} while(); ◆break:跳出本层循环。continue:结束本次循环,重新开始下一轮循环
  • 29. 第四章 数组◆声明数组 ◆创建数组 ◆初始化数组 ◆多维数组 ◆数组长度 ◆数组拷贝
  • 30. 声明数组◆一组相同类型数据的有序的集合,声明数组必须指明其类型 ◆一个数组是一个对象:意味着数组一类存放于堆中,且必须得new创建出来之后才能使用,所有的对象都具有相同的属性length; ◆声明一个数组并没有创建一个对象 ◆以下形式声明: int[] i 或 int i[]; Car[] c 或 Car c[];
  • 31. 创建数组:new◆创建基本数据类型数组:int[] i=new int[2]; ◆创建引用数据类型数组:Car[] c=new Car[100]; ◆数组创建后有初始值:数字类型为0,布尔类型为false,引用类型为null ◆边界问题:索引号是以0开始的
  • 32. 初始化数组◆初始化、创建、和声明分开 int[] i; i=new int[2]; i[0]=0; i[1]=1; ◆初始化、创建和声明在同一时间 int[] i={0,1}; Car[] c={new Car(), new Car()};
  • 33. 多维数组◆有效:不对称数组,在java中允许,但在C++中不允许 int[][] i1=new int [2][3]; int[][] i2=new int [2][]; i2[0]= new int[2],i2[1]=new int[3]; ◆无效 int[][] i1=new int [][3]; ◆高维数组创建必须从低维度向高维度依次序创建
  • 34. 数组长度------数组的属性lengthint[] i = new int[5]; Int len=i.length; //length=5 Student[][] st = new Student[4][6]; len=st.length; //lenth=4,行数 Len=st[0].length; //lenth=6; 第一行列数
  • 35. 数组拷贝:拷贝一个数组到另一个数组◆System.arrayCopy (Object src, int srcPos, Object dest, int destPos, int length); ◆System.arrayCopy (被拷贝数组的引用,被拷贝数组的起始位置,目标数组的引用,目标数组的起始位置,拷贝元素的个数);
  • 36. 第五章 对象和类(OO思想)◆基本概念 ◆方法的定义格式 ◆参数的传递方式 ◆this关键字 ◆封装 ◆对象创建和初始化过程 ◆继承 ◆多态 ◆面向对象与面向过程
  • 37. 基本概念◆封装:隐藏信息;使方法的实现细节不可见;统一对所有用户的接口;提高效率 ◆继承:通过已有的类去扩展新的类 ◆多态:同一类域的不同对象在调用相同方法的时候表现不同的现象(针对对象的行为而言)
  • 38. 方法的定义格式◆方法定义的格式:([])[throws]{} ◆:访问修饰符,没有先后顺序。例public static, static public, private等 ◆:方法的返回值类型,一个方法没有返回值时就必须定义为void,构造方法没有返回类型 ◆:方法名,方法名表示方法在代码区当中的地址 ◆([]):参数列表(表示函数的入口),可选 ◆[throw]:声明抛出的异常类型,可选 ◆{}:方法体(即方法中的执行的代码)
  • 39. 参数的传递方式:按值传递,按引用传递◆8种基本数据类型的参数传递:按值传递是对应参数的值拷贝的过程,因此不会改变传入参数的值 ◆引用类型的参数传递:按引用传递,有可能对所传入的“参数所指向的值”产生影响 ◆Java语言总是使用传值调用,这意味着方法得到的只是所有参数值的拷贝。 (1) 对于基本数据类型:参数传递方法不能修改传递给它的任何参数变量的内容 (2) 对于引用类型:参数传递的是传递该对象的引用,方法中并不能改变对象变量,但能通过修改该变量的引用修改其所指向的对象
  • 40. this关键字:当前对象的引用◆当局部变量和实例变量出现命名冲突时,Java中表现为就近原则,因而java处理这种现象是使用this.variableName表示实例变量 ◆两种用法: (1) this.variableName(实例变量):区分同名的实例变量和局部变量 (2) this(参数列表):用于调用本类的构造器
  • 41. this关键字:当前对象的引用◆关键字this:是个隐式参数,代表构造的对象 public class Person{ private String name; public void setName(String name){ this.name=name;} } ◆如果构造器的第一个语句具有形式this(…),那么这个构造器将调用同一类中的其他构造器 ◆在构造器中this()必须放在方法的第一行
  • 42. 封装◆编码阶段的封装 (1)数据隐藏(信息隐藏): private修饰符 (2)行为的不可见:方法实现细节的不可见;统一的接口 ◆编译阶段的封装:方法重载 (1)方法名必须相同 (2)参数列表必须不同 (3)返回类型无关要紧 (4)overloading方法对于不匹配的参数是从低到高传递的:byte — short — int — long — float —double注意:1.在程序的编译过程中根据变量类型来找相应的方法,Overloading被认为是“编译时的多态”。
  • 43. 对象创建和初始化的过程(JVM的工作)◆在堆区开辟对象本身所在的存储空间,返回对象在堆区所在的地址给对象的引用(在栈区开辟对象的引用所在的存储空间) ◆对对象的属性进行默认初始化 ◆显示初始化:声明一个变量时同时对其赋值 ◆调用构造器对象进行初始化(对象的构建过程中,目的是简化代码) (1)一个特殊的函数,生成对象的过程中调用的方法,但构造器并不能创建对象,也叫构造方法 (2)特点:它的名字和类完全相同,没有返回类型 (3)作用:能够让类的使用者提供一个初始化的值,初始化要求尽可能分离在其方法中,然后在构造器中调用
  • 44. 继承(主要目的:代码复用)◆条件:满足“is a”关系才可以继承 ◆语法:public subclass extends superclass{…} ◆单根继承:不允许多重继承,一个子类只能有一个父类,但一个父类可以有若干个子类,JAVA中所有类都有一个祖先类Object(没有父类) ◆父类中的构造器不能继承,但可以被调用;方法和成员变量都可以被继承 ◆Super关键字:表示父类数据区的引用 ◆弊端:减少代码的灵活性破坏了耦合性原则—低耦合,高内聚
  • 45. 多态◆概念:不同类型的对象虽然是相同的操作但执行的是不同的过程 ◆注意:对象的类型永远所固定 ◆编译阶段看变量类型,运行阶段看对象类型 ◆运行期问题:具体调用哪个方法在运行阶段才能确立 ◆操作符instanceof: (1)涵义:判断引用型变量所指的对象是否是在操作符后的类的自身或者它的子类中 (2)返回结果是boolean型
  • 46. 多态◆转换: (1)上朔造型:将子类类型变量转换成父类类型变量是隐式的 (2)下朔造型:将父类类型转换成类类型是显示的 ◆方法覆盖(方法重写): (1)范围:父子类之间 (2)条件:具有相同的方法名;可见范围不能被缩小 ◆多态的三种表现形式 (1)父类 引用=new 子类(); 接口 引用=new 实现类(); (2)方法声明:public void method(父类 参数){}; 方法调用:method(new 子类()); (3)public 父类 method() { return new 子类()}
  • 47. 面向对象与面向过程◆对象的概念: (1)万物皆对象 (2)所有事物都有属性和方法两个方面 (3)一个对象的属性也可以说一个对象:对象的关联 ◆为什么要使用面向对象 (1) 符合人类看待事物的一般规律 (2) 使系统各部分各司其职、各尽所能 ◆比较面向过程的思想和对象对象的思想 (1)面向过程由过程、步骤、函数组成,以过程为核心 (2)以对象为中心,先开发类,得到对象,通过对象之间相互通信实现功能 ◆在用面向对象思想开发的过程中,可以对对象进行复用,如无法进行复用则开发新的对象
  • 48. 第六章 高级语言特性◆修饰符static ◆修饰符final ◆修饰符abstract ◆接口 ◆object类 ◆内部类(Inner class) ◆包装器类(Wrapper class) ◆集合collection ◆反射(镜像)
  • 49. 修饰符static◆静态类变量(修饰成员变量) static int data ◆静态方法(修饰方法) public static void printData(){} ◆静态代码块:只被执行一次 ◆静态内部类 class Out{ public static class Inner{} } ◆Static通常用于Singleton模式开发
  • 50. 修饰符final◆final型变量(修饰变量时) (1)当final修饰一个变量时,该变量变为常量 (2)利用public static final的组合方式对常量进行表示 (3) Final变量在整个类被创建时赋值,之后不能更改 ◆final型方法(修饰方法时) (1)final方法不能被覆盖,只能被继承 (2)为保证方法的一致性,可将方法用final定义 (3)final和abstract永远不会同时出现 ◆final类(修饰类时) (1)final类不能被继承,即final类没有子类 (2)final保证用户调用时动作的一致性
  • 51. 修饰符Abstract◆抽象方法(修饰方法时):子类继承抽象类时必须实现其中的抽象方法 ◆抽象类(修饰类时) (1)如果一个类声明为abstract,表明此类不能创建对象(不能实例化),只能声明变量 (2)Abstact类的设计是将子类的共性最大限度的抽取出来 (3)带有抽象方法的类一定是抽象类,但抽象类可以没有抽象方法 (4)Abstract类可以作为编译时类型,但不能作为运行时类型
  • 52. 接口◆接口是抽象类的另外一种形式 ◆在一个接口中所有的方法都是抽象方法 ◆接口中所有变量都必须被定义为final static ◆接口中可以继承多个接口(可多重继承) ◆接口只有两种语法成分:静态常量和公有抽象方法
  • 53. Object类◆Object类: JAVA中有一个特殊的类,它是JAVA体系中所有类的父类,此类中的方法可以使所有的类均能继承 ◆操作符“==”和方法equals() (1) “==”:比较的是引用,表示其引用值是否相等,即是否指向同一对象 (2) equals:比较的是对象,其默认比较规则就是“==” (3) 实现标准equals()方法的流程 ◆finalisze方法:当一个对象被垃圾收集器回收时调用的方法 ◆toString():是利用字符串来表示对象的方法,简化输出
  • 54. 内部类(Inner class)◆概念:指在一个类的内部再定义一个类。它可以访问外围类的私有成员。 ◆特点:缩小类的访问范围;用内部类定义在外部类中不可访问的属性,实现比外部类的private还要小的访问权限 ◆内部类可为静态:可用Protected和private修饰 ◆内部类的分类:与成员变量同一级别;与方法中的局部变量同意级别
  • 55. 内部类(Inner class)◆概念:指在一个类的内部再定义一个类。它可以访问外围类的私有成员。 ◆特点:缩小类的访问范围;用内部类定义在外部类中不可访问的属性,实现比外部类的private还要小的访问权限 ◆内部类可为静态:可用Protected和private修饰 ◆内部类的分类:与成员变量同一级别;与方法中的局部变量同意级别
  • 56. 内部类(Inner class)◆成员内部类 (1)概念:作为外部类的一个成员存在,与外部类的属性、方法并列 (2)特点:必须依附于外围类的实例而存在,能访问外围类的一切成员 (3)在内部类访问实例变量:this.属性 (4)构建成员内部类实例: 在外围类以外的地方(new outer()).new Inner(); 在外围类内部: this.new Inner(); ◆静态内部类: (1)静态内部类定义在类中,任何方法外,用static定义 (2)静态内部类只能访问外部类的静态成员 (3)不需要构建外围类实例就可直接构建静态内部类实例
  • 57. 内部类(Inner class)◆局部内部类 (1)概念:在方法中定义的内部类称为内部类 (2)与局部变量类似,在局部变量内部前不能使用修饰符public, protected, private和static (3)局部内部类可以访问外部类的一切成员 (4)可见范围缩小到一个方法的内部 ◆匿名内部类: (1)概念:一种特殊的局部内部类,通过匿名类实现接口 (2)一个匿名内部类一定是在new的后面,隐含着继承一个父类或者实现一个接口 (3)利用父类或接口的名字代替new后面的名字创建对象 (4)利用父类或接口声明变量:接口名 对象名=new 接口名(){…}; (5)匿名内部类在编译的时候由系统自动起名Out$1.class
  • 58. 包装器类:Wrapper Class◆功能:将基本类型数据包装成对象 int i=5; 或String s=“5”; Integer integer= new Integer(i 或 s); // 装箱(box):包装成对象 int j=integer.intValue(); // 拆箱(unbox):提取数据 对于String型数据来说以上两步相当于: int j=Integer.parseInt(s);
  • 59. 集合:Collection◆概念:指一个可以容纳多个对象(不是引用)的对象,这个集合对象主要用来管理和维护一系列相似的对象 ◆集合三要素:若干个接口,接口的实现类和算法 ◆集合接口类层次:位于package java.util.* ◆集合类层次
  • 60. 集合:Collection◆Collection接口的方法 add (Object o) addAll (Collection c) contains (Object o) …… ◆Iterator(迭代器):读集合的一个工具 public interface Iterator{ boolean hasNext(); Object next(); void remove(); }
  • 61. 反射(镜像)◆作用 (1) 动态构建类的实例:确定一个对象的类 (2) 获得类的内部信息:获得一个类的修改符、变量、方法、构造函数、和父类等相关信息 (3) 改变类的一些特性 ◆获取镜像仅有的三种方式 (1)知道类的对象:object o=xxxx; Class clazz=o.getClass (2)知道类名获取镜像: java.uil.ArragList; Class clazz=ArrayList.class (3)知道存放类名的字符串: String s=“xxxx”; Class clazz=Class.forName(s)
  • 62. 反射(镜像)◆通过反射修改类的特性 (1)修改一个对象的实例变量值: Field.set(instance, value); (2)调用一个对象上的方法: Method.invoke(instance,new Object[] {value1,value2}) (3)调用一个类中的构造器: Constructor.newInstance(new Object[] {value1,value2});
  • 63. 第七章 标准I/O流与文件◆I/O流基础 ◆I/O输入输出
  • 64. I/O 流基础◆Input/Output:跨越出了JVM的边界,与外界进行数据交换 输入:以应用程序为准,玩程序中放入代码 输出:程序往外发送 ◆流的分类: 从数据类型分:字节流和字符流 从数据方向分:输入流和输出流 从流的功能分:节点流和过滤流
  • 65. I/O 流基础◆对文件的操作 (1) File类(java.io.File):可表示文件或者目录 (2) File的方法: Boolean createNewFile(); //创建文件 Boolean mkdir(); //创建目录 Boolean mkdis(); //创建多个目录 ……. (3) 处理跨平台性 File newD=new File(“aa”+File.separator+“bb”+File.separator+“cc”); File newF=new File(newD,“mudi.txt”); try{ newD.mkdirst(); newF.createNewFile(); }catch(Exception e){}
  • 66. I/O输入输出◆InputStream类:所有字节输入流的父类 (1)三个基本的read()方法: int read(); int read(byte[]); int read(byte[], int, int) (2)其他方法: void close(); int available(); …… ◆OutputStream方法 (1)三个基本的write()方法: void write(); void write(byte[]); void write(byte[], int, int) (2)其他方法: void close(); void flush(); ……
  • 67. I/O输入输出◆FileInputStream和FileOutputStream:结点流,使用磁盘文件 ◆DataInputStream和DataputStream:过滤流,输出输入各种数据类型 ◆ObjectInputStream和ObjectOutStream:过滤流,处理对象的持久化 ◆BufferInputStream和BufferOutputStream:过滤流,可以提高I/O操作的效率 ◆PipedInputStream和PipedOutputStream:用来在线程间通信 ◆Reader和Writer ◆BufferedReader和PrinterWriter:过滤流
  • 68. I/O输入输出◆随机存取文件 实现了二个接口:DataInput和DataOutput 只要文件能打开就能读写 通过文件指针能读写文件指定位置 ◆持久化:将一个对象存放到存储器上称为持久化 ◆RandomAccessFile类 RandomAccessFile (String name, String mode) RandomAccessFile (File name, String mode) ◆对象序列化与反序列化 ◆字节流与字符流