一个File¾cÈš„对象åQŒè¡¨½CÞZº†¼‚盘上的文äšg或目录ã€?br /> File¾cÀL供了与åã^å°æ— 关的æ–ÒŽ³•æ¥å¯¹¼‚盘上的文äšg或目录进行æ“作ã€?/p>
import java.io.*;
class FileTest
{
 public static void main(String[] args) throws Exception
 {
 //File f = new File("1.txt");
 //f.createNewFile();Â Â åˆ›å¾æ–‡äšg
 //f.mkdir(); åˆ›å¾æ–‡äšgå¤?br /> //File f = new File("F:\\Java Develop\\1.txt");//使用¾l对路径
 //f.createNewFile();
 /*
 *WINDOWSòq›_°ä¸‹æœ‰ç›˜ç¬¦åQŒLINUX下是没有çš?br /> *考虑到JAVAè¯è¨€çš„åã^å°æ€§ï¼Œæ‰€æœ‰ç”¨åˆ†éš”½W¦seperator/seperatorChar
 */
 /*
 File fDir = new File(File.separator);//创å¾äº†å½“å‰çš„æ ¹ç›®å½?br /> String strFile = "Java Develop"+File.separator+"1.txt";
 File f = new File(fDir,strFile);
 f.createNewFile();
 //f.delete();
 f.deleteOnExit();
 Thread.sleep(3000);
 */
 /*
 for(int i=0;i<5;i++)
 {
  File.createTempFile("linshi",".tmp");
  f.deleteOnExit();
 }
 Thread.sleep(3000);
 */
Â
 File fDir = new File(File.separator);
 String strFile ="Java Develop"+File.separator;
 File f = new File(fDir,strFile);
 //æ–‡äšg˜q‡æ×oå™?br /> String[] names = f.list(new FilenameFilter()
 {
  public boolean accept(File dir,String name)
  {
   return name.indexOf(".java")!=-1;
  }
 });
 for(int i=0;i<names.length;i++)
 {
  System.out.println(names[i]);
 }
 }
}
           ‹¹å¼I/0
 ‹¹?Stream)是å—èŠ‚çš„æºæˆ–目的ã€?br /> 两ç§åŸºæœ¬çš„æµæ˜? 输入‹¹?Input Stream)和输出æµ(Output Stream)。从从ä¸è¯Õd‡ºä¸€¾pÕdˆ—å—节çš?br /> 对象¿UîCؓ输入‹¹ã€‚而能å‘å…¶ä¸å†™å…¥ä¸€¾pÕdˆ—å—èŠ‚çš„å¯¹è±¡ç§°ä¸ø™¾“出æµã€?/p>
          ‹¹çš„分类
Â
 节点‹¹? 从特定的地方è¯Õd†™çš„æµ¾c»ï¼Œä¾‹å¦‚åQšç£ç›˜æˆ–一å—内å˜åŒºåŸŸã€?br /> ˜q‡æ×o‹¹? ä½¿ç”¨èŠ‚ç‚¹ä½œäØ“è¾“å…¥æˆ–è¾“å‡ºã€‚è¿‡æ»¤æµä½¿ç”¨çš„æ˜¯ä¸€ä¸ªå·²¾lå˜åœ¨çš„输入‹¹æˆ–输出‹¹è¿žæŽ¥åˆ›å»ºçš„ã€?br /> (如下å›?
 InputStream(一个抽象的基类)
 .三个基本的读写方æ³?br /> abstract int read(): è¯Õd–一个å—节数æ®ï¼Œòq¶è¿”回到数æ®åQŒå¦‚果返å›?1åQŒè¡¨½Cø™¯»åˆîCº†è¾“å…¥‹¹çš„
                      末尾ã€?br /> int read(byte[] b): ž®†æ•°æ®è¯»å…¥ä¸€ä¸ªå—节数¾l„ï¼ŒåŒæ—¶˜q”回实际è¯Õd–çš„å—节数。如果返å›?1åQ?br />                      表示è¯Õdˆ°äº†è¾“å…¥æµçš„æœ«ž®¾ã€?br /> int read(byte[] b,int off,int len): ž®†æ•°æ®è¯»å…¥ä¸€ä¸ªå—节数¾l„ï¼ŒåŒæ—¶˜q”回是实际读å–çš„å?br />                      节数。如果返å›?1åQŒè¡¨½Cø™¯»åˆîCº†è¾“å…¥‹¹çš„æœ«å°¾ã€‚off指定在数¾l„bä¸å˜æ”?br />                      数æ®çš„è“vå§‹å¿UÖM½¾|®ï¼›len指定è¯Õd–的最大å—节数ã€?br /> 其他的方æ³?br /> long-skip(long n): 在输入æµä¸èŸ©˜q‡n个å—节,òq¶è¿”回实际蟩˜q‡çš„å—节数ã€?br /> int available():  ˜q”回在ä¸å‘生é˜Õd¡žçš„æƒ…况下åQŒå¯è¯Õd–çš„å—节数ã€?br /> void close():     关é—输入‹¹ï¼Œé‡Šæ”¾å’Œè¿™ä¸ªæµç›¸å…³çš„ç³»¾lŸèµ„æºã€?br /> void mark(int reqdlimit): 在输入æµçš„当å‰ä½¾|®æ”¾¾|®ä¸€ä¸ªæ ‡è®ŽÍ¼Œå¦‚æžœè¯Õd–çš„å—节数多余
                    readlimit讄¡½®çš„å€û|¼Œåˆ™æµå¿½ç•¥˜q™ä¸ªæ ‡è®°ã€?br /> void reset():     ˜q”回åˆîC¸Šä¸€ä¸ªæ ‡è®°ã€?br /> boolean markSupported(): ‹¹‹è¯•当剿˜¯å¦æ”¯æŒmarkå’Œresetæ–ÒŽ³•。如果支æŒè¿”回trueåQŒå之falseã€?/p>
        java.io包ä¸çš„InputStream的类层次 (下图)
OutputStream
 三个基本的写æ–ÒŽ³•
 abstract void write(int b): 往输出‹¹ä¸å†™å…¥ä¸€ä¸ªå—èŠ?br /> void write(byte[] b):      往输出‹¹ä¸å†™å…¥æ•°ç»„bä¸çš„æ‰€æœ‰å—èŠ?br /> void writte(byte[] b,int off,int len): 往输出‹¹ä¸å†™å…¥æ•°ç»„bä¸ä»Žåç§»é‡off开始的lenä¸?br />                            å—节的数æ?br /> 其它æ–ÒŽ³•
 void flush(): åˆäh–°è¾“出‹¹ï¼Œå¼ºåˆ¶¾~“冲åŒÞZ¸çš„输出å—节被写出
 void close(): å…³é—输出‹¹ï¼Œé‡Šæ”¾å’Œè¿™ä¸ªæµç›¸å…³çš„ç³»¾lŸèµ„æº?/p>
       java.io包ä¸OutputStream的类层次(如下å›?
基本的浾c?/p>
 FileInputStream和FileOutputStream
 节点‹¹ï¼Œç”¨äºŽä»Žæ–‡ä»¶ä¸è¯Õd–或往文äšgä¸å†™å…¥å—节æµã€‚å¦‚æžœåœ¨æž„é€ FileOutputStreamæ—Óž¼Œæ–‡äšgå·²ç»
 å˜åœ¨åQŒåˆ™è¦†ç›–˜q™ä¸ªæ–‡äšgã€?br />Â
 BufferedInputStream和BufferedOutputStream
 ˜q‡æ×o‹¹ï¼Œéœ€è¦ä‹É用已¾lå˜åœ¨çš„节点‹¹æ¥æž„é€ ï¼Œæä¾›å¸¦ç¼“冲的è¯Õd†™åQŒæé«˜äº†è¯Õd†™çš„æ•ˆçއã€?/p>
 DataInputStream和DataOutputStream
 ˜q‡æ×o‹¹ï¼Œéœ€è¦ä‹É用已¾lå˜åœ¨çš„节点‹¹æ¥æž„é€?æä¾›äº†è¯»å†™Javaä¸çš„基本数殾cÕdž‹çš„功能ã€?/p>
 PipedInputStream和PipedOutputStream
 ½Ž¡é“‹¹ï¼Œç”¨äºŽ¾U¿ç¨‹é—´çš„通信。一个线½E‹çš„PipedInputStream对象从å¦ä¸€ä¸ªçº¿½E‹çš„PipedOutputStream
 对象è¯Õd–输入。è¦ä½¿ç®¡é“æµæœ‰ç”¨åQŒå¿…™åÕdŒæ—¶æž„é€ ç®¡é“输入æµå’Œç®¡é“输出æµã€?/p>
code:
import java.io.*;
class StreamTest
{
 public static void main(String[] args)throws Exception
 {
 /*
 int data;
 while((data=System.in.read())!=-1) //ä»Žæ ‡å‡†è®¾å¤‡è¯»å–æ•°æ?br /> {
  System.out.write(data);//ä»Žæ ‡å‡†è®¾å¤‡è¾“å‡ºæ•°æ?br /> }
 */
 //输出‹¹å†™æ•°æ®,åªéœ€è¦å…³é—尾端的‹¹å°±å¯ä»¥äº†ï¼Œå› 䨓fos˜qžæŽ¥åˆîCº†bos
 FileOutputStream fos = new FileOutputStream("1.txt");
 //fos.write("());
 //fos.close();
 BufferedOutputStream bos = new BufferedOutputStream(fos);
 //bos.write("http//www.baidu.com".getBytes());
 //bos.flush();
 //bos.close();
 DataOutputStream dos=new DataOutputStream(bos); //˜qžæŽ¥åˆîCº†boså’Œfis
 byte b=3;
 int i=78;
 char ch='a';
 float f=4.5f;
 dos.writeByte(b);
 dos.writeInt(i);
 dos.writeChar(ch);
 dos.writeFloat(f);
 dos.close(); //必须调用flush()或者close()ä¸ç„¶ä¸ä¼šå†™å…¥¼‹¬ç›˜
Â
 //输入‹¹è¯»æ•°æ®
 FileInputStream fis=new FileInputStream("1.txt");
 BufferedInputStream bis = new BufferedInputStream(fis);
 //byte[] buf=new byte[100];
 //int len=fis.read(buf);
 //int len=bis.read(buf);
 //System.out.println(new String(buf,0,len));
 //fis.close();
 //bis.close();
 //注æ„è¯Õd–的顺åºè¦å’Œå†™çš„顺åºä¸€æ ?br /> DataInputStream dis = new DataInputStream(bis);
 System.out.println(dis.readByte());
 System.out.println(dis.readInt());
 System.out.println(dis.readChar());
 System.out.println(dis.readFloat());
 dis.close();Â
Â
 }
}
½Ž¡é“输入/输出‹¹?code:
import java.io.*;
class PipedStreamTest
{
 public static void main(String[] args)
 {
 PipedOutputStream pos=new PipedOutputStream();
 PipedInputStream pis=new PipedInputStream();
 //˜qžæŽ¥
 try
 {
  pos.connect(pis);
  new Producer(pos).start();
  new Consumer(pis).start();
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
 }
}
class Producer extends Thread
{
 private PipedOutputStream pos;
 public Producer(PipedOutputStream pos)
 {
 this.pos=pos;
 }
 public void run()
 {
 try
 {
  pos.write("hello,welcome!".getBytes());
  pos.close();
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
 }
}
class Consumer extends Thread
{
 private PipedInputStream pis;
 Consumer(PipedInputStream pis)
 {
 this.pis=pis;
 }
 public void run()
 {
 try
 {
  byte[] buf=new byte[100];
  int len=pis.read(buf);
  System.out.println(new String(buf,0,len));
  pis.close();
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
 }
}
=================================================================================
             Java I/O库的设计原则
 Javaçš„I/O库æä¾›äº†ä¸€ä¸ªç§°åšé“¾æŽ¥çš„æœºåˆ¶åQŒå¯ä»¥å°†ä¸€ä¸ªæµä¸Žå¦ä¸€ä¸ªæµé¦–尾相接åQŒåÅžæˆä¸€ä¸ªæµ½Ž¡é“的链接ã€?br /> ˜q™ç§æœºåˆ¶å®žé™…上是一¿U被¿U°åšä¸ºDecorator(装饰)的设计模å¼çš„应用ã€?br />Â
 通过‹¹çš„链接åQŒå¯ä»¥åЍæ€çš„å¢žåŠ ‹¹çš„功能åQŒè€Œè¿™äº›åŠŸèƒ½çš„å¢žåŠ æ˜¯é€šè¿‡¾l„åˆä¸€äº›æµçš„基本功能而动
 æ€èŽ·å–çš„ã€?/p>
 我们è¦èŽ·å–一个I/O对象åQŒå¾€å¾€éœ€è¦äñ”生多个I/O对象åQŒè¿™ä¹Ÿæ˜¯Java I/O库ä¸å¤§å®¹æ˜“掌æ¡çš„åŽŸå› åQ?br /> 但在I/O库ä¸çš„Decorator模å¼çš„è¿ç”¨ï¼Œ¾l™æˆ‘们æä¾›äº†å®žçŽ°ä¸Šçš„ç‰|´»æ€§ã€?/p>
 I/O‹¹çš„链接å›?如下)
 Reader和Writer
 Java½E‹åºè¯è¨€ä½¿ç”¨Unicodeæ¥è¡¨½Cºå—½W¦ä¸²å’Œå—½W¦ã€?br /> Readerå’ŒWriter˜q™ä¸¤ä¸ªæŠ½è±¡ç±»ä¸»è¦ç”¨æ¥è¯Õd†™å—符‹¹ã€?/p>
 java.io包ä¸Reader的类层次(如下å›?
 java.io包ä¸Writer的类层次(如下å›?
 code:
import java.io.*;
class StreamTest
{
 public static void main(String[] args)throws Exception
 {
 /*
 FileOutputStream fos = new FileOutputStream("1.txt");
 OutputStreamWriter osw = new OutputStreamWriter(fos);
 BufferedWriter bw = new BufferedWriter(osw);
Â
 bw.write(" bw.close();
Â
 FileInputStream fis = new FileInputStream("1.txt");
 InputStreamReader isr = new InputStreamReader(fis);
 BufferedReader br = new BufferedReader(isr);
 System.out.println(br.readLine());
 br.close();
 */
 //InputStreamReader/OutputStreamWriter是一个ä¸é—´è¿‡åº¦ç±»,˜qžæŽ¥å—符和嗽W¦ä¸²
 InputStreamReader isr = new InputStreamReader(System.in);
 BufferedReader br = new BufferedReader(isr);
 String strLine;
 while((strLine=br.readLine())!=null)
 {
  System.out.println(strLine);
 }
 br.close();
 }
}
           å—符集的¾~–ç
 ASCII(American Standard Code for Information Interchange,¾ŸŽå›½ä¿¡æ¯äº’æ¢æ ‡å‡†ä»£ç ),是基
 于常用的英文å—符的一套电脑编ç ç³»¾lŸã€‚我们知é“英文举l常使用的嗽W¦ï¼Œæ•°å—½W¦å·è¢«è®¡½Ž—机
Â å¤„ç†æ—‰™ƒ½æ˜¯ä»¥äºŒè¿›åˆ¶ç¼–ç 的形å¼å‡ºçް(bit)äºŒè¿›åˆ¶æ•°å¯¹åº”ã€‚å…¶æœ€é«˜ä½æ˜?åQŒç›¸åº”çš„å进制数æ˜?-127
 如,数å—1åQŒæœ‰ä¸€äº›åˆ¶è¡¨ç¬¦å’Œå…¶ä»–符åïL»„æˆã€‚ASCII是现金最通用的å•å—节¾~–ç ¾pÈ»Ÿã€?/p>
 GB2312åQ?GB2312ç æ˜¯ä¸åŽäººæ°‘共和国国家汉å—ä¿¡æ¯äº¤æ¢ç”¨¾~–ç åQŒå…¨¿U°ã€Šä¿¡æ¯äº¤æ¢ç”¨æ±‰å—¾~–ç å?br /> ½W¦é›†-基本集》。主è¦ç”¨äºŽç»™æ¯ä¸€ä¸ªä¸æ–‡å—½W¦æŒ‡å®šç›¸åº”的数å—åQŒä¹Ÿž®±æ˜¯˜q›è¡Œ¾~–ç ã€‚ä¸€ä¸ªä¸æ–‡å—½W?br /> 用两个å—èŠ‚çš„æ•°å—æ¥è¡¨½Cºï¼Œä¸ÞZº†å’ŒASCIIç æœ‰æ‰€åŒºåˆ«åQŒå°†ä¸æ–‡å—符æ¯ä¸€ä¸ªå—节的最高佾|®éƒ½ç”?
 æ¥è¡¨½Cºã€?/p>
 GBKåQšäؓ了对更多的嗽W¦è¿›è¡Œç¼–ç ,国家åˆå‘布了新的¾~–ç ¾pÈ»ŸGBKåQˆGBKçš„K是“扩展â€çš„æ±‰è¯
Â æ‹¼éŸ³çš„ç¬¬ä¸€ä¸ªå—æ¯ï¼‰ã€‚在新的¾~–ç ¾pÈ»Ÿé‡Œï¼Œé™¤äº†å®Œå…¨å…¼å®¹GB2312外,˜q˜å¯¹¾J体䏿–‡åQŒä¸€äº›ä¸å¸¸ç”¨
 的汉å—和许多½W¦å·˜q›è¡Œäº†ç¼–ç ã€?/p>
 ISO-8859-1åQšæ˜¯è¥¿æ–¹å›½å®¶æ‰€ä½¿ç”¨çš„å—½W¦ç¼–ç 集åQŒæ˜¯ä¸€¿Uå•å—节的嗽W¦é›†åQŒè€Œè‹±æ–‡å®žé™…上åªç”¨äº†å…¶
Â ä¸æ•°å—å°äº?28的部分ã€?/p>
 Unicode: ˜q™æ˜¯ä¸€¿U通用的嗽W¦é›†åQŒå¯¹æ‰€æœ‰è¯a€çš„æ–‡å—进行统一¾~–ç åQŒå¯¹æ¯ä¸€ä¸ªå—½W¦éƒ½é‡‡ç”¨2个å—èŠ?br /> æ¥è¡¨½Cºï¼Œå¯¹äºŽè‹±æ–‡å—符采å–å‰é¢åŠ â€?â€å—节的½{–略实现½{‰é•¿å…¼å®¹ã€‚如"a"çš„ASCIIç 䨓0x61,
 UNICODEž®×ƒØ“0x00,0x61ã€?/p>
 UTF-8: Elight-bit UCS Transformation Format,(UCS,Universal Character Set,通用å—符é›?
 UCS是所有其他嗽W¦é›†æ ‡å‡†çš„一个超é›?。一ä¸?ä½çš„ASCIIç å€û|¼Œå¯¹åº”çš„UTFç æ˜¯ä¸€ä¸ªå—节,如果
 å—符æ˜?x0000åQŒæˆ–åœ?x0080ä¸?x007f之间åQŒå¯¹åº”çš„UTFç æ˜¯ä¸¤ä¸ªå—节åQŒå¦‚果嗽W¦åœ¨0x0800ä¸?xffff
 之间åQŒå¯¹åº”çš„UTFç æ˜¯ä¸‰ä¸ªå—节ã€?br /> ¾~–ç åQšå°†ä¸€ä¸ªUnicodeç è{æ¢äؓ本地å—符表示的过½E‹äØ“¾~–ç ã€?br /> 解ç åQšå°†ä¸€ä¸ªå—节è{æ¢äؓ一个嗽W¦ï¼ˆç”¨Unicode表示åQ‰ï¼Œ˜q™ä¸ª˜q‡ç¨‹å«è§£ç ã€?br />       [½Ž€å•的说去获å–一个Unicodeç 就是解ç ]
 code:
import java.util.*;
import java.nio.charset.*;
class CharsetTest
{
 public static void main(String[] args)throws Exception
 {
 /*
 Map m=Charset.availableCharsets();
 Set names=m.keySet();
 Iterator it =names.iterator();
 while(it.hasNext())
 {
  System.out.println(it.next());
 }
 */
 Properties pps=System.getProperties();
 //pps.list(System.out);
 pps.put("file.encoding","ISO-8859-1");
 int data;
 byte[] buf=new byte[100];
 int i=0;
 while((data=System.in.read())!='q')
 {
  buf[i]=(byte)data;
  i++;
 }
 String str=new String(buf,0,i);
 //String strGBK=new String(str.getBytes("ISO-8859-1"),"GBK");
 //System.out.println(strGBK);
 System.out.println(str);
 }
}
Â
    RandomAccessFile
 RandomAccessFile¾cÕdŒæ—¶å®žçŽîCº†DataInputå’ŒDataOutput接å£åQŒæä¾›äº†å¯ÒŽ–‡ä»‰™šæœºå˜å–的功能åQ?br /> 利用˜q™ä¸ª¾cÕd¯ä»¥åœ¨æ–‡äšgçš„ä“Q何佾|®è¯»å–或写入数æ®ã€?br /> RandomAccessFile¾cÀLä¾›äº†ä¸€ä¸ªæ–‡ä»¶æŒ‡é’ˆï¼Œç”¨æ¥æ ‡å¿—è¦è¿›è¡Œè¯»å†™æ“ä½œçš„ä¸‹ä¸€ä½æ•°æ®çš„ä½ç½®ã€?
Â
 code:
import java.io.*;
class RandomFileTest
{
 public static void main(String[] args)throws Exception
 {
 Student s1 = new Student(1,"zhangsan",98.5);
 Student s2 = new Student(2,"lisi",90.5);
 Student s3 = new Student(3,"wangwu",78.5);
Â
 RandomAccessFile rsf=new RandomAccessFile("student.txt","rw"); //å˜å–模å¼rw
 s1.WriteStudent(rsf);
 s2.WriteStudent(rsf);
 s3.WriteStudent(rsf);
Â
 Student s =new Student();
 rsf.seek(0); //把文件指针移到文仉™¦–
 for(long i=0;i<rsf.length();i=rsf.getFilePointer())
 {
  s.ReadStudent(rsf);
  System.out.println(s.num+":"+s.name+":"+s.score);
 }
 rsf.close();
 }
}
class Student
{
 int num;
 String name;
 double score;
 Student()
 {
Â
 }
 Student(int num,String name,double score)
 {
 this.num=num;
 this.name=name;
 this.score=score;
 }
 public void WriteStudent(RandomAccessFile raf)throws Exception
 {
 raf.writeInt(num);
 raf.writeUTF(name);
 raf.writeDouble(score);
 }
 public void ReadStudent(RandomAccessFile raf)throws Exception
 {
 raf.readInt();
 raf.readUTF();
 raf.readDouble();Â
 }
}
          对象åºåˆ—åŒ?/p>
 .ž®†å¯¹è±¡è{æ¢äØ“å—节‹¹ä¿å˜è“væ¥ï¼Œòq¶åœ¨æ—¥åŽ˜q˜åŽŸ˜q™ä¸ªå¯¹è±¡åQŒè¿™¿U机制å«åšå¯¹è±¡åºåˆ—化ã€?br /> .ž®†ä¸€ä¸ªå¯¹è±¡ä¿å˜åˆ°æ°æ€¹…å˜å‚¨è®‘Ö¤‡ä¸Šç§°ä¸ºæŒ¾l性ã€?br /> .ä¸€ä¸ªå¯¹è±¡è¦æƒŒ™ƒ½å¤Ÿå®žçްåºåˆ—化åQŒå¿…™åÕd®žçްSerializableæŽ¥å£æˆ–Externalizable接å£ã€?br /> .当一个对象被åºåˆ—化时åQŒåªä¿å˜å¯¹è±¡çš„éžé™æ€æˆå‘˜å˜é‡ï¼Œä¸èƒ½ä¿å˜ä»ÖM½•çš„æˆå‘˜å˜é‡å’Œé™æ€çš„
 æˆå‘˜å˜é‡ã€?br /> .如果一个对象的æˆå‘˜å˜é‡æ˜¯ä¸€ä¸ªå¯¹è±¡ï¼Œé‚£ä¹ˆ˜q™ä¸ªå¯¹è±¡çš„æ•°æ®æˆå‘˜ä¹Ÿä¼šè¢«ä¿å˜ã€?br /> .如果一个å¯åºåˆ—化的对象包å«å¯ÒŽŸä¸ªä¸å¯åºåˆ—化的对象的引用åQŒé‚£ä¹ˆæ•´ä¸ªåºåˆ—化æ“作ž®†ä¼šå¤ÞpÓ|åQ?br /> òq¶ä¸”会抛å‡ÞZ¸€ä¸ªNotSerializableException。我们å¯ä»¥å°†˜q™ä¸ªå¼•ç”¨æ ‡è®°ä¸ºtransient,那么对象
 ä»ç„¶å¯ä»¥åºåˆ—化ã€?/p>
 code:
import java.io.*;
class ObjectSerialTest
{
 public static void main(String[] args)throws Exception
 {
 Employee e1 = new Employee("zhangsan",20,2800.50);
 Employee e2 = new Employee("lisi",22,25000.50);
 Employee e3 = new Employee("wangwu",23,12800.50);
 Employee e4 = new Employee("blovesaga",22,3800.50);
Â
 FileOutputStream fos=new FileOutputStream("employee.txt");
 ObjectOutputStream oos=new ObjectOutputStream(fos);
 oos.writeObject(e1);
 oos.writeObject(e2);
 oos.writeObject(e3);
 oos.writeObject(e4);
 oos.close();
Â
 FileInputStream fis = new FileInputStream("employee.txt");
 ObjectInputStream ois =new ObjectInputStream(fis);
 Employee e;
 for(int i=0;i<4;i++)
 {
  e=(Employee)ois.readObject();
  System.out.println(e.name+":"+e.age+":"+e.salary);
 }
 ois.close();
 }
}
class Employee implements Serializable
{
 String name;
 int age;
 double salary;
 transient Thread t1 =new Thread();
 Employee(String name,int age,double salary)
 {
 this.name=name;
 this.age=age;
 this.salary=salary;
 }
 //å¯ä»¥å†™private void readObject()æ–ÒŽ³•æ¥æŽ§åˆ¶æˆ‘ä»¬è‡ªå·±æƒ³è¦å®žçŽ°çš„
 private void writeObject(java.io.ObjectOutputStream oos)throws Exception
 {
 //ä¾‹å¦‚æˆ‘ä»¬è‡ªå·±å†™æƒ³è¦æ˜¾½Cºçš„™åºåºå’Œé‚£äº›éœ€è¦æ˜¾½C?br /> oos.writeInt(age);
 oos.writeUTF(name);
 System.out.println("Write Object");
 }
 private void readObject(java.io.ObjectInputStream ois)throws Exception
 {
 //æŒ‰ç…§å†™å…¥çš„é¡ºåºæ¥è¯Õd–
 age=ois.readInt();
 name=ois.readUTF();
 System.out.println("Read Object");
 }
}
所谓框架就是一个类库的集åˆã€‚é›†åˆæ¡†æž¶å°±æ˜¯ä¸€ä¸ªç”¨æ¥è¡¨½Cºå’Œæ“作集åˆçš„统一框架åQŒåŒ…å«äº†å®žçް
集åˆçš„æŽ¥å£å’Œ¾c…R€?br />Â
Â é›†åˆæ¡†æž¶ä¸çš„æŽ¥å£
 .Collection: 集åˆå±‚次ä¸çš„æ ÒŽŽ¥å£ï¼ŒJDK没有æä¾›˜q™ä¸ªæŽ¥å£ç›´æŽ¥çš„实现类ã€?br /> .Set: ä¸èƒ½åŒ…å«é‡å¤çš„å…ƒç´ ã€‚SortedSet是一个按照å‡åºæŽ’åˆ—å…ƒç´ çš„Setã€?br /> .List: 是一个有åºçš„集åˆåQŒå¯ä»¥åŒ…å«é‡å¤çš„å…ƒç´ ã€‚æä¾›äº†æŒ‰ç…§ç´¢å¼•讉K—®çš„æ–¹å¼ã€?br /> .Map: 包å«äº†key-valueå¯V€‚Mapä¸èƒ½åŒ…å«é‡å¤çš„key。SortedMap是一个按照å‡åºæŽ’列keyçš„Mapã€?br />Â
Â é›†åˆæ¡†æž¶ä¸çš„实现¾c?br />Â
 实线表示¾l§æ‰¿¾c»ï¼Œè™šçº¿è¡¨ç¤ºå®žçް¾c…R€?br /> (囑֦‚ä¸?
.ArrayList: 我们å¯ä»¥ž®†å…¶çœ‹åšæ˜¯èƒ½å¤Ÿè‡ªåŠ¨å¢žé•¿å®¹é‡çš„æ•°ç»„ã€?br /> .利用ArrayListçš„toArray()˜q”回一个数¾l„ã€?br /> .Arrays.asList()˜q”回一个列表ã€?br /> .˜q代å™?Iterator)¾l™æˆ‘们æä¾›äº†ä¸€¿Ué€šç”¨çš„æ–¹å¼æ¥è®‰K—®é›†åˆä¸çš„å…ƒç´ ã€?/p>
 注æ„: 从集åˆç±»ä¸èŽ·å–一个数¾l?toArray(),从数¾l„获å–列表利用Arrays.asList()
 例å:
import java.util.*;
class ArrayListTest
{
 public static void printElement(Collection c)
 {
 Iterator it = c.iterator();
 while(it.hasNext())
 {
  System.out.println(it.next());
 }
 }
 public static void main(String[] args)
 {
 ArrayList a = new ArrayList();
 /*
 a.add("abc");
 a.add("def");
 a.add("hjk");
 */
Â
 a.add(new Point(1,1));
 a.add(new Point(2,2));
 a.add(new Point(3,3));
 /*
 Object[] o;
 o=a.toArray(); //ž®†é›†åˆç±»è½¬æ¢ä¸ºæ•°¾l?br /> for(int i=0;i<o.length;i++)
 {
  System.out.println(o[i]);
 }
Â
 List b = new ArrayList();
 b=Arrays.asList(o);
 System.out.println(b);
Â
 for(int i=0;i<a.size();i++)
 {
  System.out.println(a.get(i));
 }
Â
 System.out.println(a);
 System.out.println(a);
 */
Â
 /*
 Iterator it = a.iterator();
  如果è¦åˆ é™¤å…ƒç´ ï¼Œå¿…é¡»å…ˆè°ƒç”¨nextæ–ÒŽ³•
 it.next();
 it.remove();
 while(it.hasNext())
 {
  System.out.println(it.next());
 }
 */
 //˜q代器的作用: æä¾›ä¸€¾l„通用的访问方å¼?br /> printElement(a);
 }
}
class Point
{
 int x, y;
 Point(int x, int y)
 {
 this.x=x;
 this.y=y;
 }
 public String toString()
 {
 return "x="+x+","+"y="+y;
 }
}
 Collections¾c?/p>
 .排åº: Collections.sort(); [区别与Arrays.sort()]
 (1) 自然排åº(natural ordering);
 (2) 实现比较å™?Comparator)接å£ã€?br /> .å–æœ€å¤§å’Œæœ€ž®çš„å…ƒç´ : Collections.max(),Collections.min();
 .在已排åºçš„List䏿œç´¢æŒ‡å®šçš„å…ƒç´ : Collections.binarySearch()ã€?/p>
Â ä»£ç ½CÞZ¾‹:
import java.util.*;
class ArrayListTest
{
 public static void printElement(Collection c)
 {
 Iterator it = c.iterator();
 while(it.hasNext())
 {
  System.out.println(it.next());
 }
 }
 public static void main(String[] args)
 {
 /*
 ArrayList a = new ArrayList();
Â
 a.add("abc");
 a.add("def");
 a.add("hjk");
Â
Â
 a.add(new Point(1,1));
 a.add(new Point(2,2));
 a.add(new Point(3,3));
Â
 Object[] o;
 o=a.toArray(); //ž®†é›†åˆç±»è½¬æ¢ä¸ºæ•°¾l?br /> for(int i=0;i<o.length;i++)
 {
  System.out.println(o[i]);
 }
Â
 List b = new ArrayList();
 b=Arrays.asList(o);
 System.out.println(b);
Â
 for(int i=0;i<a.size();i++)
 {
  System.out.println(a.get(i));
 }
Â
 System.out.println(a);
 System.out.println(a);
 */
Â
 /*
 Iterator it = a.iterator();
  如果è¦åˆ é™¤å…ƒç´ ï¼Œå¿…é¡»å…ˆè°ƒç”¨nextæ–ÒŽ³•
 it.next();
 it.remove();
 while(it.hasNext())
 {
  System.out.println(it.next());
 }
 */
 //˜q代器的作用: æä¾›ä¸€¾l„通用的访问方å¼?br /> //printElement(a);
Â
 Student s1 = new Student(1,"zhangsan");
 Student s2 = new Student(2,"lisi");
 Student s3 = new Student(3,"wangwu");
 Student s4 = new Student(3,"blovesaga");
Â
 ArrayList a = new ArrayList();
 a.add(s1);
 a.add(s2);
 a.add(s3);
 a.add(s4);
Â
 //Collections.sort(a);
 Collections.sort(a,new Student.StudentComparator());
 printElement(a);
 }
}
class Point
{
 int x, y;
 Point(int x, int y)
 {
 this.x=x;
 this.y=y;
 }
 public String toString()
 {
 return "x="+x+","+"y="+y;
 }
}
class Student implements Comparable
{
 int num;
 String name;
 //实现比较器,它æ€ÀL˜¯å’Œæˆ‘们的一个类相关,用内部类
 static class StudentComparator implements Comparator //ä¸ÞZº†è°ƒç”¨æ–¹ä¾¿å£°æ˜Žä¸ºé™æ€çš„
 {
 public int compare(Object o1,Object o2)
 {
  Student s1 = (Student)o1;
  Student s2 = (Student)o2;
  int result=s1.num > s2.num ? 1: (s1.num==s2.num ? 0 : -1);
  if(result==0)
  {
   return s1.name.compareTo(s2.name);
  }
  return result;
 }
 }
 Student(int num,String name)
 {
 this.num=num;
 this.name=name;
 }
 public int compareTo(Object o)
 {
 Student s=(Student)o;
 return num > s.num ? 1 :( (num==s.num) ? 0 : -1);
 }
Â
 public String toString()
 {
 return +num+":"+name;
 }
}
class Test
{
 public static void main(String[] args)
 {
 int i=3;
 Integer in=new Integer(i);
 int j=in.intValue();
 System.out.println(j);
 String str=in.toString(); //把Integer对象转æ¢ä¸ºString¾cÕdž‹
 System.out.println("str="+str);
Â
 String str1="123";
 System.out.println(Integer.valueOf(str1)); //把String¾cÕdž‹è½¬æ¢ä¸ºInteger¾cÕdž‹
Â
 boolean b1=false;
 Boolean b=new Boolean(b1);
 String s1=b.toString();
 System.out.println(s1);
Â
 String s2="NO";
 System.out.println(Boolean.valueOf(s2));
 }
}
*****************Class*********************
1> 在Javaä¸ï¼Œæ¯ä¸ªclass都有一个相应的Class对象。也ž®±æ˜¯è¯ß_¼Œå½“我们编写一个类åQŒç¼–译完æˆåŽ,在生æˆ?br />  çš?classæ–‡äšgä¸?ž®×ƒ¼šäº§ç”Ÿä¸€ä¸ªClass对象åQŒç”¨äºŽè¡¨½Cø™¿™ä¸ªç±»çš„类型信æ¯ã€?br />2> 获å–Class实例的方法有三ç§:
  <1>利用对象调用getClass()æ–ÒŽ³•获得该对象的Class实例ã€?br />  <2>使用Class¾cÈš„陿€æ–¹æ³•forName(),用类的åå—获å–一个Class的是实例ã€?br />  <3>˜q用.classçš„æ–¹å¼æ¥èŽ·å–Class实例åQŒå¯¹äºŽåŸºæœ¬æ•°æ®ç±»åž‹çš„ž®è£…¾c»ï¼Œ˜q˜å¯ä»¥ç”¨.TYPEæ¥èŽ·å–相应的
     基本数殾cÕdž‹çš„Class实例ã€?br />  <4>在è¿è¡ŒæœŸé—ß_¼Œå¦‚果我们è¦äñ”生æŸä¸ªç±»çš„对象,JAVA虚拟æœ?JVM)会检查该¾cÕdž‹çš„Class对象是å¦è¢?br />Â Â Â Â Â åŠ è²åQŒå¦‚æžœæ²¡æœ‰åŠ è½?JVMä¼šæ ¹æ®ç±»çš„å¿U°æ‰¾åˆ?classæ–‡äšgòq¶åŠ è½½å®ƒã€‚ä¸€æ—¦æŸä¸ªç±»åž‹çš„Class对象å·?br />     ¾lè¢«åŠ è²åˆ°å†…å˜ï¼Œž®±å¯ä»¥ç”¨å®ƒæ¥äº§ç”Ÿè¯¥ç±»åž‹æ‰€æœ‰çš„对象ã€?br />  <5>newInstance()调用¾cÖM¸¾~ºçœçš„æž„é€ æ–¹æ³•ã€?好处是我们在ä¸çŸ¥é“类的åå—çš„æƒ…å†µä¸‹åŽ»åˆ›é€ ä¸€ä¸ªå®žä¾‹ï¼‰
import java.lang.reflect.*;      //å包必须手动导入
class ClassTest
{
 public static void main(String[] args)//throws Exception
 {
 /*
 Point pt=new Point();            Â
 Class c1=pt.getClass();//利用对象调用getClass()æ–ÒŽ³•获得该对象的Class实例
 System.out.println(c1.getName());
Â
 Class c2=Class.forName("Point");//使用Class¾cÈš„陿€æ–¹æ³•forName(),用类的åå—获å–一个Class的是实例
 System.out.println(c2.getName());
Â
 Class c3=Point.class;//˜q用.classçš„æ–¹å¼æ¥èŽ·å–Class实例
 System.out.println(c3.getName());
Â
 Class c4=Integer.TYPE;//ž®è£…¾cÈ”¨.TYPEæ¥èŽ·å–相应的基本数殾cÕdž‹çš„Class实例ã€?br /> System.out.println(c4.getName());
 */
 /*
 System.out.println("before new Point()");
 new Point();
 System.out.println("after new Point()");
 Class.forName("Line");
 */
 /*
 if(args.length!=1)
 {
  return;
 }
 try
 {
  Class c=Class.forName(args[0]);
  Point pt=(Point)c.newInstance();
  pt.output();
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
 */
 if(args.length!=1)
 {
  return;
 }
 try
 {
  Class c=Class.forName(args[0]);
  Constructor[] cons=c.getDeclaredConstructors();
  /*
  for(int i=0;i<cons.length;i++)
  {
   System.out.println(cons[i]);
  }
  Method[] ms=c.getDeclaredMethods();
  for(int i=0;i<ms.length;i++)
  {
   System.out.println(ms[i]);
  }*/
  Class[] params=cons[0].getParameterTypes();
  Object[] paramValues=new Object[params.length];
  for(int i=0;i<params.length;i++)
  {
   if(params[i].isPrimitive())
   {
    paramValues[i]=new Integer(i+3);
   }
  }
  Object o=cons[0].newInstance(paramValues);
  Method[] ms=c.getDeclaredMethods();
  ms[0].invoke(o,null);
 }
 catch(Exception e)
 {
  e.printStackTrace();
 }
Â
 }
}
class Point
{
 static
 {
 System.out.println("Loading Point");
 }
 int x,y;
 void output()
 {
 System.out.println("x="+x+","+"y="+y);
 }
 Point(int x,int y)
 {
 this.x=x;
 this.y=y;
 }
}
class Line
{
 static
 {
 System.out.println("Loading Line");
 }
}
class Student implements Cloneable
{
 Professor p;
 String name;
 int age;
 Student(String name, int age,Professor p)
 {
 this.name=name;
 this.age=age;
 this.p=p;
 }
 public Object clone()
 {
 Object o=null;
 try
 {
  o=super.clone();
 }
 catch(CloneNotSupportedException e)
 {
  e.printStackTrace();
 }
 return o;
 }
}
改å˜å¦ç”Ÿs2的教授信æ¯ï¼Œæ‰“å°s1教授信æ¯,¾l“æžœä¸?name=feifei,age=30.产生˜q™ä¸ª¾l“æžœæ˜¯å› ä¸ºString是一个常é‡ç±»åž?
Â
深克�br />code:
class DeeplyClone
{
 public static void main(String[] args)
 {
  Professor p=new Professor("feiyang",23);
  Student s1=new Student("zhangshan",18,p);
  Student s2=(Student)s1.clone();
  s2.p.name="Bill.Gates";
  s2.p.age=30;
  System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
 }
}
class Professor implements Cloneable
{
 String name;
 int age;
 Professor(String name,int age)
 {
 this.name=name;
 this.age=age;
 }
 public Object clone()
 {
 Object o=null;
 try
 {
  o=super.clone();
 }
 catch(CloneNotSupportedException e)
 {
  e.printStackTrace();
 }
 return o;
 }
}
class Student implements Cloneable
{
 Professor p;
 String name;
 int age;
 Student(String name, int age,Professor p)
 {
 this.name=name;
 this.age=age;
 this.p=p;
 }
 public Object clone()
 {
 //Object o=null;
 Student o=null;
 try
 {
  o=(Student)super.clone();
 }
 catch(CloneNotSupportedException e)
 {
  e.printStackTrace();
 }
 o.p=(Professor)p.clone();
 return o;
 }
}
打尾l“æžœä¸?name=Bill.Gates,age=30,˜q™å°±æ˜¯æ·±å…‹éš†.
1> 在Java䏿‰€æœ‰çš„æ•°ç»„都有一个缺çœçš„属性lengthåQŒç”¨äºŽèŽ·å–æ•°¾l„å…ƒç´ çš„ä¸ªæ•°ã€?br />2> 数组的å¤åˆ? System.arraycopy()ã€?br />3> 数组的排åº? Arrays.sort()ã€?br />4> 在已排åºçš„æ•°¾l„䏿Ÿ¥æ‰¾æŸä¸ªå…ƒç´ åQšArrays.binarySearch()ã€?br />具体的看看下é¢çš„2个例å?
code1:
class ArrayTest
{
 public static void main(String[] args)
 {
 /*数组的copy
 int[] num1=new int[]{1,2,3};
 int[] num2=new int[3];
 System.arraycopy(num1,0,num2,0,num1.length);
 for(int i=0;i<num2.length;i++)
 {
  System.out.println(num2[i]);
 }
 */
 //引用¾cÕdž‹çš„æ•°¾l„copy
 Point[] pts1=new Point[]{new Point(1,1),new Point(2,2),new Point(3,3)};
 Point[] pts2=new Point[3];
 System.arraycopy(pts1,0,pts2,0,pts1.length);
 for(int i=0;i<pts2.length;i++)
 {
  System.out.println("x="+pts2[i].x+","+"y="+pts2[i].y);
 }
 /*
 *å› äØ“å¼•ç”¨¾cÕdž‹ä¼ 递的是引用的拯‚´åQŒæ‰€ä»¥æˆ‘们修改pts2æ•°ç»„çš„ç¬¬äºŒä¸ªç‚¹çš„åæ ‡åQ?br /> *当我们打å°pts1æ•°ç»„çš„ç¬¬ä¸€ä¸ªç‚¹çš„åæ ‡æ—¶åQŒå®ƒçš„åæ ‡ç‚¹å·²ç»è¢«ä¿®æ”¹äØ“(5,5)äº?br /> pts2[1].x=5;
 pts2[1].y=5;
 System.out.println("x="+pts1[1].x+","+"y="+pts1[1].y);
 */
 }
}
class Point
{
 int x, y;
 Point(int x,int y)
 {
 this.x=x;
 this.y=y;
 }
}
code2:
import java.util.*;
class TestArray
{
 public static void main(String[] args)
 {
 /*
 int[] num=new int[]{3,2,1};
 Arrays.sort(num);
 for(int i=0;i<num.length;i++)
 {
  System.out.println(num[i]);
 }
 int index=Arrays.binarySearch(num,3);
 System.out.println("index="+index);
 System.out.println("Element="+num[index]);
 */
 Student[] ss=new Student[]{new Student("zhangshan",1),
                           new Student("lisi",2),
                           new Student("wangwu",3),
                           new Student("mybole",3)};
  Arrays.sort(ss);
  for(int i=0;i<ss.length;i++)
  {
   System.out.println(ss[i]);
  }
  int index=Arrays.binarySearch(ss,new Student("lisi",2));
  System.out.println("name="+ss[index].name+","+"index="+index);
 }
}
class Student implements Comparable
{
 String name;
 int num;
 Student(String name,int num)
 {
 this.name=name;
 this.num=num;
 }
 public String toString()
 {
 return "name="+name+","+"number="+num;
 }
 public int compareTo(Object o) //对于Object[]排åºè¦æ±‚实现Comparable接å£
 {
 Student s=(Student)o;
 //return num>s.num ? 1 :(num==s.num ? 0 : -1);
 int result=num>s.num ? 1 :(num==s.num ? 0 : -1);//按å嗿ޒåº?br /> if(0==result)
 {
  result=name.compareTo(s.name);
 }
 return result;
 }
}
      blovesage写下˜q™æ®µä»£ç 我们期望得到应该扑֛žçš„é›¶é’?.90,但是当è¿è¡ŒåŽä»–å‘现数æ®ä¸å…‘,˜q行¾l“æžœä¸?0.8999999999999999,与预期的0.90ä¸ä¸€æ —÷€‚äØ“ä»€ä¹ˆå‘¢?æžäº†åŠå¤©åŽŸå› åœ¨äºŽ1.1˜q™ä¸ªæ•îC¸èƒ½è¢«¾_„¡¡®çš„表½CÞZؓ一个double,å› æ¤è¢«è¡¨½CÞZؓ最接近它的doubleå€?该程åºä»Ž2ä¸å‡åŽ»è¿™ä¸ªå€¼å¾—.é—æ†¾çš„æ˜¯,˜q™ä¸ª¾l“果打å°å‡ºæ¥òq¶ä¸æ˜¯æŽ¥˜q?.9çš„doubleå€?˜q™è¯´æ˜? òq¶ä¸æ˜¯æ‰€æœ‰çš„ž®æ•°éƒ½å¯ä»¥ç”¨äºŒè¿›åˆ¶æÕQç‚ÒŽ•°¾_„¡¡®è¡¨ç¤º.二进制æÕQ点对于货å¸è®¡½Ž—是éžå¸¸ä¸é€‚åˆçš?
     è¦è§£å†Œ™¿™ä¸ªé—®é¢˜æœ‰ä¸¤ä¸ªåŠžæ³•:一是ä‹É用柿Uæ•´æ•°ç±»åž?例如int或long,òq¶ä¸”分å•使¥è®¡ç®—.如下:
System.out.println((200-110)+"fen");
¾l“æžœä¸?0åˆ?二是使用执行ž®æ•°˜qç®—çš„BigDecimal.它还å¯ä»¥é€šè¿‡JDBC与SQL DECIMAL¾cÕdž‹˜q›è¡Œäº’æ“ä½?˜q™é‡Œéœ€è¦æ³¨æ„çš„æ˜? 一定è¦ç”¨BigDecimal(String)æž„é€ å™¨,而åƒä¸‡ä¸è¦ç”¨BigDecimal(double).åŽä¸€ä¸ªæž„é€ å™¨ž®†ç”¨å®ƒçš„傿•°å€¼æ¥åˆ›å¾ä¸€ä¸ªå®žä¾?例如new BigDecimal(.1),它将˜q”回一个BigDecimal,也å³0.10000000000000000555111512312578270211815834041015625.æ£ç¡®ä½¿ç”¨æˆ‘们ž®±å¯ä»¥å¾—到期望的¾l“æžœ0.90:
code:
import java.math.BigDecimal;
class Change
{
 public static void main(String[] args)
 {
 System.out.println(new BigDecimal("2.00").
                    subtract(new BigDecimal("1.10")));
 }
}
Print:
F:\Java Develop>java Change
0.90
class Indecisive
{
 public static void main(String[] args)
 {
 System.out.println(decisive());
 }
 static boolean decisive()
 {
 try
 {
  return true;
 }
 finally
 {
  return false;
 }
 }
}
Â Â ä½ å¯èƒ½è®¤ä¸ø™¿™ä¸ªç¨‹åºä¸åˆæ³•。毕竟,decisiveæ–ÒŽ³•ä¸èƒ½åŒæ—¶˜q”回trueå’Œfalseã€‚å¦‚æžœä½ ž®è¯•一下,ž®×ƒ¼šå‘现å®?br />¾~–译时没有ä“Q何错误,òq¶ä¸”它打å°çš„æ˜¯falseã€‚äØ“ä»€ä¹ˆå‘¢?
Â Â Â åŽŸå› åœ¨äºŽž®±æ˜¯åœ¨ï¼šåœ¨ä¸€ä¸ªtry-finallyè¯å¥ä¸ï¼Œfinallyè¯å¥å—æ€ÀL˜¯åœ¨æŽ§åˆ¶æƒ¼›Õd¼€tryè¯å¥å—æ—¶æ‰§è¡Œã€‚æ— è®ºtry
è¯å¥å—是æ£å¸¸¾l“æŸçš„,˜q˜æ˜¯æ„外¾l“æŸåQŒæƒ…况都是如æ¤ã€‚在一æ¡è¯å¥æˆ–一个è¯å¥å—抛出一个异常,或者对æŸä¸ªž®é—¾cÕdž‹è¯å¥æ‰§è¡Œäº†ä¸€ä¸ªbreak或continueåQŒæˆ–是僘q™ä¸ª½E‹åºä¸€æ äh‰§è¡Œäº†ä¸€ä¸ªreturnæ—Óž¼Œž®†å‘生æ„外结æŸã€‚之所以称为æ„外结æŸï¼Œæ˜¯å› 为它们阻æ¢ç¨‹åºæŒ‰™åºåºæ‰§è¡Œä¸‹é¢çš„è¯å¥ã€?br />   当tryè¯å¥å—å’Œfinallyè¯å¥å—都æ„外¾l“æŸæ—Óž¼Œåœ¨tryè¯å¥å—ä¸å¼•呿„外¾l“æŸçš„åŽŸå› å°†è¢«ä¸¢å¼ƒï¼Œè€Œæ•´ä¸ªtry-finally
è¯å¥æ„外¾l“æŸçš„åŽŸå› å°†ä¸Žfinallyè¯å¥å—æ„外结æŸçš„åŽŸå› ç›¸åŒã€‚在˜q™ä¸ª½E‹åºä¸ï¼Œåœ¨tryè¯å¥å—ä¸çš„returnè¯å¥æ‰€
引å‘çš„æ„外结æŸå°†è¢«ä¸¢å¼ƒï¼Œè€Œtry-finallyè¯å¥æ„外¾l“æŸæ˜¯ç”±finallyè¯å¥å—ä¸çš„returné€ æˆçš„。简å•çš„è®ÔŒ¼Œ½E‹åº
ž®è¯•ç€(try)˜q”回(return)true,但是它最¾l?finally)˜q”回(return)的是falseã€?br />   æ€ÖM¹‹åQŒæ¯ä¸€ä¸ªfinallyè¯å¥å—都应该æ£å¸¸¾l“æŸåQŒé™¤éžæŠ›å‡ÞZ¸å—检查的异常。åƒä¸‡ä¸è¦ç”¨return,break,continue或throwæ¥é€€å‡ºfinallyè¯å¥å—,òq¶ä¸”åƒä¸‡ä¸è¦å…许让嗋‚€æŸ¥çš„å¼‚å¸¸ä¼ æ’到finallyè¯å¥å—之外ã€?/p>