??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
** int read(buf):从流中读取n个字节放入缓冲区Q方法会q回一个读取字节的个数 ips-->buf
d一?1Q说明读C的末尾
------------------------------------------------------------------------------------------
|---FileInputStream: 重蝲的构造函?nbsp; (String fileName) (File file)
2.OutputStreamQ?输出字节?:Ҏ write(int c)一个字节写入流 (byte)c
write(buf,offset,len)指定字节数l的一部分写入?buf-->ops
-------------------------------------------------------------------------------------------
|---FileOutputStream: 重蝲的构造函?(Strng fileName) (String fileName, boolean append)
append:指定数据是否q加到文件的末尾Q默认是falseQ覆盖原有的数据Q?br /> 讄为trueQ将数据q加到文件的末尾
3.ReaderQ输入字W流 int read() M个字W?nbsp; int read(buf) buf是char[]cd
|---FileReader: FileReader = InputStreamReader(FileInputStream) 只做了一件事Q解?父类在做)
4.WriterQ输出字W流 write(int c) (char)c \ write(String str)
|---|---FileWriter: FileWriter = OutputStreamWriter(FileOutputStream) 只做了一件事Q编?/p>
理解(会用)Q?br />1.装饰设计模式Q?对原有的cȝq行包装Q对Ҏq行增强
BufferedReaderQ实现缓冲的功能 创徏包装对象的时候,必须l合一个被包装的底层流
增加了一个新Ҏ String readLine() M?br />|--LineNumberReader: 增加了行号功能,getLineNumber() 、setLineNumber()
BufferedWriterQ实C~冲功能 new BufferedWriter(new FileWriter("1.txt");
增加了新Ҏ newLine() 另v一?br />BufferedInputStreamQ实现缓冲的功能
BufferedOutputStreamQ实现缓冲的功能
2.InputStreamReaderQ?转换?nbsp; : 包装Q实C~码解码的功?br />new InputStreamReader(new FileInputStream("1.txt"));
3.使用包装包装System.inQ读键盘方便Q可以读一?br />BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
IO需要会写的E序Q?BufferedReader和BufferedWriter包装InputStream和OutputStreamQ读一行写一?/p>
BufferedReader和BufferedWriter包装Reader和Writer
BufferedInputStream和BufferedOutputStream包装InputStream和OutputStream
用基读写,自定义数l作为缓冲区Q实现拷?br />
-------以下做一个ȝ:
io?数据传输的中转站-->IO?->目的?/p>
IO一般都是成对出现的,也就是说按照的分向:输入?->输出?br /> IO按照操作来? 字节?->字符?br />
一.字符?br />基类:Reader(?Writer(?
|-Reader
|--BufferedReader:对Readerq行了包?提供了缓冲区(8192),有ReadLine()Ҏ
构造函?BufferedReader(Reader r);
|--InputStreamReader:转换?字节流转换成字W流:new InputStreamReader(System.in);
|--FileReader:d文g的字W流,FileReader(File file) FileReader(String fileName);
|-Writer
|--BufferedWriter:包装?常用的方法write(String s)、flush()h newLine()换行
构造函?BufferedWriter(Writer w);
|--OutputStreamWriter:转换? new OutputStreamWriter(System.out);
|--FileWriter:写入文g,FileWriter(File file) FileWriter(String fileName)
FileWriter(File file,boolean append),FileWriter(String fileName,boolean append)
当append为true,写入到文g的末֤,当ؓfalse?从文件开头开始写.׃覆盖原来?默认为false
?字节?
|-InputStream(输入?
|--FileInputStream:d文g的字W流,和FileReader基本是一?br /> |--FilterInputStream:qo?一般不使用,只是针对了InputStreamq行了包?br /> |--BufferedInputStream:包装c?BufferedReader(InputStream in),提供~存功能
|-OutputStream(输出?
|--FileOutputStream:写入文g的字W流,和FileWriter基本一?br /> |--FilterOutputStream
|--BufferedOutputStream:包装c?BufferedWriter(OutputStream out);
?使用IO必要捕获异常,原因在于我们必须要还资源(关闭?
1 FileWriter fw = null; 2 try 3 { 4 fw = new FileWriter("src/1.txt"); 5 } 6 catch(IOException e) 7 { 8 e.printStractTrace(); 9 } 10 finally 11 { 12 try{if(fw!=null)fw.close();}catch(IOException){e.printStackTrace();} 13 }
?File文gc?br />1.构造方?
File(File parnt,String child)
Ҏprent抽象路径名和child路径名字W串创徏一个新的file实例.
File(String pathname)
通过给定的路径名字来创Z个新的file实例.
File(String parent, String child)
Ҏ parent 路径名字W串?child 路径名字W串创徏一个新 File 实例.
2.常用Ҏ:
isFile:判断对象是否是一个标准文?br />isDirectory:判断对象是否Z个文件夹
isAbsolute:判断是否Z个绝对\?br />exists:判断对象指定的文件是否存?br />createNewFile:Ҏ对象的描q创Z个对?br />getName:获得文g?br />getPath:获得路径?br />getParent:获得文g的父U抽象\?br />getAbsolutepath:获得文g的绝对\径名
mkdir:创徏此抽象\径指定的目录,(只能在存在的文g夹下创徏一个目?
mkdirs:创徏此抽象\径指定的目录,包括所有必M不存在的目录.创徏多目录(c:/a/b/c)
list(FilenameFilter filter)Q根据指定过滤器遍历文g夹中的所有文Ӟq回String[]
如果对象为标准文Ӟ则返回nullQ如果对象是一个空文g夹,则返回空数组。length?
FilenameFilter是一个接口,只有一个方法acceptQ我们需要实现接口的acceptҎ?br /> 实现cLllistҎ自动调用?br /> Ҏ的参数是listҎ传给我们的,q回的结果也是给listҎȝ?br />listFilesQ和list基本一Pq回值类型不一Pq回File[]?br />常用案例Q遍历目录下所有的文g和文件夹 拯一个文件夹 .
?RandomAccessFile 文g?可以d
1.RandomAccessFile(File file,String mode)、RandomAccessFile(String fileName,String mode)
mode:常用? r,只读 rwd
2.有很多read和writeҎ.
seekҎ,指定从那个位|开始读seek(0) ,从原有的位置覆盖?br />skipBytes(int n)Q蟩q多个字节
?PrintStream、PrintWriter打印?br />有一个特D的Ҏprint可以实现打印
writeҎ是直接将字节和字W写出去
printQ首先调用对象的toStringҎ转成字符?如果是基本数据类型,会先自动装箱)
再将字符串编码成字节数组Q调用writeҎ写出?/p>
?SequenceInputStream序列?br />可以多个字节流l合h
构造方法:SequenceInputStream(Enumeration<? extends InputStream> e)
//Enumeration可以通过Vector来获得,如果用的是ArrayListQ如何获得呢Q?br /> SequenceInputStream(InputStream in1,InputStream in2)
?ObjectInputStream、ObjectOutputStream操作对象的字节流
一般成对出?br />使用writeObjectҎ写入的对象,只能由readObjectҎd?br />操作的对象必d现java.io.Serializable序列化接口,该对象才可以被序列化和反序列化?br />序列? Java中规定的一U保存对象的数据格式
?DataInputStream、DataOutputStream操作基本数据cdQ格式化数据
readInt、writeInt{方法?br />writeInt写入一个整敎ͼ文g大小?字节。证明就是把基本数据cd对应的字节写出去了,没有丢失_ֺ
?ByteArrayInputStream、ByteArrayOutputStream对Byte数组q行d的字节流Q针对内存进行读?br />源和目的地都是内存,一般用于对内存中的数据q行处理?/p>
十一:PipedInputStream、PipedOutputStream道?br />1、输入管道流
构造方法:PipedInputStream(PipedOutputStream pos)实现拼接
也可以通过connect(PipedOutputStream pos)Ҏq行拼接
2、输出管道流
构造方法:PipedOutputStream(PipedInputStream pis)实现拼接
也可以通过connect(PipedInputStream pis)Ҏq行拼接
1 --Test:序列化与反序列化.. 2 package com.java.kudy_Say; 3 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.ObjectOutputStream; 8 import java.io.Serializable; 9 import java.util.ArrayList; 10 import java.io.ObjectInputStream; 11 import java.io.FileInputStream; 12 /* 13 序列化与反序列化的过E? 14 */ 15 public class Test { 16 17 public static void main(String[]args) throws FileNotFoundException, IOException,ClassNotFoundException 18 { 19 20 /* Student s1 = new Student("张三",18); 21 Student s2 = new Student("王五",19); 22 Student s3 = new Student("李四",20); 23 Student s4 = new Student("大毛",21); 24 ObjectOutputStream oos = 25 new ObjectOutputStream(new FileOutputStream("f:/a.txt")); 26 ArrayList<Student> al = new ArrayList<Student>(); 27 al.add(s1); 28 al.add(s2); 29 al.add(s3); 30 al.add(s4); 31 oos.writeObject(al); 32 oos.close();//关闭? 33 //首先我们把内ҎC个集合里面去 34 */ 35 ObjectInputStream ois = 36 new ObjectInputStream(new FileInputStream("f:/a.txt")); 37 ArrayList<Student> al = (ArrayList<Student>)ois.readObject(); 38 for(Student s :al) 39 System.out.println(s); 40 ois.close(); 41 42 43 44 } 45 } 46 47 //必须要实C个类 48 class Student implements Serializable 49 { 50 private String name; 51 private int age; 52 Student(){} 53 Student(String name,int age) 54 { 55 this.name = name; 56 this.age = age; 57 } 58 public String toString() 59 { 60 return name+"@"+age; 61 } 62 }
Abstract Window Toolkit(AWT)抽象H口工具?
一个用本地囑Şlg实现的图形接口。这些组件提供了大部分的本地lg。这个接口正逐步被Swinglg所替代Q参见Swing Set.
Abstract 抽象?br /> 一个Java语言中的关键字,用在cȝ声明中来指明一个类是不能被实例化的Q但是可以被其它cȝѝ一个抽象类可以使用抽象ҎQ抽象方法不需要实玎ͼ但是需要在子类中被实现
abstract class 抽象c?br /> 含有一个或多个抽象Ҏ的类Q不能被实例化。定义抽象类的目的是使其他类能够从它l承Qƈ且通过实现抽象Ҏ使这个类具体?/p>
abstract method 抽象Ҏ
没有实现的方?/p>
access control 讉K控制
控制用户或程序访问资源的权限Q保证资源的一致性的Ҏ
API 应用E序接口
Application Programming Interface的羃写。指导应用程序开发h员访问类Ҏ和类状态的说明
applet 应用程?br /> 通常在Web览器中执行的一个JavalgQ同样可以在其他的支持applet模型的应用程序或讑֤中执?br />
Applet container applet容器
一个支持applet的容?
argument 参数
在函数调用中使用的数据项。一个参数可以是帔R、变量或表达?br />
array 数组
相同cd的数据的集合Q每一个数据项通过一个整数唯一标识
ASCII
American Standard Code for Information Interchange的羃写。一个标准的7位字W编码,参见Unicode
Bean
一个可以重用的lgQ可以通过l合Bean来创建应用程?/p>
bean-managed persistence
当一个实体bean实例和资源管理器交换数据的时候,由实体bean实例来管?/p>
bean-managed transaction
Enterprise Bean定义事务的界限的时?/p>
binary operator 二值操作符
有两个操作数的操作符
bit ?br /> 计算Z表示信息的最单位,只有0?两个?/p>
bitwise operator 位操作符
q行的对一个或多个操作数的位进行单独的操作。比如二q制逻辑q算W(&,|,^Q,二进制移位符Q?lt;<,>>,>>>Q和求补q算W(~Q?/p>
block ?br /> 在Java语言中,M被大括号括v来的E序Dc?/p>
boolean 逻辑?br /> 指一个表辑ּ或一个变量只能有true或者false两种cd。Java语言提供了booleancd以及true和false两个帔R
break
一个Java的关键字Q用来改变程序执行流E,立刻从当前语句的下一句开始执行从。如果后面跟有一个标{,则从标签对应的地方开始执?/p>
business logic 商业逻辑
实现某个应用功能的代码。在Enterprise JavaBeans模型中,q种逻辑是由某个Enterprise Javabean的方法实现的?/p>
business method 商业Ҏ
某个Enterprise Javabean的方法用来实现商业逻辑或者某个应用的规则?/p>
Byte 字节
序?位bitQJava语言中有对应的bytecd
bytecode 字节?
由Java~译器生成的跟机器相关代码,由Java解释器执?/p>
callback methods 回调Ҏ
lg的方法,由存放该lg的容器来调用的,用来在组件生命周期中通知它重要的事g
case
Java语言的关键字Q用来定义一l分支选择Q如果某个值和switch中给出的gP׃从该分支开始执行?
casting
强制cd转化?
catch
Java的一个关键字Q用来声明当try语句块中发生q行旉误或非运行时异常时运行的一个块?/p>
char
Java语言的一个关键字Q用来定义一个字W类?/p>
class c?
在Java语言中定义一个特定类的实现。一个类的定义包含成员变量,成员ҎQ还有这个类实现的接口,以及q个cȝ父类。如果没有显式指明父c,那么它的父类会隐式的被认为是Object?/p>
class method cL?
不需要引用特定对象就可以使用的方法,cL法的作用域是全局的,而不是某个特定的cd例,也被UC静态方法static methodQ参看instance method
classpath c\?
Classpath是一个环境变量,用来向Java虚拟机和ZJava的应用程序指明系l类库和用户cd的位|(比如Q工具包在JDK1.1.X/bin目录中)
class variable cd?
一个和整个cȝ关的数据,而不是只和某个实例,cd量在cd义中定义Q也被称作static field,参看instance variable.
codebase
?lt;APPLET>标签中的Code属性配合给出找到appletcȝ完整路径QCodel出文g的名字,Codebase指出包含该文件的URL路径
comment 注释
在编E语a中被~译器忽略的解释性语句。在Java中注释?/?*…*/定界
compiler ~译?
一个把源代码翻译成机器可以执行的代码的E序。Java~译器把Java源码译成Java虚拟够识别的字节码,参见interpreter
component lg
一U被容器所支持的应用的Y件单元。组件在使用的时候是可配|的。J2EEq_定义了四U类型的lgQEnterprise BeanQWeb componentsQapplets和application client?/p>
component contract
lg和它的容器之间的规范。这U规范包括:lg的生命周期的理Q一个上下文的接口,lg可以通过它获得容器的信息和服务,以及每个容器必须提供的一pd服务?/p>
component environment
应用E序lg提供商定义的一个集合,使组件在J2EElg的名字空间中可见。环境选项q件的使用描述W指明。每一个组件命名ƈ讉K它的环境配置值通过使用java:comp/evn JNDI上下文。这些值可以是lg所依赖的一个对象,比如JDBC DataSouceQ或者一个简单|比如一个税率?/p>
Connector q接?
一个标准的扩充机制使容器可以提供到EISs的连接。一个连接器q接到特定的EISQ由资源适配器和针对EIS的应用开发工L成。一个资源适配器插入到一个容器通过在连接器体系l构中定义的pȝU的联系?/p>
connector architecture
一个集成J2EE和EISs的体pȝ构。这个体pȝ构中有两大部分:一个EIS厂商提供的资源适配器和一个允许这个适配器插入的J2EE服务器。这个体pȝ构定义了一pd资源适配器ؓ了能插入J2EE服务器而必L持的规范Q比如事务,安全Q资源管理?/p>
Constructor 构造函?
一个创建对象的伪方法。在Java语言中构造函数是和类同名的成员函数。构造函C般用在new操作W之后?/p>
Container 容器
一个ؓlg提供生命周期理Q安全,配置Q和q行时服务的实体。每一个类型的容器QEJB, Web, JSP, servlet, applet, 和application clientQ也会提供各自组件相关的服务
container-managed persistence
当一个实体bean实例和资源管理器交换数据的时候,p源管理器来管?/p>
container-managed transaction
当一个EJB容器定义一个事务的边界的时候,一个Bean必须使用q种事务cd
continue
一个Java的关键字Q用来打断当前@环过E,从当前@环的最后重新开始执行,如果后面跟有一个标{,则从标签对应的地方开始执行?/p>
core class 核心c?
一个Javaq_上的标准的公q或接口。Javaq_的核心类Q至在所有的能支持Java的操作系l的q_上都是可用的。一个完全用Java~写的程序只需要Java核心cd可以q行了,q意味着它能够在M地方q行Q参?00% Pure Java(TM).
Core Packages 核心?
在Q何Javaq_和Q何兼容^C必须被支持的API的集合?/p>
Declaration 声明
一个在标识W和属性之间徏立联pȝ语句Q不需要必要的存储分配或具体实现。参见definition
default ~省?
一个Java语言的关键字Q作为在switch语句中的所有case之后的可选项Q如果所有的case条g都没有被满Q就会执行default语句
delegation 授权
一U某个负责h批准另外一个负责h在一定限制下使用它的w䆾或特权的行ؓ
deprecation
指不再推荐的c,接口Q构造函敎ͼҎ或成员变量,可能在以后的版本中会消失
derived from
cX "derived from" cY是指类X是从cYl承q来的,参见subclass, superclass
distributed 分布?
在多于一个的地址I间内运?br />
distributed application 分布式应?
׃同的q行于分ȝq行环境下的lg构成的应用程序,通常是在不同的^C通过|络互联h。典型的分布式应用是二端QClient/ServerQ,三端Qclient/middleware/serverQ和n端(client/multiple middleware/multiple serverQ?/p>
do
一个Java语言的关键字Q用来声明一个@环,q个循环的结束条件可以通过while关键字设|?/p>
DOM
Document Object Model的羃写。一는拥有包含遍历q棵树ƈ且生成相应XML文档的接口的对象构成的树Q符合W3C的规?
double
一个Java语言的关键字Q用来定义一个doublecd的变?/p>
EJB container EJB容器
一个实CJ2EE体系l构中EJBlg规范的容器。这个规范指定了一个Enterprise bean的运行时环境Q包括安全,一致性,生命周期Q事务,配置Q和其他的服务。一个EJB容器可以由EJB或者J2EE服务器提供?/p>
EJB Container Provider EJB容器提供?br /> 提供EJB容器的厂?/p>
EJB context EJB上下?
一个允许Enterprise Bean使用容器提供的服务和获得客户-hQclient-invokeQ方法调用者信息的对象
EJB home object
一个提供关于Enterprise Bean生命周期操作Q创建,删除Q查找)的对象。这个对象的cd是由容器的配|工具生的。EJB home object实现了Enterpeise Bean的home接口。客户通过引用一个EJB home object来进行生命周期的操作。客户用JNDI来定位一个EJB home object
EJB .jar file
一个包含EJB模块的JAR文g
EJB module
一个由一个或多个Enterprise bean和一个EJB配置描述W组成的软g单元?/p>
EJB object
实现了enterprise bean的remote接口的对象。客户不能直接引用一个enterprise bean的实例;客户L引用一个EJB object。EJB object的类型是由容器的配置工具生成的?/p>
EJB server
为EJB容器提供服务的Y件。比如,典型的,一个EJB容器L依靠一个作为EJB Server一部分的事务管理器来进行双向的认在所有参与的资源理器之间。J2EE体系l构假设EJB容器和EJB Server是由同一厂商提供的,所以没有制定这两个实体之间的规范。一个EJB Server可以包含一个或多个EJB Container
EJB Server Provider
提供EJB Server的厂?/p>
EIS resource
一个ؓ客户提供W合EIS规范的功能的实体。例子有Q一条或多条数据库中的记录,在一个ERPpȝ中的一个business objectQ在一个事务处理系l中的一个事务程?/p>
else
一个Java语言的关键字Q如果if语句的条件不满׃执行该语句?/p>
encapsulation 装
一个模块中的内部属性,因ؓ对象会封装数据和实现Q用者可以把对象看作一个能提供服务的黑匣子。实例变量可以被dQ删除,或改变。只要这个对象所提供的服务是不变的,使用q个对象的代码就可以l箋使用而不需要修改,参见instance variable, instance method.
enterprise bean
实现商业d和商业实体的lgQ或者是一个entity beanQ或者是一个session bean
Enterprise Information System (EIS)
一个包含企业已l存在的获取企业U信息的pȝ的应用程序,q些应用E序Z业提供了一个信息结构。一个EISpȝ提供很好定义的服务的集合l它的客戗这些服务在客户看来是本地的?或者远E的接口。EIS的例子有Q一个ERPpȝQ一个事务处理系l的LӞ一个遗留的数据库系l?/p>
Enterprise Bean Provider Enterprise Bean提供?
生enterprise beanQremote和home接口Q配|描q符文gQƈ把这些打包入JAR文g的应用程序开发h?/p>
Enterprise JavaBeans(TM) (EJB)
一个用于开发和使用面向对象的,分布式的Q企业应用E序的组件体pȝ构。用Enterprise JavaBeans体系l构~写的Y件是可扩展的Q面向事务的Q多用户的,安全的?/p>
entity bean
一个代表由数据库维护的持久数据的enterprise bean。一个entity bean可以理它自q持久性,或者把q个功能授权l它的容器。一个 entity bean׃个主键来标识。如果存放entity bean的容器崩溃了Q那么这个entity beanQ它的主键,以及Mq程的引用都能从崩溃中幸存下来?/p>
ebXML
ebXML建立在XML(Extensive Markup Language)之上Q目的是提供一pd模块化的规范QM地方的Q何规模的企业都能够通过Internet指导商业zd。它提供了公司和l织一个标准的Ҏ来交换数据,指导商业关系Q交数据通过公共的Ş式,定义q注册商业过E?/p>
exception 异常
一个在E序执行q程中阻止程序正常执行的事gQ通常是一个错误。Java语言通过tryQcatch和throw关键字支持异常的处理Q参见exception
handler
exception handler
一D处理特定类型的异常的代码。如果程序能够从异常中恢复过来,那么在处理完异常之后E序可以l箋执行?/p>
executable content
在HTML文g中执行的应用E序Q参见applet?/p>
extends l承
cX 通过extend cY来添加功能,或者添加变量,或者添加方法,或者覆盖类Y的方法。一个接口extends另外一个接口来dҎ。类XUCؓcY的一个子c,参见derived from
field ?
一个类的数据成员。除非显式指明,否则一个field不是static?/p>
final
一个Java语言的关键字。你只能定义一个实体一ơ,以后不能改变它或l承它。更严格的讲Q一个final修饰的类不能被子cdQ一个final修饰的方法不能被重写Q一个final修饰的变量不能改变其初始倹{?/p>
finally
一个Java语言的关键字Q用来执行一D代码不在前面定义的try语句中是否有异常或运行时错误发生?/p>
float
一个Java语言的关键字Q用来定义一个QҎ变量
for
一个Java语言的关键字Q用来声明一个@环。程序员可以指定要@环的语句Q推出条件和初始化变量?/p>
FTP
基本的Internet文g传输协议QFile Transfer ProtocolQ。FTP是基于TCP/IP协议的,它允许在L之间通过Internet传送文件。参见TCP/IP
formal parameter list
在一个方法的定以中指定的参数。参见actual parameter list
handle
一个标识enterprise bean的对象。客户可以串行化handleQ以后从串行化中恢复handle来得C个对enterprise bean的引?/p>
hexadecimal 十六q制?
使用16作ؓ基的计数pȝ。记?-9和a-fQ或者A-FQ代表了数字0?5。在Java?6q制数必d?x前缀。参见octal
hierarchy
关系的一U分c,除了最高层的对象(通常UCrootQ,每一个对象有一个专门的上层对象。每个对象可以由一个或多个下层对象在层ơ关pM。在Java中,root对象是Object
home interface
enterprise bean两个接口中的一个。home接口定义?个或多个Ҏ来创建和删除一个enterprise bean。对于session beanQhome接口定义了创建和删除ҎQ然而对于entity beanQhome接口定义了创建,查找和删除的Ҏ?/p>
home handle
一个对象,能够用来得到对一个home接口的引用。一个home handle能够被串行化写入持久存储器中Q通过反串行化来得到这个引用?br />
HTML
HyperText Markup Language的羃写。这是一个文件格式,ZSGMLQؓ了超文本在Internet上的传输。它十分单,允许嵌入囄Q声韻I视频,表单域和单的文本格式。对其他对象的引用被嵌入到URLs中?/p>
HTTP
HyperText Transfer Protocol的羃写。Internet的协议,ZTCP/IPQ用来获得远E主Z的超文本。参见TCP/IP?
HTTPS
建立在SSL协议之上的超文本传输协议QHTTPQ?/p>
IDL
接口定义语言QInterface Definition LanguageQ的~写Q用Java(TM)~写的API提供Z标准的和CORBA的交互性和q接性?/p>
identifier 标识W?
在JavaE序中一个对象的名称
IIOP
Internet Inter-ORB Protocol的羃写。一个用来在CORBA对象h代理之间交流的协议?/p>
if
Java~程语言的一个关键字Q用来生成一个条件测试,如果条g为真Q就执行if下的语句?/p>
implements
Java(TM)~程语言的一个关键字Q在cȝ声明中是可选的Q用来指明当前类实现的接口?/p>
import
Java(TM)~程语言的一个关键字Q在源文件的开始部分指明后面将要引用的一个类或整个包Q这样就不必在用的时候加上包的名字?/p>
inheritance l承
一个概念:一个类型会自动包含其父cdQsupertypesQ的变量和方法。参见superclass, subclass?/p>
initialization parameter
初始化Servlet上下文的参数?/p>
instance 实例
一个特定类型的对象。在Java(TM)语言中,一个对象是由new操作W创建的?br />
instance method 实例Ҏ
M跟一个类的实例相关的ҎQ也UCmethod。参见class method?/p>
instance variable 实例变量
M和一个特定对象相关的数据V每一个类的实例有一份类定义中声明的实例变量的拷贝,也称作field。参见class variable?/p>
instanceof
一个二操作数的Java(TM)语言关键字,用来试W一个参数的q行时类型是否和W二个参数兼宏V?/p>
int
Java(TM)的一个关键字Q用来定义一个整形变?/p>
interface
Java(TM)的一个关键字Q用来定义一pd的方法和帔R。它可以被类实现Q通过implements关键字?/p>
Internet
一个由全球各个l织Q各个国家的数百万的Ll成的巨大的一个网l。它是由很多网l物理的q接在一赯成的,数据通过公共的一l协议传输?/p>
IP
Internet Protocol的羃写,Internet的基本协议,它提供不可靠的主机间的数据包的传送。它不保证是否数据包能够正确传送,需要多久的旉来传送,或者当有多个包时是否按序到达。徏立在该协议之上的协议提供q接和可靠性的概念。参?TCP/IP.
interpreter 解释?br /> 一个可选解码ƈ且执行代码中的每一句语句的模块。Java(TM)解释器解码ƈ执行为符合Java虚拟范的字节码。参见compiler, runtime system?/p>
ISV
Independent Software Vendor的羃?/p>
本篇文章来自Java中文|:http://javaweb.cc/other/english/2212.shtml
教程由JAVA中文|整理校对发?javaweb.cc)
J2EE application
M可配|的J2EE功能单元。可能是׃个或多个软g模块与一个J2EE应用E序配置描述W打包成.ear文g。J2EE应用E序通常设计成在多机环境下运行的分布式应用?
J2EE product
一个遵循J2EEq_规范的实现?
J2EE Product Provider
提供J2EE产品的生产商?
J2EE server
J2EE Product的运行时部分。一个J2EE提供Web?或EJB容器?
JAE
Java(TM) Application Environment的羃写。Java Development Kit (JDK(TM))的源代码?
JAR Files (.jar)
Java ARchive的羃写。一U把许多文g聚合C个文件的一U文件格式?
JAR file format
JAR是一U把许多文g聚合C个文件的q_无关一U文件格式。许多个用Java~写的applet以及它们所需要的lgQ?class文gQ图片,声音和其他资源文Ӟ能够被打包到一个JAR文g中,以便以后在单独一个HTTPh中就能够下蝲到客L。它同样支持文g压羃和数字签名?
Java(TM)
是Sun公司的商标,标识了一pd在独立的和网l化的环境中创徏q安全的q行E序的技术?/p>
Java Application Environment (JAE)
Java Development Kit (JDK(TM))的源代码?/p>
Java(TM) 2 Platform, Standard Edition (J2SE platform)
核心的Java技术^?/p>
Java(TM) 2 Platform, Enterprise Edition (J2EE platform)
一个用来开发和配置企业应用E序的环境。J2EEq_׃pd的服务,应用E序接口QAPIsQ和提供开发多U的Q基于Web的功能的协议l成?
Java(TM) 2 SDK, Enterprise Edition
Sun公司的对J2EEq_的一个实现。这个实现提供了一个可操作的J2EEq_的定义?/p>
JavaBeans(TM)
一个可UL的,q_无关的,可重用的lg模型?/p>
Java Blend(TM)
一个通过映射数据库数据到Java~程环境中的对象QObjectQ和映射对象到数据库使程序员能够化数据库应用开发的产品?/p>
Java Card(TM) API
一个和ISO 7816-4兼容的应用开发环境,集中在smart card上?/p>
JavaCheck(TM)
一个工P用来查一个应用程序或一个applet是否W合某个规范?/p>
Java(TM) Compatibility Kit (JCK)
一个测试包Q一l工P和其它的一些需求,用来查一个实现是否和Javaq_规范和Y件参考实现兼宏V?
Java Database Connectivity (JDBC(TM))
一个Javaq_和大量数据库q_之间互联的^台无关的工业标准。JDBC(TM)提供了调用的API来操作支持SQL语言的数据库?/p>
Java Developer Connection(SM)
一个ؓ个h开发者设计的服务Q提供在U训l,产品打折Q专题文章,错误信息和一些早期的版本兼容性信息?
Java Development Kit (JDK(TM))
一个Y件开发^収ͼ支持使用Java语言~写Applet或应用程序?/p>
Java(TM) Enterprise API
q个API使编写大型的Q可能在一个组l中或Internet上与其它应用E序׃n多媒体数据的商业或数据库应用E序变得单。在Java(TM)
Enterprise API家族中已l有四个APIs被设计出来?/p>
Java(TM) Foundation Classes (JFC)
一个扩展,把图形用h口加入到抽象H口工具集(AWTQ中?/p>
Java(TM) IDL
一个提供J2EEq_与CORBA交互能力和互联能力的技术。这些兼ҎJ2EE应用E序能够通过OMG IDL和IIOP调用q程|络上的操作?/p>
Java(TM) Interface Definition Language (IDL)
用Java~写的APIsQ提供标准化的与CORBAQCommon Object Request Broker ArchitectureQ的交互能力和互联能力?/p>
Java(TM) Message Service (JMS)
使用企业U消息系l的APIQ比如IBM MQ SeriesQTIBCO Reanezvous{?/p>
Java Naming and Directory Interface(TM) (JNDI)
一l用来提供多重命名和目录服务的APIs的集合?/p>
JavaOS(TM)
一个基于Java的操作系l,对各U计和用户q_q行了优化。JavaOS(TM)操作环境提供了一个运行时规范QJavaE序能够直接q行在硬件^C上而不需要宿L作系l?/p>
Java(TM) Platform
由Java~程语言Q一lAPIsQ类库,其它在开发,~译Q错误检查中要用到的E序Q和一个能够装载ƈ执行class文g的Java虚拟机组成?
除此之外QJavaq_的目标是提供一l一致的兼容的实现。符合兼Ҏ规范的实现能够得到Sun公司的兼Ҏ标志?/p>
Java 2是当前的一代Javaq_?br />
Jini(TM) Technology
一lJava APIsQ可能是M一个Java 2q_的可选包。Jini API使网l设备和服务变得透明Q不再需要用户去理pȝ或网l其正常工作?br /> Jini在目前是M一个Javaq_版本的一个可选Y件包?/p>
JNDI
Java Naming and Directory Interface(TM)的羃写,一l用来提供重命名和目录服务的APIs的集合?/p>
JPEG
Joint Photographic Experts Group的羃写?p个小l徏立的一个图象文件压~标准。它通过几乎察觉不出的图象质量的损失来实C巨大的图象压~比?/p>
JRE
Java(TM) runtime environment的羃写。一个Java Development Kit (JDK(TM))的子集,适合最l用户和希望重新发布q行环境的开发h员。Java runtime environment由Java虚拟机,Java核心cd支持文gl成?/p>
Just-in-time (JIT) Compiler
一个在Javaq行Ӟ把所有字节码转换为本C码的~译器。这样就会加速Java的执行,相对Java虚拟机的解释执行?/p>
JVM
参见: Java(TM) Virtual Machine (JVM)
本篇文章来自Java中文|:http://javaweb.cc/other/english/2213.shtml
教程由JAVA中文|整理校对发?javaweb.cc)
lexical
关于如何把源代码译成各U编译器能够识别的记?/p>
literal
整数QQҎQ字W的基本表示Ҏ。比如,字面?.0是一个双_ֺ点敎ͼ"a"是一个字W?/p>
local variable
一个块中可见的数据,但是对块外面的代码是不可见的。比如,M在一个方法中声明的变量是一个局部变量,不能在方法外面被使用?br />
long
Java语言的一个关键字Q用来定义一个longcd的变量?br />
member
cȝ一个域或者方法,除非昑ּ指明Q否则一个member不是静态的?
method
cM定义的一个方法,参见instance method, class methodQ除非显式指明,否则一个method不是静态的?/p>
module
一个Y件单位,׃个或多个相同容器cd的J2EElg和一个相同类型的配置描述W组成。有三种modulecdQEJBQWebQ和Application Client。模块可以被配置成独立的单元或嵌入到应用E序中?/p>
Mosaic
一个提供简单图形界面,使用戯够方便的讉KInternet上的数据的程序。这些数据可能是单文Ӟ或者超文本文档。Mosaic是由NCSA的一个小l编写的?/p>
multithreaded
描述一个程序,它的代码被设计成拥有多个同时被执行的部分。参见thread?/p>
object
面向对象E序的主要的一个构造块。每一个对象是一个编E单元,由数据(instance methodsQ和功能Qinstance methodsQ组成,参见class?/p>
object-oriented design
一个Y件设计方法,通过cd对象为抽象和具体的对象的特点建模?/p>
octal
使用8作ؓ基的计数pȝ。用数?-7。在Java?q制数必d?前缀。参见hexadecimal?
One
Open Net Environment的羃写,由Sunl织Q主要工业参与商资助Q描qC一个易于理解的体系l构Q用来创建,~译和配|Web服务。ONE是^台无关的Q基于完全开攄标准。Sun ONE指代一个特定的由Sun和iPlanet提供的对q个体系l构的实现?/p>
Optional Packages
一个或多个APIs的集合,在Javaq_上,它们是可用的Qƈ且可能在兼容q_上也被支持?
随着旉推移QOptional Packages可能因ؓ市场需要而变成必需的?/p>
ORB
Object Request Broker的羃写。一个函数库QCORBA对象能够定位另一个对象且和它通讯?/p>
OTS
Object Transaction Service的羃写,一l接口定义CORBA对象能够处理事务?/p>
overloading
在同一个作用域里面使用一个标识符指代多个对象。在Java语言中,你可以overloadҎQ但不能是变量和操作W?/p>
overriding
在子cM对在父类中定义的Ҏ提供一个不同的实现?br /> re-entrant enterprise bean
一个enterprise beanQ能够被q发的,交叉的,或递归的调用,q且怺之间不干扰?/p>
reference
一个内Ҏ地址的数据元素?/p>
remote interface
enterprise bean两个接口中的一个。remote接口定义了能够被客户调用的商业方法?/p>
remove method
在home接口中定义的ҎQ客L可以调用它来删除一个enterprise bean?/p>
resource adapter
一个系l的Y仉动,被EJB容器和应用程序客L来连接到一个EIS。通常一个resource adapterL针对某一特定EIS的。它以函数库的Ş式提供,q行在用它的服务器或客户地址I间中。一个resource adapter插入C个容器中。应用程序组仉|容器,然后使用客户端APIQ由adapter提供的)或者由高层抽象生成的工h讉K下面的EIS。resource adapter和EJB容器配合提供与EISq接的下层机?- 事务Q安全,和连接池?/p>
resource manager
提供讉K一l共享对象的能力。一个recource manager参与一个被事务理器外部控制和调整的事务。一个resource manager通常和访问它的客戯行在不同的主Z和不同的地址I间中?/p>
resource manager connection
代表一个和资源理器的会话的对象?/p>
resource manager connection factory
一个用来创源管理器对象的对象?br />本篇文章来自Java中文|:http://javaweb.cc/other/english/2214.shtml
教程由JAVA中文|整理校对发?javaweb.cc)
role (development)
在开发和配置一个基于J2EE技术的应用E序的过E中某个对象起到的作用。role有:应用E序lg提供者,应用E序~译? 应用E序配置?br />, J2EEq_提供? EJB容器提供? EJB容器提供? Web容器提供? Web服务器提供?工具提供者和pȝ理员?/p>
role (security)
一个抽象的逻辑的用LQ由Application Assembler定义。当一个application被配|的时候,roles被映到安全标识Q比如负责h或者组Q在操作和环境中?/p>
role mapping
把由容器所识别的组和负责h和由配置描述W定义的安全角色联系h的一个过E。在lg被安装到服务器之前,安全角色必须被配制器映射?/p>
rollback
当一个事务中所有的Ҏ据库的更新被取消的一个点?/p>
root
在对象层ơ中的一个对象,所有对象都是从它承而来的,root对象在层ơ图中没有上层对象,参见hierarchy, class, package?/p>
RPC
Remote Procedure Call的羃写。通过向远E主机发送网l数据包执行Q看上去p普通的调用q程Q或Ҏ调用Q是一LQ?/p>
runtime system
一个Y件环境,其中能够q行为Java虚拟机编译的E序。runtime system包含了ؓ了装入用Java~写的程序,动态连接本地方法,内存理Q异常处理和实现一个Java虚拟机(可能是Java一个解释器Q所必须的代码。SAX
Simple API for XML的羃写。一个ؓ讉KXML文档提供的事仉动的Q串行访问的机制?/p>
Sandbox
p多的pȝlgl成Q从作ؓ应用E序一部分q行的安全管理器Q到Java虚拟Z的和语言本n的安全措施。SandBox保证一个不可信ȝQ可能恶意攻ȝ应用E序不能讉Kpȝ资源?/p>
scope
一个特性标识,用来规定哪些地方标识W是可见的。Java环境中的大多数标识符拥有cL者局部的scope。实例变量和cd量有cȝscopeQ它们在cȝ外部或者子cM使用时必d它们前面加上一个类名前~Q对cd量和cL法)或者类实例名。所有其他的在方法内部定义的变量h局部scopeQ它们只能在闭的块中用?/p>
Secure Socket Layer (SSL)
一个ؓ了个人隐U在Web服务器和览器之间进行加密的协议?/p>
security attributes
一l和负责人相兌的属性。Security attributes能够和一个负责h相关联,通过J2EE产品提供商制定的认证协议?/p>
本篇文章来自Java中文|:http://javaweb.cc/other/english/2215.shtml
教程由JAVA中文|整理校对发?javaweb.cc)
security constraint
一个明的Ҏ来注释想要的对Web内容的保护。一个security constraint׃pdWeb资源Q一个认证限制和用户数据限制l成?/p>
security context
一个对象,装了跟安全有关的两个实体之间的׃n状态信息?/p>
security permission
由J2SE定义的J2EEq_用来表述应用lg供应商必遵循的~程限制的一个机制?/p>
security permission set
J2EE产品提供商ؓ每一个组件类型的执行所必须提供的安全允许的最集合?/p>
security policy domain
一个作用域Q其中安全策略被定义q且由安全管理员强制执行。一个security policy domain有以下的几个特征Q?br /> 它有一l用P或者负责hQ?br /> 它有一个很好定义的认证协议来认证用?br /> 它可能有l的概念来简化安全策略的讄
security technology domain
一个作用域Q其中同L安全机制被用来强制执行一个安全策略。在单个technology domain中可以存在多个security policy domain?/p>
server principal
服务器在操作pȝ中执行的C?/p>
servlet
一U扩展Web服务器功能的JavaE序Q动态生成文档,q且使用使用h应答的方式和用户交互?br />
stream
Stream是一个简单的从发送着到接受者的数据字节。有两种基本的分c,所以java.io包包含两个抽象类QInputStream和OutputStreamQ?br />
subarray
一个在另一个数l中的数l?/p>
subclass
从某个类z出来的类Q可能是和一个或多个cM间的关系。参见superclass, supertype?
subtype
如果cdXl承或者实CcdYQ那么X是Y的一个subtype。参见supertype?
superclass
一个类Q某个类是从它派生而来的,可能是和一个或多个cM间的关系。参见subclass, subtype?/p>
super
Java语言的一个关键字Q用来访问父cȝcL员?/p>
supertype
一个类型的父类型是指它所实现的所有接口和l承的类型,参见subtype, superclass?
switch
Java语言的关键字Q用来计一个变量,在后面用来匹配由case语句指定的|以决定执行哪一l语句?/p>
Swing Set
一pd囑Ş用户接口GUIQ组件的代码名称Q能够在M支持Java虚拟机的本地q_上一致的q行。因为它们是完全用Java语言~写的,q些lg可能提供的功能比本地q_提供的等价功能更为强大。(和AWTҎQ?
synchronized
Java语言的关键字Q当它用来修C个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线E执行该D代码。(
TCP/IP
Transmission Control Protocol based on IP的羃写。这是一个Internet协议Q提供可靠的Z的从一个主机到另一个的数据传输。参见IP?
Technology Compatibility Kit (TCK)
一个测试包Q一l工P和其它必需的东西,用来证明一个特定的Sun的技术的实现是否和应用程序规范兼Ҏ者是否和Sun和Sun设计的参考实现兼宏V?/p>
this
Java语言的关键字Q用来代表它出现的类的一个实例。this可以用来讉Kcd量和cL法?br />
UDDI
Universal Description Discovery and Integration的羃写。UDDI提供了一个全局的,公共的,ZXML的,在线的商业注册,商业用户通过它可以注册ƈ宣传它们的Web服务。UDDI定义Internet版的白页和黄는话号码本?/p>
Unicode
ISO 10646定义?6位长的字W集。参见ASCII。Java环境中所有的源代码都是用Unicode~写的?
URI
Uniform Resource Identifier的羃写。一个用来标识抽象或物理资源的简z字W串。一个URI或者是一个URL或者是一个URN。URLs和URNs是具体的实存在的实体。URI是一个抽象的父类?/p>
URL
Uniform Resource Locator的羃写。一个用文本指代WWW|站上Q意数据的标准。一个URL通常是这L"protocol://host/localinfo"Qprotocol指明传输对象的时候用的协议Q比如HTTP或FTPQ,host指明在Internet上找CC机的名字Qlocalinfo是一个传递给q程L上协议处理器的字W串Q常常是一个文件名Q?/p>
URL path
通过一个HTTPh传递的URLQ来使用一个servlet。URL由Context Path + Servlet Path + PathInfol成Q其中被h的servlet是与Context Path相关联的servlet上下文的一部分。如果这个上下文是默认的上下文,以Web服务器的URL名字I间的基目录为根Q那么这个\径前~会是一个空字符丌Ӏ否则这个\径前~?开始,但是不是?l束。Servlet Path部分直接和激z这个请求的映射对应。这个\径以/字符开始。PathInfo是请求\径的一部分Q但不是Context Path或者Servlet Path的一部分?/p>
URN
Uniform Resource Name的羃写。唯一标识一个实体的标识W,但是不能l出实体的位|。系l可以先在本地寻找一个实体,在它试着在Web上找到该实体之前。它也允许Web位置改变Q然而这个实体却q是能够被找到?br />
variable
׃个标识符命名的数据项。每一个variable有一U类型,比如一个整数或者一个对象,和一个作用域。参见class variable, instance variable, local variable?
virtual machine
一个抽象的计算讑֤规范Q可以用不同的Ҏ实现QY件的或者硬件的。你把程序编译成virtual machine的指令集和你把程序编译成微处理器指o集是十分怼的。Java(TM) virtual machine*由字节码指o集合Q一l寄存器Q一个堆栈,一个垃圾收集堆和一个存放方法的区域
本篇文章来自Java中文|:http://javaweb.cc/other/english/2216.shtml
教程由JAVA中文|整理校对发?javaweb.cc)
vocabulary
传统上,软gE序被编写,然后~译成直接和计算Z驱动微处理器工作的操作系l相关的机器码。Javaq_通过提供一个程序编写编译,然后能够通过|络传输q且在Q何由_兼容性的虚拟机的q_上运行的模型减轻了这U依赖型?/p>
q个模型提供了额外的好处Q高安全性,卛_为程序可以被虚拟机验证一致性在通过|络传输之后Q也因ؓ虚拟行在安全?sandbox"的中Q能够阻止一些特定的破坏性的行ؓ?/p>
软g开发h员已l投入Java语言的怀抱,因ؓ它减了~写E序和支持Y件代码的费用和时间。他们不再需要ؓ不同的操作系l和不同的微处理器重新编写功能相同的代码。正在配|应用程序的公司和组l喜ƢJavaQ因为它减少了购买和修改不同版本的应用程序光应各自|络环境中各U类型的计算机和服务器的费用?
void
Java语言的关键字Q用在Java语言的方法声明中说明q个Ҏ没有Mq回倹{?void"也可以用来表CZ句没有Q何功能的语句?/p>
volatile
Java语言的关键字Q用在变量的声明中表C个变量是被同时运行的几个U程异步修改的?br /> 一个UNIX命oQ用它会{待所有的后台q程l束Qƈ且报告他们的l束状态?/p>
Web application, distributable
用J2EE技术编写的应用E序Q所以它可以被配|到一个分布运行在一台或多台L的多个Java虚拟Z的Web容器中。这U类型的应用E序的配|描q符使用可分布的元素?/p>
Web component
一个通过相应求提供服务的lgQ或者是一个Servlet或者是一个JSP面?/p>
Web container
实现J2EE体系l构中Weblg协议的容器。这个协议规定了一个Weblgq行时的环境Q包括安全,一致性,生命周期理Q事务,配置和其它的服务。一个提供和JSP和J2EEq_APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供?/p>
Web container, distributed
一个Web容器Q能够运行一个标Cؓ分布式的Q在同一C机或不同L上的多个Java虚拟Zq行的Web应用E序?/p>
Web server
提供讉KInetrnetQIntranet或者Extranet服务的Y件。一个Web serverq行在Web站点上,提供对HTTP和其它协议的支持Qƈ且运行服务器端的E序Q比如CGI脚本或者servletsQ来实现一定的功能。在J2EE体系l构中,Web Server为Web容器提供服务。比如,一个Web容器通常依靠Web Server来处理HTTP消息。J2EEq_假设一个Web容器Lq行在同一个厂商提供的Web Server之上Q所以没有制定这两个实体之间的协议。一个Web Server可以q行一个或多个Web容器?/p>
IO用来处理设备之间的数据传输
JAVAҎ据的操作是通过的方式
JAVA用于操作的对象都在IO包中
按操作对象分ؓ两种: 字节?字符?/p>
按向分ؓ: 输入?输出?
其它的内容还是比较简单的,注意的是以下q几个自定义包装c?
实现1.
MyBufferedReader.class
1 package com.javami.kudy.Code13; 2 import java.io.IOException; 3 import java.io.Reader; //d字符的抽象c?/span> 4 import java.io.IOException; 5 /* 6 * 自定义MyBufferedReader包装Reader,提供了一个缓冲区的功?提供了ReadLine功能. 7 * 1.用一个次l合,拿到被包装的Reader对象 8 * 2.定义一个字W数l作为缓冲区 9 * 3.实现一个readҎ,填充~冲?从缓冲区那里q回一个字W? 10 * 4.定义一个readLineҎ,内部调用readҎ,循环d一?q行q回 11 * 5.定义一个closeҎ,关闭地底层所包装的流 12 */ 13 public class MyBufferedReader extends Reader{ 14 private Reader r; 15 char[] buf = new char[1024]; 16 int len =0; 17 int pos = 0; 18 public MyBufferedReader(Reader r) 19 { 20 this.r = r; 21 } 22 /* 23 * 实现read()Ҏ,实现~存的功? 24 * 分析: 25 * 1.当别人第一ơ调用该Ҏ的时,一ơ性的d充缓冲区 26 * 2.定义一个len变量C~冲区的可用字符的数? 27 * 3.数l的W一个元素返? 28 * 4.当别人第二次调用的时,数l的二个元素q回 29 * 5.每次q回元素 len -- 30 * 6.当len为零?说明数组没有可用字符?那么q时候返回一?1 31 * 32 * 思\: 33 * 1.定义两个成员变量,lenC可用字符数量,posC当前字符的角? 34 * 2.判断len是否?,如果为零要填充缓冲区.q且pos为零 35 * 3.判断len,如果?1,则返?1 36 * 4.pos位置的元素返?pos++ 37 */ 38 public int read() throws IOException 39 { 40 if(len ==0) 41 { 42 len = r.read(buf); 43 pos = 0; 44 } 45 if(len==-1) 46 return -1; 47 len--; 48 return buf[pos++]; 49 } 50 51 /* 52 * 实现readLineҎ,实现M行的功能, 53 * 1.循环调用自己的方法的readҎ,d字符 54 * 2.知道回R的字W?Ҏq? 55 */ 56 public String readLine() throws IOException 57 { 58 StringBuilder sb = new StringBuilder(); 59 int ch; 60 while((ch=read())!=-1) 61 { 62 if(ch=='\r') 63 continue; 64 if(ch=='\n') 65 break; 66 sb.append((char)ch); 67 if(ch==-1&&sb.length()==0) 68 return null; 69 } 70 return sb.toString(); //转换成字W串 71 } 72 @Override 73 public void close() throws IOException { 74 r.close(); 75 } 76 77 @Override 78 public int read(char[] cbuf, int off, int len) throws IOException { 79 int count=0; 80 for(int i=0; i<off+len; i++) 81 { 82 int ch = read(); 83 if(ch==-1) 84 break; 85 count++; 86 buf[i] = (char)ch; 87 } 88 return count; 89 } 90 91 92 93 }
MyBufferedWriter.class q个主要是写?/p>
1 package com.javami.kudy.Code13; 2 import java.io.IOException; 3 import java.io.Writer; 4 5 public class MyBufferedWriter extends Writer{ 6 7 private Writer w; 8 private char[] buf = new char[1024]; 9 private int pos = 0; 10 11 public MyBufferedWriter(Writer w) 12 { 13 this.w = w; 14 } 15 /* 16 * 定义WriterҎ,实现写一个字W?实现~存的功? 17 * 1.定义一个变量posC当前的写入位|? 18 * 2.每次调用都用这个方法都会传入一个字W?字W缓存到数组pos位置里面? 19 * 3.pos++ 20 * 4.每次上来判?如果pos =1024,h~冲?,pos = 0 21 */ 22 public void Writer(int ch)throws IOException 23 { 24 if(pos == 1024) 25 { 26 flush(); //h一下缓冲区.q且初始化ؓ?/span> 27 pos = 0; 28 } 29 buf[pos++] = (char)ch; 30 } 31 @Override 32 public void close() throws IOException { 33 flush(); 34 w.close(); 35 } 36 37 @Override 38 public void flush() throws IOException { 39 w.write(buf,0,pos); //把buf0-pos位置的内容写入进?/span> 40 } 41 public void writer(String data)throws IOException 42 { 43 char[] chars = data.toCharArray(); //转换成字W?/span> 44 for(char c : chars) 45 write(c); 46 } 47 public void newline()throws IOException 48 { 49 write("\r\n"); //所谓的换行是一?/span> 50 } 51 @Override 52 public void write(char[] cbuf, int off, int len) throws IOException { 53 for(int i=0; i<off+len; i++) 54 { 55 w.write(buf[i]); 56 } 57 58 } 59 60 }
׃每次都要关闭啊~~无奈.只好使用一个类来实现它?/p>
CloseUtil.class
1 package com.javami.kudy.Code13; 2 import java.io.IOException; 3 import java.io.Reader; 4 import java.io.Writer; 5 public class CloseUtil { 6 private CloseUtil(){} 7 public static void close(Reader r,Writer w)throws IOException 8 { 9 try 10 { 11 if(r!=null) 12 r.close(); 13 } 14 finally 15 { 16 if(w!=null) 17 w.close(); 18 } 19 } 20 }
一个简单的试c?
1 package com.javami.kudy.Code13; 2 import java.io.FileReader; 3 import java.io.FileWriter; 4 import java.io.IOException; 5 6 public abstract class BufferedTest { 7 8 /** 9 * @param args 10 */ 11 public static void main(String[] args) 12 { 13 MyBufferedReader mr = null; 14 MyBufferedWriter mw = null; 15 try 16 { 17 mr = new MyBufferedReader(new FileReader("src/a.txt")); 18 mw = new MyBufferedWriter(new FileWriter("src/b.txt")); 19 int len; 20 while((len=mr.read())!=-1) 21 { 22 mw.Writer(len); 23 } 24 } 25 catch(IOException e) 26 { 27 e.printStackTrace(); 28 } 29 finally 30 { 31 try 32 { 33 CloseUtil.close(mr, mw); 34 } 35 catch(IOException e) 36 { 37 } 38 } 39 } 40 }
BufferedReader ?BufferedWriter 的存储图:
以上q几个都是比较难理解?.~~
加a?.
1.Map存储了一pd键值的映射关系
2.Map集合需要保证键的唯一?br />3.可以通过键获取到?反之则不?br />4.Map集合存储元素使用put(key,valus)Ҏ.
5.遍历Map集合的两U遍历方?br /> a)通过KeySetҎq回由键l成的集?q代集合里面的元素拿到所有的键再通过getҎҎ键来获取?br /> b)通过entrySetҎq回键所映射的关pȝ成的集合,q代该集合就拿到一个键值映的关系,再通过getKey获取到键,再通过getValue()Ҏ获取到?/p>
HashMap
U程不安?存储速度?允许存放null?null?br /> 通过HashSet保持键的唯一?/p>
Hashtable
U程安全,存储速度?不允许存放null键与null?/p>
TreeMap
通过二叉树的原理保证了键的唯一?br /> 寚wq行了排?排序原理与SetMap相同.
(如果惌使用q个Ҏ,必须要冲构造方法里面重写Comparator 或者从对象所属的cȝ承Comparator实现q个接口)
Properties
Hashtable的子c?所以是U程安全?
用于d配置文g,一般配|项{号两边都是String,所以集合中的两个列保存的都是Stringcd的数?
q个集合中只能存String,所以不能用泛?
/*JavaAPIȝ:application programming interface应用E序~程接口 sun公司提供l我们用的程?br />一、String、StringBuffer、StringBuilder
1、StringcL字符串常?br />2、String池:String s = "abc" 和String s = new String("abc")的区?br />3、Stringcȝ常用ҎQcharAt、indexOf、toCharArray、substring、split、compareTo、equals
4、StringBufferQ字W串容器Q长度可变,一般用于字W串的增减删的操作。reverseҎ反向
String s = "abc"; s = s + "xxx";//String长度不可变,因ؓ是常?br />5、StringBuilderU程不安全,StringBufferU程安全
二、集合类
|-IterableQ实现增强for循环
|--Collection:单列Q按照一U或多种规则来存储一pd元素
|---List:有序Q允许有重复元素
|----AbstractListQ抽象类Q实CiteratorҎ?br />|-----ArrayListQ数l实玎ͼ查找块,增删?br />|-----VectorQ和ArrayList一P只是U程安全
|-----LinkedListQ链表实玎ͼ查找慢,增删?br />|---SetQ无序,不允许有重复元素
|----HashSetQ通过哈希法保证元素不重复,对象要正重写equals和hashCodeҎ
|----HashTableQ同上,但是U程安全
|----TreeSetQ通过树状l构保证元素不重复,两种方式
1、按照元素的自然序q行排序Q前提是元素具备比较功能Q实CComparable接口的compareToҎ
2、在构造TreeSet实例Ӟ传入一个比较器Q实现Comparator接口的compareҎ
|-MapQ保存的是键值对应关p,其中键不允许有重复,可以通过keySetҎ拿到一个包含所有键的Set
再调用get(key)Ҏ通过键拿到value
|--HashMap:通过HashSet的原理保证键不重复?br />|--TreeMapQ通过TreeSet的原理保证键不重?br />|--PropertiesQ用于读取配|文Ӟ不需要声明泛型,因ؓ键和值都只能为Stringcd?br /> listҎ集合中的配|项输出C个打印流
loadҎ一个输入流中的配置存到集合中
Jdk1.5新特性泛型,减少集合存元素时错误发生的几率?br />Jdk1.5出现IterableQؓ了实现增强for循环 for(元素cd 变量Q集合或数组)
工具c:
CollectionsQ集合工LQsort、binarySearch、reverse
ArraysQ数l工LQsort。。。?/p>
三、包装类
1、Integer x = 0;x = x + 1; 装箱-拆箱-装箱Qjdk1.5Q?br />2、Interger.parseInt(String)字W串转ؓint?/p>
四、Systemc?br />1、Systemcȝ常用ҎQgc()垃圾回收、exit(0)l止E序、currentTimeMillis()获得?970q??日零?br /> 以来的毫U数、getPropertyҎ获得pȝ属性?br />2、两个静态成员变量:in和out
inQ标准输入流QInputStreamReadercd
outQ标准打印流QPrintStreamcd
五、Runtimec?br />表示q行ӞexecҎQ在后台新开启一个窗口运行命令,是当前窗口的子窗口,l承所有窗口属?/p>
六、日期对?br />1、DateQ大部分Ҏ已过Ӟ用new Date()创徏日期对象表示当前旉
2、DateFormatQ将日期格式化,抽象c?br /> DateFormat df = DateFormat.getInstance(); String dateStr = df.format(new Date);
3、Calendar对象Q?br /> Calendar c = Calendar.getInstance();
可以类中定义的帔R当做参数传入get和setҎ来获得和讄旉?br />addҎQ增加时间|具体增加哪一,q传入的常量,调用完此ҎQ时间对象就被改变了?br />*/
面试题目ȝ:
一、请说说ArrayList、Vector和LinkedList的区?br />q三者都是单列集合Collection下List集合的实现类Q所以他们的共同点,元素有序Q允讔R复元?br />不同点:
ArrayList和Vector底层都是数组实现Q这L实现注定查找快、增删慢
ArrayList和Vector的区别在于线E安全问题,Vector支持U程同步Q是U程讉K安全的,而ArrayListU程不安?br />LinkedList底层是链表结构,查找元素慢、增删元素速度快,U程不安全?/p>
二、请说说HashSet原理Qƈ写程序证?br />HashSet在存元素Ӟ会调用对象的hashCodeҎ计算出存储位|,然后和该位置上所有的元素q行equals比较Q?br />如果该位|没有其他元素或者比较的l果都ؓfalse存q去Q否则就不存?br />q样的原理注定了元素是按照哈希值来扑֭储位|,所有无序,而且可以保证无重复元?br />我们在往HashSet集合存储元素Ӟ对象应该正确重写ObjectcȝhashCode和equalsҎ
正因L原理QHashSet集合是非帔R效的?br />比如Q要查找集合中是否包含某个对象,首先计算对象的hashCodeQ折出位置P到该位置上去扑ְ可以了,而不用和所有的元素都比较一?/p>
三、Collection和Collections的区?br />两者没有Q何关p?br />Collection是单列集合的父接口,JDK1.5中定义了Iterable接口作ؓCollection父类Qؓ了实现增强for循环
Collections是工LQ提供了关于集合的常用操作,例如Q排序、二分法查找、反转元素等
1 Collections 的应? 2 3 1. 4 package com.javami.kudyMap; 5 import java.util.ArrayList; 6 import java.util.Collections; 7 import java.util.Comparator; 8 import java.util.List; 9 public class ColletionsTest { 10 public static void main(String[]args) 11 { 12 /* 13 * Collections工具c?提供关于集合的常用操? 14 */ 15 ArrayList<String> al = new ArrayList<String>(); 16 al.add("ab"); 17 al.add("aadc"); 18 al.add("aaa"); 19 al.add("hgdfakjg"); 20 al.add("xhyns"); 21 al.add("yyiouop"); 22 al.add("qq"); 23 al.add("zdff"); 24 25 /* 26 for(String s : al) 27 System.out.println(s+" "); 28 */ 29 30 /*Collections.sort(al); //list是一个接? 父类型的应用可以指向子类型的对象.. 31 for(String s : al) 32 System.out.println(s+" ");*/ 33 Collections.sort(al, new StringComparator()); 34 /* 35 * W一U方?: 通过比较器来Ҏ排序 可以在构造方法里? 36 * 或者在对象里面实现q个比较?当new q个实现接口.它会自动调用比较器的Ҏq行比较 37 */ 38 System.out.println("通过StringComparator()Ҏ已经排序?----"); 39 for(String s : al) 40 System.out.print(s+" "); 41 /* 42 * 使用了API里面的方? 43 //binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 44 int pos = Collections.binarySearch(al,"aaa",new StringComparator()); 45 System.out.println(pos);//因ؓ我们需要通过比较才可? 46 */ 47 int pos = MyCollections.binarySearch(al,"dasdas",new StringComparator()); 48 System.out.println(pos); 49 } 50 51 } 52 53 /* 54 * 比较? 先比? 长短,再比较顺? 55 */ 56 class StringComparator implements Comparator<String> 57 { 58 59 @Override 60 public int compare(String s1, String s2) 61 { 62 //首先比较长度,再按照字兔R?/span> 63 int num = s1.length()- s2.length(); 64 if(num !=0) 65 return num; 66 return s1.compareTo(s2); 67 68 } 69 70 } 71 72 //实现一个二分查?/span> 73 class MyCollections 74 { 75 private MyCollections(){}//U有?/span> 76 public static<T> int binarySearch(List<T> l,T key,Comparator<T> com) 77 { 78 int min = 0; 79 int max = l.size()-1; 80 int mid = 0; 81 while(max >=min) 82 { 83 mid = (min+max) / 2; 84 //判断比较器里面有没有! 85 if(com.compare(key,l.get(mid))>0)//扑ֈ集合位置的?/span> 86 min = mid+1; 87 else if(com.compare(key, l.get(mid))<0) 88 max = mid-1; 89 else 90 return mid; 91 } 92 93 //判断mid位置的元素和key的大?/span> 94 if(com.compare(key, l.get(mid))>0) 95 return -mid-2; 96 return -mid-1; 97 98 } 99 } 100 101 2.必须要通过比较器比较才能实C分查? 102 103 package com.javami.kudyAPI; 104 import java.util.ArrayList; 105 import java.util.Collections; 106 import java.util.Comparator; 107 108 public class Test { 109 public static void main(String[]args) 110 { 111 ArrayList<String> al = new ArrayList<String>(); 112 al.add("as"); 113 al.add("scx"); 114 al.add("dsad"); 115 al.add("hellsda"); 116 al.add("dsazxc"); 117 al.add("dascxxc"); 118 //在通过二分查找之前我们要经q排? 119 System.out.println("q没有排序之?); 120 for(String s : al) 121 System.out.print(s+" "); 122 123 124 //W二?: 当你调用二分查找之后.会调用比较器q行比较.是经q排序后的才可以q行二分查找 125 //比较器一定要传过?/span> 126 int num = Collections.binarySearch(al, "dsaas",new Comparator<String>(){ 127 128 @Override 129 public int compare(String s1, String s2) { 130 int num = s1.length() - s2.length();//比较长度 131 if(num != 0) 132 return num; 133 return s1.compareTo(s2); //按字兔R序排 134 } 135 136 }); 137 System.out.println(num+1); 138 } 139 } 140 141 142 日期的应? 143 144 package com.javami.kudyAPI; 145 import java.util.Calendar; 146 public class CalendarTest { 147 148 /** 149 * @param args 150 */ 151 152 public static void main(String[] args) 153 { 154 Calendar calendar = Calendar.getInstance(); 155 printCalendar(calendar); 156 int nums = getDayNum(2012); 157 System.out.println(nums); 158 159 //---------------- 160 Calendar startDay = Calendar.getInstance();//获取当前的日?/span> 161 Calendar finishDay = getFinishDay(startDay); 162 int num = finishDay.get(Calendar.DAY_OF_YEAR) - calendar.get(Calendar.DAY_OF_YEAR); 163 System.out.println(num+"天数"); 164 } 165 166 //计算出某q的2月䆾有多天 167 public static int getDayNum(int year) 168 { 169 //1.获取一个日?/span> 170 Calendar calendar = Calendar.getInstance(); 171 172 /* 173 * set(int year, int month, int date) 174 讄日历字段 YEAR、MONTH ?DAY_OF_MONTH 的倹{? 175 */ 176 calendar.set(year,2,1); //2月䆾其实是中国的三? 177 //日历字段 DAY_OF_YEAR获取到年中的月䆾 , -1 其实是2月䆾 178 calendar.add(Calendar.DAY_OF_YEAR,-1); 179 return calendar.get(Calendar.DAY_OF_MONTH); //获取C月䆾的天?/span> 180 } 181 182 //一个项目做100天,周末休息Q五一和十一各休息一天,今天开始做Q哪天完? 183 //一个项目做100天,周末休息Q五一和十一各休息一天,今天开始做Q哪天完?/span> 184 public static Calendar getFinishDay(Calendar c) { 185 for(int i=0; i<100; i++) { 186 187 //如果是星期六或者星期天(get ?set 的字D|字,指示一个星期中的某天? 188 if(c.get(Calendar.DAY_OF_WEEK)==1||c.get(Calendar.DAY_OF_WEEK)==7) 189 i--; 190 //(get ?set 的字D|字,指示一个月中的某天? 191 else if(c.get(c.DAY_OF_MONTH)==1&&(c.get(c.MONTH)==4||c.get(c.MONTH)==9)) 192 i--; 193 c.add(Calendar.DAY_OF_YEAR, 1); 194 } 195 return c; 196 } 197 //代表是一个时?/span> 198 public static void printCalendar(Calendar calendar) 199 { 200 int year = calendar.get(calendar.YEAR); //q?/span> 201 int month = calendar.get(calendar.MONTH); //?/span> 202 int day = calendar.get(calendar.WEEK_OF_MONTH);//?/span> 203 int week = calendar.get(calendar.DAY_OF_WEEK);//星期 204 int hour = calendar.get(calendar.HOUR_OF_DAY); //旉 205 int minute = calendar.get(calendar.MINUTE);//?/span> 206 207 String StringWeek = null; 208 switch(week) 209 { 210 211 case 1: 212 StringWeek = "星期?; 213 break; 214 case 2: 215 StringWeek = "星期一"; 216 break; 217 case 3: 218 StringWeek = "星期?; 219 break; 220 case 4: 221 StringWeek = "星期?; 222 break; 223 case 5: 224 StringWeek = "星期?; 225 break; 226 case 6: 227 StringWeek = "星期?; 228 break; 229 case 7: 230 StringWeek = "星期?; 231 break; 232 } 233 //q接成字W串 234 String str = ""+year+"-"+(month+1)+"-"+day+"-"+week+"-"+hour+"-"+minute; 235 System.out.println(str); 236 } 237 238 239 }
Z么用集合类?
在面向对象的~程思想中,都是以对象的形式对事物进行描q的,Z保证对象的生命周期,我们需要持有对?br />Q什么叫做持有对象呢?Person p = new Person()Q?/p>
数组和集合类的区?
1.数组和集合类都是容器Q都能存储对?br />2.集合cM点就是长度可?而数l一旦定?长度是不能修改的.
集合的特点:
集合cd用于存储对象.
集合cȝ长度可变
一个集合可以存储多U类型的对象..
Collection 接口Q?/span> HashSetQ实现类Q?br />HashSet是set的子c,因而没有重复元?br />底层使用了哈希算法保证没有重复元?br />存储对象Ӟ先调用对象的HashSetQ)ҎQ找到存储位|,再和当前的存储位|上已经存在的元素通过equals()Ҏq行比较Q如果返回falseQ才能进行存?br />往HashSet集合里存储的对象必须是重写HahCode 和equals()Ҏ?/p>
TreeSetQ实现类Q?br />TreeSet集合通过二叉树算法保证无重复元素Qƈ对元素进行排?br />W一U方? 如果对象实现了Comparable接口Q就可以存入TreeSet集合 因ؓ它会自动的去调用里面的一个比较方?所以在Person里面重写 ---------------------------------- Map接口Q?/span> Iterable接口Q?br />1.JDK1.5新定义的接口作ؓCollection的父接口 jdk1.5的新特征Q?/span> 泛型: 使用泛型的好处: 增强for循环Q?/span> 可变参数Q?/span> 有的时候在设计Ҏ时无法确定将来别Z传入的参C?br /> JDK1.5增加了新Ҏ可变参敎ͼ在函C只声明参数类型,不规定个?br /> Ҏ接受的参数实际上是一个数l,可以在方法中遍历数组
1.一个独立的元素的序列,q些元素从一条或多条规则
2.collection接口下分为list集合和Set集合
3.list集合的特Ҏ元素有序Q可以允许有重复的元?br />4.set集合的特Ҏ元素无序Q不允许有重复的元素
↓↓
ListQ子接口Q?/span>
↓↓
ArrayList(实现c?
1.底层数组实现Q查扑ֿQ增删慢
2.U程不安?br />----------------------------------
VectorQ实现类Q?/span>
1.与ArrayList基本一?br />2.U程安全
----------------------------------
LinkedList(实现c?
1.底层是链表的实现
2.增删快,查找?/p>
{
List集合元素存取Ҏ一?br />使用add()Ҏ增加元素
׃List集合有序Q可以用get()Ҏ获取元素
元素的P?Iterator)
通过集合对象的iterator()Ҏ获得q代器Iterator
通过Iteratorq代器的hasNext()Ҏ判断是否存在下一个元?br />通过Iteratorq代器的next()Ҏ获取下一个元?br />元素的P?Enumeration)
q代Vector集合中的元素可以使用Enumeration
通过Enumeration的hasNextElements()Ҏ判断是否q有元素
通过Enumeration的nextElement()Ҏq回下一个元?br />}
↓↓
SetQ子接口Q?/span>
↓↓
Set集合无须Q不允许有重复的元素
1.set集合通过存入对象的equalsҎ来保证集合中没有重复的元?/p>
W二U方? 如果对象没有实现Comparable接口Q在创徏TreeSet对象Ӟ需要给构造函数扔q一个比较器Q实现Comparator接口 .(必须要在匿名内部c重?或者承一个类来重?
1.一l成对的“键值对”对象Q允许根据键来查扑ր?br />2.Map集合的健g允许有重复的Q所以Map所有的键都构成了一个Set集合
2.主要是实现了增强for循环
׃集合可以存储不同数据cd的对象,所以取元素(地址)时会Dcd转换错误
jdk1.5新增加了泛型Qؓ了减操作集合的出错?br />例如Q?ArrayList<Person> arraylist = new ArrayList<Person>();
比喻Q?我在每一个挂了一个牌?只能是Person 使用.做了一个限?.
1.提高的代码的安全?br /> 2.讲运行期间的问题转到了编译期间的问题Q你懂的~~Q?br /> 3.省v了类型{换的ȝ
4.泛型cȝ出现优化了程序设?/p>
新接口Iterable中定义了增强for循环
可以通过增强for循环Ҏl和集合q行遍历
在P代集合元素时Q需要定义了泛型才能使用for循环
可变参数只能被定义ؓ函数的最后一个Ş?br /> 语法格式Q?q回?函数?参数cd… 形参) 1 package com.javami.kudy.javaapin.StringStudy;
2
3 public class Test {
4 public static void main(String[]args)
5 {
6 show(33,45,7657,332,11,5465);
7 }
8
9 public static void show(int ... i)
10 {
11 for(int num : i)
12 System.out.println(num);
13 }
14 }
]]>
package com.javami.kudy.javaapi1.StringStudy; public class StringDemo { /*面试题: * 1.Stirng s = "abc" String s = new String("abc"); //有什么区? * 2.String s = new String("abc"); 创徏了几个对?2?池里没有)??池里有了)Q? * 3.String s = "a" + "b" + "c" + "d"; 创徏了几个对象? 创徏?个对? * 4.String s1 = "a"; String s2 = "b"; String s3 = s1 + s2; s3=="ab"? */ public static void main(String[]args) { /* * 1.String?׃字符串操作很频繁.java针对String对象提供了缓冲池 * s1首先会在~冲池里面看一下有没有"abc" 如果没有?那么把对象创建的引用q回ls1 * 当s2开始执?会检查缓冲池里面有没?如果有的.直接把对象的地址q回ls2 .所以是相等?? String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); */ /* String s1 = "abc"; String s2 = new String(s1); outcome Q?false s2在堆内存中创Z一个对?把地址q回来~),q且在堆内存里面的缓冲池里面创徏一?abc"(q个是对象里面的一个拷贝副? 做java的日常维?所以那么这两个地址一比较.׃不相{?. */ /* String s1 = "a"+"b"+"c"; String s2 ="abc"; outCome = "true"; 因ؓjava~译器有个合q已知量的功?在编译阶D?a"+"b"+"c" 合ƈ?abc"q且保存在缓冲池里面 所以s2在检缓冲池里面.到已经有了.直接把对象的引用所q回?那么证明了s1 s2 是同一个地址/所以比较出来ؓtrue */ /* String s1 = new String("abc"); String s2 = new String("abc"); q两个里面创Z多少个对象呢? 解答Q? 首先会在堆内存中创徏一个对?在检池里面有没?没有也在了缓冲池里面创徏了一?做日常的l护 s2也会在堆内存中创Z个对?q时候检到池里面已l有?所以就不再创徏/ 说百了也是3?. 一般面试简单的q接说Q?个就可以. */ /* * String 是一个常?是不能改变的? * 内部实现Q? * StringBuilder sb = new StringBuilder(s1); * sb.append(s2); * s3 = sb.toString(); //转换回字W串 * q回调用Ҏ的都是创Z个对象的 * */ String s1 = "a"; String s2 = "b"; String s3 = s1 + s2; System.out.println(s3=="ab"); //直接q回一个flase } }
W二:
package com.javami.kudy.javaapi1.StringStudy; import java.io.UnsupportedEncodingException; public class DecodeTest { /* * 解码Q?用错误的码再变回?然后用正的~码方式可? * ~码错误Q?没办?仙也救不了 */ public static void main(String[]args) throws UnsupportedEncodingException { String str1 = "中国?; //使用gb2312~码 // 使用q_的默认字W集此 String ~码?byte 序列Qƈ结果存储到一个新?byte 数组中?/span> byte[] newbyte = str1.getBytes(); String str2 = new String(newbyte); System.out.println(str2); String str3 = new String(newbyte,"iso-8859-1"); //System.out.println(str3);~码的信息出?/span> newbyte = str3.getBytes("iso-8859-1"); String str4 = new String(newbyte); System.out.println(str4); byte[]new1 = str1.getBytes("iso-8859-1"); //一开始编码的信息出?因ؓ我的计算机根本就没有q个~码 String s6 = new String(new1); new1 = s6.getBytes("iso-8859-1"); String st7 = new String(new1); System.out.println(st7); } }
W三:
package com.javami.kudy.javaapi1.StringStudy; public class StringTest { /*String Z么要重写toString()Ҏ? 解答Q因为在String如果不重写Object的toStringҎ.那么直接复用父类的方?打印出的是对? q显然不是String惌得到的结? */ public static void main(String[]args) { String s1 = "kudy"; System.out.println(s1.charAt(3)); //索引是从零开始\ String s2 ="abcde"; String s3 = "aBcddddd"; System.out.println(s2.compareToIgnoreCase(s3)); String s4 = "abc"; String s5 = "def"; System.out.println((s4.concat(s5)).toString()); boolean is = s4.contains(s5); System.out.println(is); String fileName = "Demo.jdk"; if(fileName.endsWith(".java")) System.out.println("您是java文g"); String s6 = "cnabcdbvklabcjdhfabcdhla"; int newint = s6.indexOf("abc",0); //注意Q烦引是从零开?/span> System.out.println(newint); String s7 = "abc"; String s8 = new String("abc"); s8.intern(); System.out.println(s7 == s8); String s9 = "cascascacvdfdjkgksd"; int num = s9.lastIndexOf("k",s9.length()-1); System.out.println(num); String s10 = "abc"; String s11 = s10.replace("abc","***"); System.out.println(s11); String s12 = "hello.java"; String s13 = s12.replace("java","jdk" ); System.out.println(s13); /* * 把有逗号的内容去掉? */ String s14 = "ab,cd,ef"; String [] s15 = s14.split(","); for(String num1 : s15) System.out.print(num1); String s16 = "abcbsbdasdas"; char[] newchar = s16.toCharArray(); for(char num2 : newchar) System.out.print(num2); System.out.println(); /* * 但注意中间的是不能去掉的~~ */ String s17 = " abc def "; String s18 = s17.trim(); System.out.println(s18); } }
W四:
1 package com.javami.kudy.javaapi1.StringStudy; 2 3 import java.io.IOException; 4 5 public class StringUtil { 6 private StringUtil(){} //U有?/span> 7 8 /* 查找子字W串在字W串中出现的位置 例:“ab”?habjklabljhlabhjdjfla"出现的位|ؓQ? 6 12 9 * 思\Q? 10 * 1.定义一个StringBuilder容器Q用于存储位|,定义一个pos变量C出现的位|,初始gؓ0 11 * 2.定义一个while循环Q查扑֭串出现的位置 12 * 3.调用indexOfҎQ从起始位置开始查扑և子串首次出现的位|? 13 * 4.如果pos?1Q说明没扑ֈQ应该结束@? 14 * 5.位|存入StringBuilder容器Q再加一个逗号分隔 15 * 6.从找到的位置加上子串的长度作为新的v始位|, 16 * 7.循环l束Q将StringBuffer转ؓString字符Ԍ调用splitҎ以逗号q行分隔Q获得了String数组 17 * 8.准备一个新的int数组Q长度和String数组一P遍历String数组Q将每个元素转ؓint存入int数组 18 */ 19 public static int[]findIndexOfSubstr(String str, String substr) 20 { 21 StringBuilder sb = new StringBuilder(); 22 int pos = 0; 23 while(true) 24 { 25 pos = str.indexOf(substr,pos); 26 if(pos ==-1) 27 break; 28 sb.append(pos+","); 29 pos+=substr.length(); //pos假设找ab 扑ֈ1 + 2 {于?刚好从第三个开始找~ 30 } 31 if(sb.length() == 0) //容器什么都没有Q?/span> 32 return null; //一个都找不?/span> 33 String s = sb.toString(); //转换成字W串形式 34 String[] parts = s.split(","); 35 int[] arr = new int[parts.length]; 36 for(int i=0; i<parts.length; i++) 37 { 38 arr[i] = Integer.parseInt(parts[i]); 39 } 40 return arr; 41 } 42 43 /* 44 * 设计一个方法,d键盘输入的一行(只支持英文字母) 45 * 提示QSystem.in.read()d键盘上的一个字W? 46 * 思\Q? 47 * 1.定义一个容器StringBuilder容器 48 * 2.定义一个while循环,循环d键盘. 49 * 3.如果d回R或者\n p出@? 50 * 4.存入StringBuilfer容器? 51 * 5.循环l束,q回一个toString转换为字W串 52 */ 53 public static String readLine() throws IOException 54 { 55 StringBuilder sb = new StringBuilder(); 56 while(true) 57 { 58 int ch = System.in.read(); 59 if(ch == '\r') //如果回R 跛_?/span> 60 continue; 61 if(ch == '\n') //{上面的执行完毕.再来 62 break; 63 sb.append((char)ch); 64 } 65 return sb.toString(); //转换成字W串 66 } 67 68 /* 69 * *给定的字节数组截取一部分Q进行解码,要求输出完整的汉字,例如Q?abc中国?截取6?输出的是abc? 70 * 思\Q? 71 * 1.遍历数组被截取的部分, 72 * 2.判断正负敎ͼl计负数个数为count 73 * 3.判断count的奇Ӟ奇数减去1Q偶C? 74 * 4.解码 75 * 汉字是占?个字?我们怎么判断它是汉字? 76 * 汉字的第一位字节保证是负数!W二个是正数 77 * 78 */ 79 public static String decode(byte[]buf, int len) 80 { 81 int count = 0; 82 for(int i=0; i<buf.length;i++) 83 if(buf[i]<0) 84 count++; //如果W一个字节是负数?是代表汉字马上来?׃+1 85 if(count % 2 == 1) 86 len--; 87 return new String(buf,0,len); 88 /*E序程图: ׃输入一个buf len = 5 89 * for 执行5? 90 * 因ؓ一个汉字是占了2个字?而第一个字节保证是负数 91 * 如果 buf[i]里面的是负数?count +1 = 1 92 * 如果 % 2 {于1代表的是Q? ׃len 传递进来的减M个字? 93 * 94 */ 95 } 96 97 public static String decodeBYGBK(byte[]buf,int len) 98 { 99 boolean b = false; 100 for(int i=0; i<buf.length; i++) 101 if(b) 102 b = false; 103 else if(buf[i]<0) 104 b = true; 105 if(b) 106 len --; 107 return new String(buf,0,len); 108 109 } 110 111 /* 112 * 查找一个字W串出现ơ数最多的字符 abvjdabahabballfja 出现ơ数最多的?a 6 113 * 思\Q? 114 * 1.调用toCharArray字符串把字符串{换成字符数组 115 * 2.定义maxQ用于记住出现最多字W的ơ数Q定义一个maxCharC出现最多的字符 116 * 3.定义一个@环,每次循环都统计一个字W出现最多的ơ数Q每ơ让ơ数和max?谁最大就?l束条g。当长度的数l? 117 * 为零 118 * 4.定义一个countQ记住本ơ统计字W的ơ数 119 * 5.循环遍历数组Q统计第一个字W出现的ơ数 120 * 6.让次数和max比,如果max大,让maxC它的ơ数Q让maxcharC当前的字W? 121 * 7.当前的字符从数l中删除 122 * ------ 123 * 此字符串{换ؓ一个新的字W数l? 124 */ 125 126 public static char searchMaxChar(String str) 127 { 128 char[] buf = str.toCharArray(); 129 int max = 0; 130 char maxChar = 0; 131 while(buf.length>0) 132 { 133 int count = 0; //个数{于0 134 char firstChar = buf[0]; 135 for(char c : buf) 136 if(c ==firstChar) 137 count++; 138 if(count>max) //max 已经是默认记住上一个的| 139 { 140 max = count; 141 maxChar = firstChar; //如果你是最多的pl你~~ 142 } 143 //把当前的字符删除Q?/span> 144 buf = deleteChar(buf,firstChar,count); 145 } 146 return maxChar; 147 } 148 149 private static char[] deleteChar(char[] buf, char firstChar, int count) 150 { 151 char[]arr = new char[buf.length-count]; 152 int pos = 0; 153 for(int i=0; i<buf.length; i++) 154 { 155 if(buf[i]==firstChar) 156 continue; 157 arr[pos++] = buf[i]; 158 } 159 return arr; 160 } 161 /* 查找两个字符串中的最大子? jflwertyakjfa;l fjdlkwertyjf;ajf 最大子Ԍwerty 162 * 1.判断Z个字W串的长短,扑և较长的和较短? 163 * 2.循环遍历较短的字W串的所有子Ԍ由长到短遍历 164 * 定义一个@环,每次遍历一U长度的子串Q将i作ؓ长度Qi的取? length~1 165 * 定义一个内层@环,具体遍历某一U长度的子串Qj做ؓ子串的开始位|, j取|0~length-i 166 * 截取子串Qsubstring 起始位置:j l束位置:j+i 167 * 3.每次变量Q都判断子串是否长的字符串的子串Q如果是Q直接返? 168 * 4.循环l束Q依然没有返回,说明没有相同子串Q返回null 169 */ 170 public static String searchMaxSubStr(String s1, String s2) 171 { 172 String longStr = s1.length() > s2.length() ? s1 : s2; 173 String shortStr = s1.length() > s2.length() ? s2 : s1; 174 for(int i=shortStr.length(); i>0; i--) 175 { 176 for(int j=0;j<shortStr.length()-i+1;j++) 177 { 178 String sub = shortStr.substring(j, j+i); //例如Q?abcd 攑ֈsub里面? 179 //abcd abc ab a 和它里面的做一个对? 180 //当且仅当此字W串包含指定?char 值序列时Q返?true? 181 if(longStr.contains(sub)) 182 //判断长的字符串里面是否包含这?/span> 183 return sub; //如果包含直接q回.没有包含 184 } 185 } 186 return null; 187 } 188 } 189 190 191 ---------------------- 192 193 package com.javami.kudy.javaapi1.StringStudy; 194 195 public class StringUtilTest { 196 public static void main(String[]args) throws Exception 197 { 198 /* 199 String str = "dsdcvcvxvczxbedfaacff"; 200 String substr = "y"; 201 //遍历a 出现的位|? 202 int[]arr = StringUtil.findIndexOfSubstr(str, substr); 203 if(arr ==null) 204 { 205 System.out.println("找不刎ͼ"); 206 return ; 207 } 208 for(int num : arr) 209 { 210 System.out.print(num+" "); 211 } 212 System.out.println(); 213 214 */ 215 /* 216 * 再输入byte的时候就l束,不断的去? 217 218 while(true) 219 { 220 String str2 = StringUtil.readLine(); 221 if("bye".equals(str2)) 222 break; 223 System.out.println(str2); 224 } 225 System.out.println("E序l束"); 226 */ 227 byte[] buf = "abc中国?.getBytes(); 228 //String s3 = StringUtil.decode(buf, 3); 229 String s3 = StringUtil.decodeBYGBK(buf, 5); 230 System.out.println(s3); 231 232 char maxChar = StringUtil.searchMaxChar("dasfasdfaaaaaaaasfgdagfafgsad"); 233 System.out.println(maxChar); 234 235 String s33 = "jflwertyakjfa;l"; 236 String s44 = "fjdlkwertyjf;ajf"; 237 String s55 =StringUtil.searchMaxSubStr(s33,s44); 238 System.out.print(s55); 239 } 240 241 }