输入输出和反射Word文档格式.docx

上传人:b****4 文档编号:6428278 上传时间:2023-05-06 格式:DOCX 页数:26 大小:28.34KB
下载 相关 举报
输入输出和反射Word文档格式.docx_第1页
第1页 / 共26页
输入输出和反射Word文档格式.docx_第2页
第2页 / 共26页
输入输出和反射Word文档格式.docx_第3页
第3页 / 共26页
输入输出和反射Word文档格式.docx_第4页
第4页 / 共26页
输入输出和反射Word文档格式.docx_第5页
第5页 / 共26页
输入输出和反射Word文档格式.docx_第6页
第6页 / 共26页
输入输出和反射Word文档格式.docx_第7页
第7页 / 共26页
输入输出和反射Word文档格式.docx_第8页
第8页 / 共26页
输入输出和反射Word文档格式.docx_第9页
第9页 / 共26页
输入输出和反射Word文档格式.docx_第10页
第10页 / 共26页
输入输出和反射Word文档格式.docx_第11页
第11页 / 共26页
输入输出和反射Word文档格式.docx_第12页
第12页 / 共26页
输入输出和反射Word文档格式.docx_第13页
第13页 / 共26页
输入输出和反射Word文档格式.docx_第14页
第14页 / 共26页
输入输出和反射Word文档格式.docx_第15页
第15页 / 共26页
输入输出和反射Word文档格式.docx_第16页
第16页 / 共26页
输入输出和反射Word文档格式.docx_第17页
第17页 / 共26页
输入输出和反射Word文档格式.docx_第18页
第18页 / 共26页
输入输出和反射Word文档格式.docx_第19页
第19页 / 共26页
输入输出和反射Word文档格式.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

输入输出和反射Word文档格式.docx

《输入输出和反射Word文档格式.docx》由会员分享,可在线阅读,更多相关《输入输出和反射Word文档格式.docx(26页珍藏版)》请在冰点文库上搜索。

输入输出和反射Word文档格式.docx

  skip():

跳过流中若干字节数

  available():

返回流中可用字节数

  mark():

在流中标记一个位置

  reset():

返回标记过得位置

  markSupport():

是否支持标记和复位操作

  close():

关闭流

  intread():

从输入流中读一个字节,形成一个0~255之间的整数返回(是一个抽象方法)。

  intread(byteb[]):

读多个字节到数组中。

 intread(byteb[],intoff,intlen):

从输入流中读取长度为len的数据,写入数组b中从索引off开始的位置,并返回读取得字节数。

  write(intb):

将一个整数输出到流中(只输出低位字节,抽象)

  write(byteb[]):

将字节数组中的数据输出到流中

  write(byteb[],intoff,intlen):

将数组b中从off指定的位置开始,长度为len的数据输出到流中

  flush():

刷空输出流,并将缓冲区中的数据强制送出

  注:

进行I/O操作时可能会产生I/O例外,属于非运行时例外,应该在程序中处理。

如:

型FileNotFoundException,EOFException,IOException

  四、文件操作类的方法

  File类

  File类声明如下:

  publicclassFileectendsObjectimplementsSerializable,Comparable

  构造方法:

  publicFile(Stringpathname)

  publicFile(Filepatent,Stringchild)

  publicFile(Stringpatent,Stringchild)

  文件名的处理

  StringgetName();

//得到一个文件的名称(不包括路径)

  StringgetPath();

//得到一个文件的路径名

  StringgetAbsolutePath();

//得到一个文件的绝对路径名

  StringgetParent();

//得到一个文件的上一级目录名

  StringrenameTo(FilenewName);

//将当前文件名更名为给定文件的完整路径

  文件属性测试

  booleanexists();

//测试当前File对象所指示的文件是否存在

  booleancanWrite();

//测试当前文件是否可写

  booleancanRead();

//测试当前文件是否可读

  booleanisFile();

//测试当前文件是否是文件(不是目录)

  booleanisDirectory();

//测试当前文件是否是目录

  普通文件信息和工具

  longlastModified();

//得到文件最近一次修改的时间

  longlength();

//得到文件的长度,以字节为单位

  booleandelete();

//删除当前文件

  目录操作

  booleanmkdir();

//根据当前对象生成一个由该对象指定的路径

  Stringlist();

//列出当前目录下的文件

  文件过滤器

  类FilterInputStream和FilterOutputStream分别对其他输入/输出流进行特殊处理,它们在读/写数据的同时可以对数据进行特殊处理。

另外还提供了同步机制,使得某一时刻只有一个线程可以访问一个输入/输出流。

  类FilterInputStream和FilterOutputStream分别重写了父类InputStream和OutputStream的所有方法,同时,它们的子类也应该重写它们的方法以满足特定的需要

  要使用过滤流,首先必须把它连接到某个输入/输出流上,通常在构造方法的参数中指

定所要连接的流:

  FilterInputStream(InputStreamin);

  FilterOutputStream(OutputStreamout);

这两个类是抽象类,构造方法也是保护方法

  类BufferedInputStream和BufferedOutputStream实现了带缓冲的过滤流,它提供了缓冲机制,把任意的I/O流“捆绑”到缓冲流上,可以提高读写效率

  在初始化时,除了要指定所连接的I/O流之外,还可以指定缓冲区的大小。

缺省大小的缓冲区适合于通常的情形;

最优的缓冲区大小常依赖于主机操作系统、可使用的内存空间以及机器的配置等;

一般缓冲区的大小为内存页或磁盘块等地整数倍,如8912字节或更小。

  BufferedInputStream(InputStreamin[,intsize])

  BufferedOutputStream(OutputStreamout[,intsize])

  文件对话框

  随机文件操作

  于InputStream和OutputStream来说,它们的实例都是顺序访问流,也就是说,只能对文件进行顺序地读/写。

随机访问文件则允许对文件内容进行随机读/写。

在java中,类RandomAccessFile提供了随机访问文件的方法。

类RandomAccessFile的声明为:

  publicclassRandomAccessFileextendsObjectimplementsDataInput,DataOutput

  File:

以文件路径名的形式代表一个文件

  FileDescriptor:

代表一个打开文件的文件描述

  FileFilter&

FilenameFilter:

用于列出满足条件的文件

  File.list(FilenameFilterfnf)

  File.listFiles(FileFilterff)

  FileDialog.setFilenameFilter(FilenameFilterfnf)

  FileInputStream&

FileReader:

顺序读文件

  FileOutputStream&

FileWriter:

顺序写文件

  RandomAccessFile:

提供对文件的随机访问支持

  类RandomAccessFile则允许对文件内容同时完成读和写操作,它直接继承Object,并且同时实现了接口DataInput和DataOutput,提供了支持随机文件操作的方法

  DataInput和DataOutput中的方法

  readInt(),writeDouble()…

  intskipBytes(intn):

将指针乡下移动若干字节

  length():

返回文件长度

  longgetFilePointer():

返回指针当前位置

  voidseek(longpos):

将指针调到所需位置

  voidsetLength(longnewLength):

设定文件长度

  RandomAccessFile(Filefile,Stringmode)

  RandomAccessFile(Stringname,Stringmode)

  mode的取值

  “r”只读.任何写操作都将抛出IOException。

  “rw”读写.文件不存在时会创建该文件,文件存在时,原文件内容不变,通过写操作改变文件内容。

  “rws”同步读写.等同于读写,但是任何协操作的内容都被直接写入物理文件,包括文件内容和文件属性。

“rwd”数据同步读写.等同于读写,但任何内容写操作都直接写到物理文件,对文件属性内容的修改不是这样。

  五、字符流的方法

  Reader类和Writer类

  在JDK1.1之前,java.io包中的流只有普通的字节流(以byte为基本处理单位的流),这种流对于以16位的Unicode码表示的字符流处理很不方便。

从JDK1.1开始,java.io包中加入了专门用于字符流处理的类,它们是以Reader和Writer为基础派生的一系列类

  同类InputStream和OutputStream一样,Reader和Writer也是抽象类,只提供了一系列用于字符流处理的接口。

它们的方法与类InputStream和OutputStream类似,只不过其中的参数换成字符或字符数组

  Reader类

  voidclose()

  voidmark(intreadAheadLimit)

  booleanmarkSupported():

  intread()

  intread(char[]cbuf)

  intread(char[]cbuf,intoff,intlen)

  booleanready()

  voidreset()

  longskip(longn)

  Writer类

  voidflush()

  voidwrite(char[]cbuf)

  voidwrite(char[]cbuf,intoff,intlen)

  voidwrite(intc)

  voidwrite(Stringstr)

  voidwrite(Stringstr,intoff,intlen)

Class

1、Class是Java程序中各个Java类的总称;

它是反射的基石,通过Class类来使用反射。

2、Class和class的区别

1)class:

Java中的类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则由此类的实例对象确定,,不同的实例对象有不同的属性值。

2)Class:

指的是Java程序中的各个Java类是属于同一类事物,都是Java程序的类,这些类称为Class。

例如人对应的是Person类,Java类对应的就是Class。

3、属性:

类名,类的访问属性,类所属包名,字段名称列表,方法名称列表等。

二、对象的创建和使用:

1、创建实例对象:

不可用newClass()的方式,因为Class没有这样的构造方法。

而是将字节码对象赋值给Class变量。

如Classc1=Person.class。

如Person类,它的字节码:

首先要将Person的java文件编译为class文件放于硬盘上,即为二进制代码,再将这些代码加载到内存中,接着用它创建一个个对象。

就是把类的字节码加载进内存中,再用此字节码创建一个个对象。

当有如Person、Math、Date等等的类,那么这些字节码就是分别的一个Class对象。

即Classc2=Date.class;

2、获得类的字节码对象:

如Class.forName(”java.lang.String”)即获得String.class。

得到这个字节码对象有两种情况:

1)此类已经加载进内存:

若要得到此类字节码,不需要再加载。

2)此类还未加载进内存:

类加载器加载此类后,将字节码缓存起来,forName()方法返回加载进来的字节码。

3、得到各字节码对应的实例对象(Class类型)的方式:

1)类名.class:

如System.class,String.class等等

2)对象.class:

如newDate().getClass()或者d.getClass()。

(Dated=newDate())

3)Class.forName(“类名”):

如Class.forName(”java.lang.String”)

当获取类名的时候,是不知道此类的名称的,forName(字符串参数)方法中传入字符串型的变量作为对外访问的入口,即传入什么类名就获得什么类名,从而得知相应的类名。

注:

forName()是静态方法,是反射中使用的一种方式获取字节码的实例对象。

每个类的字节码对象只有唯一的一个,如任何字符串对象,对应唯一的String.clas字节码。

4、九个预定义的Class:

1)包括八种基本类型(byte、short、int、long、float、double、char、boolean)的字节码对象和一种返回值为void类型的void.class。

2)Integer.TYPE是Integer类的一个常量,它代表此包装类型包装的基本类型的字节码,所以和int.class是相等的。

基本数据类型的字节码都可以用与之对应的包装类中的TYPE常量表示

数组类型的Class实例对象,可以用Class.isArray()方法判断是否为数组类型的。

5、总结:

只要是在源程序中出现的类型都有各自的Class实例对象,如int[].class、void.class等。

三、方法:

1、staticClassforName(StringclassName)

--->

返回与给定字符串名的类或接口的相关联的Class对象。

2、ClassgetClass()

--->

返回的是Object运行时的类,即返回Class对象即字节码对象

3、ConstructorgetConstructor()

返回Constructor对象,它反映此Class对象所表示的类的指定公共构造方法。

4、FieldgetField(Stringname)

返回一个Field对象,它表示此Class对象所代表的类或接口的指定公共成员字段。

5、Field[]getFields()

返回包含某些Field对象的数组,表示所代表类中的成员字段。

6、MethodgetMethod(Stringname,Class…parameterTypes)

返回一个Method对象,它表示的是此Class对象所代表的类的指定公共成员方法。

7、Method[]getMehtods()

返回一个包含某些Method对象的数组,是所代表的的类中的公共成员方法。

8、StringgetName()

以String形式返回此Class对象所表示的实体名称。

9、StringgetSuperclass()

返回此Class所表示的类的超类的名称

10、booleanisArray()

判定此Class对象是否表示一个数组

11、booleanisPrimitive()

判断指定的Class对象是否是一个基本类型。

12、TnewInstance()

创建此Class对象所表示的类的一个新实例。

示例:

publicstaticvoidfuction()throwsException{

Stringstr1="

abc"

;

Classcls1=str1.getClass();

Classcls2=String.class;

Classcls3=Class.forName("

java.lang.String"

);

System.out.println(cls1==cls2);

//true

System.out.println(cls1==cls3);

//判断是否为基本类型:

isPrimitive()

System.out.println(cls1.isPrimitive());

//false

System.out.println(int.class==Integer.class);

//Integer.TYPE代表包装类对应的基本数据类型的字节码

System.out.println(int.class==Integer.TYPE);

System.out.println(int[].class.isPrimitive());

//判断是否为数组类型的

System.out.println(int[].class.isArray());

}

反射

1、概述:

把Java类中的各种成分映射成相应的Java类。

如Class中的每一个方法返回的都是一种类(型),即Method对所有方法抽取成了这个类Method,它的每一个对象(如变量methodObj1)代表了一个方法。

2、一个类中的组成成分:

成员变量、方法、构造函数、包等信息,也用一个个java类来表示(如汽车是一个类,其中的发动机,变速箱等也是对应的一个个类),表示Java类的Class类显然要提供一系列的方法来获取其中的变量、方法、构造函数、修饰符、包等信息,这些信息就是用相应的类的实例对象来表示,他们是Field、Method、Contructor、Package等。

3、一个类中的每个成员都可用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可得到这些实例对象。

反射中的各种类

一、Constructor类

Constructor代表某个类的构造方法

2、获取构造方法:

1)如何得到摸个类的所有构造方法:

如得到String类的所有构造方法

Constructor[]cons=Class.forName(“java.lang.String”).getConstructors();

2)获取某一个构造方法:

Constructorcon=String.class.getConstructor(StringBuffer.class);

3、创建实例对象:

1)通常方式:

Stringstr=newString(newStringBuffer(”abc”));

2)反射方式:

Stringstr=(String)con.newInstance(newStringBuffer(“abc”));

调用获得的方法时要用到上面相同类型的实例对象,即两个StringBuffer()要对应相等。

NewInstance():

构造出一个实例对象,每调用一次就构造一个对象。

注意:

上面的两个地方①②都要用到StringBuffer,这必须是一致的。

第①个是指定要带StringBuffer参数类型的构造方法,即所需使用的是含StringBuffer类型的构造方法。

第②个是用这个构造方法创建对象,要传入的参数类型是StringBuffer。

4、Class.newInstance():

创建一个对象,不带参数的构造方法。

演示:

//newString(newStringBuffer("

));

Constructorconstructor1=

String.class.getConstructor(StringBuffer.class);

Stringstr2=

(String)constructor1.newInstance(newStringBuffer("

System.out.println(str2);

//Class.newInstrance创建不带参数的构造方法

Stringstr3=

(String)Class.forName("

).newInstance();

System.out.println("

str3:

"

+str3);

二、Field类

Field类代表成员变量(字段)的反射。

publicclassReflectPoint{

privateintx;

publicinty;

publicStringtoString(){

returnstr1+"

+str2+"

+str3;

}

publicclassFieldTest(){

ReflectPointpt1=newReflectPoint(3,5);

//fieldX和fieldY并不是对象身上的变量,而是类上的

//要用它去取某个对象上的对应的值,传入什么对象,就取相应对象的值。

FieldfieldY=pt1.getClass().getField("

y"

System.out.println(fieldY.get(pt1));

//获取私有的成员变量

FieldfieldX=pt1.getClass().getDeclaredField("

x"

fieldX.setAccessible(true);

System.out.println(fieldX.get(pt1));

2、获取成员变量:

如上例子所示:

1)获取公有的成员变量:

getField(Stringname)和get(变量)

2)获取私有的成员变量:

暴力反射

getDeclared(Stringname)

setAccessible(boo

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2