ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩激情图片,www黄在线观看,国产精品超碰97尤物18http://www.aygfsteel.com/dorydoo/category/12567.htmlAction Action Actionzh-cnTue, 27 Feb 2007 12:18:44 GMTTue, 27 Feb 2007 12:18:44 GMT60JDBC2.0新特æ€?http://www.aygfsteel.com/dorydoo/archive/2006/06/28/55468.html多力宇扬多力宇扬Wed, 28 Jun 2006 01:46:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/28/55468.htmlhttp://www.aygfsteel.com/dorydoo/comments/55468.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/28/55468.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55468.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55468.html JDBC 2.0æ¯?.0有了一些不å?体现在四个比较明昄¡š„æ–šw¢:
1>. ResutlSet对象中的Cursor能够自由上下¿UÕdЍ
2>. 能直接ä‹É用Java½E‹åºè¯­è¨€æ¥æ›´æ–°DB表里的内å®?而不需要额外写SQL语法
3>. 可以一‹Æ¡ä¼ é€è®¸å¤šSQL语句到DB执行----Batch
4>. 新增2个数据类�BLOB和CLOB)
   我们知道在JDBC 1.0æ—?只要ç”?connection.createStatement()ž®Þpƒ½å–å¾—Statement()对象.不过åœ?.0中多的createStatement()
多了两个参数�需要我们自己来定义�
public Statement createStatement(int resultSetType,
                                 int resultSetConcurrency)throws SQLException
   ½W¬ä¸€ä¸ªå‚æ•°resultSetType用来讑֮šResultSet对象中的光标是否可以自由上下¿UÕdЍ,它的值有三种,TYPE_FORWARD_ONLY,TYPE_SCROLL_SENSITIVE,
TYPE_SCROLL_INSENSITIVE.è‹¥äØ“TYPE_FORWARD_ONLYž®Þp¡¨½Cºå’Œ1.0一样只能用next()æ–ÒŽ³•;然后后两者可以让Cursor随便的自ç”Þq§»åŠ?不过,
它们两者最大的区别在于:当ResutlSet中的值有改变�TYPE_SCROLL_SENSITIVE能取得修改后的�而TYPE_SCROLL_INSENSITIVE则不�
  ½W¬è€Œä¸ªå‚æ•°resultSetConcurrentcy,主要是设定ResultSet对象是只è¯?read-only)˜q˜æ˜¯å¯ä»¥æ”¹å˜çš?updateable),它可能的值有两种,
CONCUR_READ_ONLY或者是CONCUR_UPDATE.若设¾|®äØ“CONCUR_READ_ONLY,ResultSet对象å’?.0一æ ?è‹¥äØ“CONCUR_UPDATEABLE,那么ž®±å¯ä»¥ç”¨
ResultSet对象执行数据库的修改,增加和移除功�for example:
先看功能å’?.0一æ ïLš„写法:
Statement stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
                                   ResultSet.CONCUR_READ_ONLY);
RestultSet rs=stmt.executeQuery("select ename,empno from emp");
while(rs.next())
{
   String name=rs.getString("ename");
   int empno=rs.getInt("empno");
   System.out.println("name="+name+","+"number="+empno);
}
输出¾l“æžœä¸?
name=feiyang,number=1190
name=jack,   number=1230
name=BillGates number=12
...........
再看看下面这�
Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                   ResultSet.CONCUR_READ_ONLY);
RestultSet rs=stmt.executeQuery("select ename,empno from emp");
rs.afterLast();
while(rs.previous())
{
   String name=rs.getString("ename");
   int empno=rs.getInt("empno");
   System.out.println("name="+name+","+"number="+empno);
}
输出¾l“æžœä¸?
name=BillGates number=12
name=jack,   number=1230
name=feiyang,number=1190
.............
˜q™å’Œä¸Šé¢½W¬ä¸€æœ‰ç‚¹ä¸åŒçš„æ˜¯™åºåºé¢ å€’了,˜q™æ˜¯å› äؓ我们使用了rs.afterLast()˜q™ä¸ªæ–ÒŽ³•.其实2.0中还有很多方æ³?如下:
rs.absolute(-1); //表示cursor在最后一½W”æ•°æ?å?rs.last()
rs.absolute(1);  //表示cursor在第一½W”æ•°æ?即rs.first()
rs.absolute(n);  //表示cursor在第N½W”æ•°æ?br />假ä‹É我们目前æœ?000½W”数据,取得½W?97½W?br />rs.absolute(-4);
˜q˜æœ‰ä¸€ä¸ªæ–¹æ³•å’Œabsolute很相åƒ?那就是relative(),
rs.absolute(5); //表示½W¬äº”½W”æ•°æ?br />......
rs.relative(-3);  //表示cursor目前在第二笔数据
.......
rs.relative(1);  //cursor目前在第三笔数据
看看怎么用ResultSet对象执行更新数据库动ä½?br />   要让ResultSet对象执行更新数据库的动作åQŒé¦–先在声明Statement对象æ—?参数必须讄¡½®ä¸ºTYPE_SCROLL_SENSITIVEå’?br />CUNCOR_UPDATEABLE.
Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_UPDATEABLE);
ResultSet rs=stmt.executeQuery("select ename,empno from emp);
rs.last();
rs.updateInt("empno",2230);
rs.cancelRowUpdates();
rs.updateInt("empno",1213);
rs.updateRow();
新增数据到数据库
Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_UPDATEABLE);
ResultSet rs=stmt.executeQuery("select * from emp);
rs.moveToInsertRow();
rs.updateInt("empno",2230);
rs.updateString("ename","feiyang");
rs.updateString("job","clerk");
rs.updateFloat("sal",123456.5);
rs.insertRow();
删除数据
Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_UPDATEABLE);
ResultSet rs=stmt.executeQuery("select * from emp);
rs.absolute(4);
rs.deleteRow();
依次执行多条SQL语句
Statement stmt=con.createStatment();
int[] rows;
stmt.addBatch("insert into emp values('feiyang','123456')");
stmt.addBatch("insert into offcie values('employee','Shanghai')");
rows=stmt.executeBatch();
å½“æ‰§è¡Œå¤§é‡æ•°æ®çš„æ—¶å€™äØ“äº†æ•°æ®çš„å®Œæ•´æ€?廸™®®ä½¿ç”¨Transaction
eg:
con.setAutoCommit(false);
Statement stmt=con.createStatement();
int[] rows;
stmt.addBatch("1...........");
stmt.addBatch("2...........");
stmt.addBatch("3...........");
stmt.addBatch("4...........");
stmt.addBatch("5...........");
stmt.addBatch("6...........");
rows=stmt.executeBatch();
con.commit();
在JDBC2.0中新增加BLOBå’ŒCLOB两个数据¾cÕdž‹
BOLB指的是二˜q›åˆ¶å¤§åž‹å¯¹è±¡(Binary Large Object),CLOB指的是字½W¦å¤§åž‹å¯¹è±?Character Large Object).它们用来处理大型
的数据类åž?他们分别代表大量的二˜q›åˆ¶æ•°æ®å’Œæ–‡å­—æ•°æ?

多力宇扬 2006-06-28 09:46 发表评论
]]>
Java学习½W”è®°-I/Ohttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55383.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:40:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55383.htmlhttp://www.aygfsteel.com/dorydoo/comments/55383.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55383.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55383.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55383.html    File¾c?/p>

 一个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");
 }
}



多力宇扬 2006-06-27 17:40 发表评论
]]>
Java学习½W”è®°-集合框架中的接口http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55382.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:36:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55382.htmlhttp://www.aygfsteel.com/dorydoo/comments/55382.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55382.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55382.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55382.html Collection             Map(å’ŒCollection接口没ä“Q何关¾p?
       / \                         |
      /   \                        |      
 Set   List              SortedMap
    /
   /
SortedSet
(接口�

所谓框架就是一个类库的集合。集合框架就是一个用来表½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;
 }
}



多力宇扬 2006-06-27 17:36 发表评论
]]>
Java学习½W”è®°-Runtimeå’ŒProcess¾c?/title><link>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55379.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Tue, 27 Jun 2006 09:30:00 GMT</pubDate><guid>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55379.html</guid><wfw:comment>http://www.aygfsteel.com/dorydoo/comments/55379.html</wfw:comment><comments>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dorydoo/comments/commentRss/55379.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dorydoo/services/trackbacks/55379.html</trackback:ping><description><![CDATA[ <p>>>>>>>>>>>>>>>>>Runtimeå’ŒProcess¾c?lt;<<<<<<<<<<<<<<<<<<<br />1> 每一个Java½E‹åºéƒ½æœ‰ä¸€ä¸ªRuntime¾cȝš„单一实例ã€?br />2> 通过Runtime.getRuntime()获取Runtime¾cȝš„实例ã€?br />3> Runtime¾cÀL˜¯ä½¿ç”¨å•例模式的一个例子ã€?br />   Runtime没有public的构造方法。我们必™åȝ”¨Runtime的静态方法getRuntime();我们可以ç”?br />   Runtimeçš„exec来执行一个外部程序,也可以用来编译一个源文äšg(用来做图形界面的¾~–译å™?ã€?br />import java.io.*;<br />class RuntimeTest<br />{<br /> public static void main(String[] args)<br /> {<br />  Runtime rt=Runtime.getRuntime();<br />  //System.out.println(rt.freeMemory());<br />  try<br />  {<br />   //rt.exec("notepad");<br />   Process p=rt.exec("java ArrayTest");<br />   InputStream is=p.getInputStream(); //从执行ArrayTest¾cÀL‰€å¾—来çš?br />   int data;<br />   while((data=is.read())!=-1)<br />   {<br />    System.out.print((char)data);<br />   }<br />  }<br />  catch(Exception e)<br />  {<br />   e.printStackTrace();<br />  }<br /> }<br />}</p> <p>------------->>设计模式<<-------------<br />1> 在我们进行程序设计时,逐渐形成了一些典型问题和问题解决æ–ÒŽ¡ˆ,˜q™å°±æ˜¯èÊY件模式ã€?br />2> 每一个模式描˜qîCº†ä¸€ä¸ªåœ¨æˆ‘们½E‹åºè®¾è®¡ä¸­ç»å¸¸å‘生的问题,以及该问题的解决æ–ÒŽ¡ˆã€?br />3> 当我们碰到模式所描述的问题,ž®±å¯ä»¥ç›´æŽ¥ç”¨ç›¸åº”的解å†Ïx–¹æ³•去解决˜q™ä¸ªé—®é¢˜,˜q™å°±æ˜¯è®¾è®¡æ¨¡å¼ã€?br /><$>单例(Singleton)模式<br />1> ä¸€ä¸ªç±»åªæœ‰ä¸€ä¸ªå®žä¾‹ï¼Œè€Œä¸”è‡ªè¡Œå®žä¾‹åŒ–åÆˆåƒæ•´ä¸ªç³»¾lŸæä¾›è¿™ä¸ªå®žä¾‹ï¼Œ˜q™ä¸ª¾cȝ§°ä¸ºå•例类ã€?br />2> 单例¾cȝš„一个重要特点就是类的构造方法是¿Uæœ‰çš?从而避免了外部用利用构造方法直接创建多个实例ã€?br />   å¦?Runtime¾c…R€?/p> <p>单例¾cȝš„实现:(code)<br />class Singleton<br />{<br /> private static final Singleton st=new Singleton();<br /> private Singleton()<br /> {<br />  <br /> }<br /> public static Singleton getInstance()<br /> {<br />  return st;<br /> }<br />}</p> <img src ="http://www.aygfsteel.com/dorydoo/aggbug/55379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dorydoo/" target="_blank">多力宇扬</a> 2006-06-27 17:30 <a href="http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习½W”è®°-ž®è£…¾c?amp;&Classhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55378.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:29:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55378.htmlhttp://www.aygfsteel.com/dorydoo/comments/55378.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55378.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55378.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55378.html=============================ž®è£…¾c?==============
针对八种基本数据¾cÕdž‹å®šä¹‰çš„相应的引用¾cÕdž‹-ž®è£…¾c?包装¾c»ï¼ŒåŒ…裹¾c?
基本数据¾cÕdž‹Â Â Â Â Â Â Â Â Â  ž®è£…¾c?br /> boolean               Boolean
 byte                  Byte
 short                 Short
 int                   Integer
 long                  Long
 char                  Character
 float                 Float
 double                Double
所有的ž®çж¾c»éƒ½æ˜¯ä¸€ä¸ªåªè¯È±»åQˆä¸èƒ½ä¿®æ”¹çš„).针对没个基本¾cÕdž‹æˆ‘们只能建立一个这è¯Èš„ã€?/p>

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");
 }
}



多力宇扬 2006-06-27 17:29 发表评论
]]>
Java学习½W”è®°-函数的调ç”?/title><link>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55377.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Tue, 27 Jun 2006 09:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55377.html</guid><wfw:comment>http://www.aygfsteel.com/dorydoo/comments/55377.html</wfw:comment><comments>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dorydoo/comments/commentRss/55377.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dorydoo/services/trackbacks/55377.html</trackback:ping><description><![CDATA[~~~~~~~~~~~~~~~~~~~~~~~~~~函数的调用~~~~~~~~~~~~~~~~~~~~<br />1> 在java中,传参æ—Óž¼Œéƒ½æ˜¯ä»¥ä¼ å€¼çš„形式惊行ã€?br />2> 对于基本数据¾cÕdž‹åQŒä¼ é€’的是数据的拯‚´åQŒå¯¹äºŽå¼•用类型,传递的引用的拷贝ã€?br />3> 当我们在打印一个对象的时候,比如System.out.println(pt);åQŒå®ƒä¼šè‡ªåŠ¨è°ƒç”¨ç±»çš„toString()æ–ÒŽ³•<br />   åQŒæ‰€ä»¥å¾è®®åœ¨æ‰€æœ‰çš„子类中重写toString()æ–ÒŽ³•ã€?br />我们写一个函数用来交换两个变é‡?x,y)çš„å€?<br /> code: <br />class StringTest<br />{<br /> public static void change(int x, int y)<br /> {<br />  x=x+y;<br />  y=x-y;<br />  x=x-y;<br /> }<br /> /*<br /> public static void change(int[] num)<br /> {<br />  num[0]=num[0]+num[1];<br />  num[1]=num[0]-num[1];<br />  num[0]=num[0]-num[1];<br /> }<br /> public static void change(Point pt)<br /> {<br />  pt.x=pt.x+pt.y;<br />  pt.y=pt.x-pt.y;<br />  pt.x=pt.x-pt.y;<br /> }<br /> */<br /> public static void main(String[] args)<br /> {<br /> int x=3;<br /> int y=4;<br /> change(3,4);<br /> System.out.println("x="+x+","+"y="+y);<br /> }<br />我们期望的输出结果是 x=4,y=3 然后你运行后发现¾l“果为x=3,y=4,òq¶æ²¡æœ‰è¾¾åˆ°æˆ‘们的要求,ä¸ÞZ»€ä¹ˆå‘¢?é‚£æ˜¯å› äØ“å¯¹äºŽåŸºæœ¬æ•°æ®¾cÕdž‹åQŒä¼ é€’的是数据的拯‚´åQŒå¯¹äºŽå¼•用类型,传递的是引ç”?首地址)的拷贝。看看下面的内存图解应该你就能看出来äº?看看引用¾cÕdž‹æ€Žä¹ˆæ¥å®žçŽ?<br /><img src="http://tk.files.storage.msn.com/x1pIuxx1VYmtQswcHPAwKaQ-yrErau7hNtnGE6aUTj3uhpVNVypAIyC0UrmgrkQwbG_eWxcbHVi_BCUGixRsexXpmeQJm6kBIQwr0l3XGz-acoQqeNnnp3fc9gOVp8Wgp1PF3CsaXYcAgo" /><br />code:<br />class StringTest<br />{<br /> /*<br /> public static void change(int x, int y)<br /> {<br />  x=x+y;<br />  y=x-y;<br />  x=x-y;<br /> }<br /> */<br /> public static void change(int[] num)<br /> {<br />  num[0]=num[0]+num[1];<br />  num[1]=num[0]-num[1];<br />  num[0]=num[0]-num[1];<br /> }<br /> public static void change(Point pt)<br /> {<br />  pt.x=pt.x+pt.y;<br />  pt.y=pt.x-pt.y;<br />  pt.x=pt.x-pt.y;<br /> }<br /> public static void main(String[] args)<br /> {<br />  /*<br />   int x=3;<br />   int y=4;<br />   change(3,4);<br />   System.out.println("x="+x+","+"y="+y);<br />   */<br />   int[] num=new int[]{3,4};<br />   change(num);<br />   System.out.println("x="+num[0]+","+"y="+num[1]);<br />   <br />   Point pt=new Point();<br />   pt.x=3;<br />   pt.y=4;<br />   change(pt);<br />   System.out.println("x="+pt.x+","+"y="+pt.y);  <br /> }<br />class Point<br />{<br /> int x,y; <br />}<br />再看看引用类型的内存变化å›?<br />以上说明了在Java中函数的调用:<br />a> 在Java中,传参æ—Óž¼Œéƒ½æ˜¯ä»¥ä¼ å€¼çš„æ–¹å¼˜q›è¡Œã€?br />b> 对于基本数据¾cÕdž‹åQŒä¼ é€’的是数据的拯‚´åQŒå¯¹äºŽå¼•用类型,传递的是引ç”?首地址)的拷贝ã€?br /><img src="http://tk.files.storage.msn.com/x1pIuxx1VYmtQswcHPAwKaQ-7C6SaJ0CDgh0i6Ffe25lVLAiy7Nci0TffWpKmDJpM6A-jnNv27Y7frfbCio6LLPC0XSGd8QgC9wURobXzsyHEL22atxDMfr9JmxzYvdXEw2B4ptqO-QF4I" /><img src ="http://www.aygfsteel.com/dorydoo/aggbug/55377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dorydoo/" target="_blank">多力宇扬</a> 2006-06-27 17:26 <a href="http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习½W”è®°-对象克隆http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55374.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:24:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55374.htmlhttp://www.aygfsteel.com/dorydoo/comments/55374.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55374.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55374.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55374.html^^^^^^^^^^^^^^^对象的克隆^^^^^^^^^^^^^
1> ä¸ÞZº†èŽ·å–å¯¹è±¡çš„ä¸€ä»½æ‹·è´ï¼Œæˆ‘ä»¬å¯ä»¥åˆ©ç”¨Object¾cȝš„clone()æ–ÒŽ³•ã€?br />2> 在派生类中覆盖基¾cȝš„clone()åQŒåƈ声明为publicã€?br />3> 在派生类的clone()æ–ÒŽ³•中,调用super.clone()ã€?br />4> 在派生类中实现Cloneable接口ã€?br />4> 没有抽象æ–ÒŽ³•的接口叫标识接口ã€?br />5> ä¸ÞZ»€ä¹ˆæˆ‘们在‹z„¡”Ÿ¾cÖM¸­è¦†ç›–Objectçš„clone()æ–ÒŽ³•æ—?一定要调用super.clone()å‘?在运行时åˆ?Object 的clone()æ–ÒŽ³•能识别出你要复制的是哪一个对象,然后为此对象分配½Iºé—´åQŒåƈ˜q›è¡Œå¯¹è±¡çš„复åˆÓž¼Œž®†åŽŸÂ å§‹å¯¹è±¡çš„å†…å®¹ä¸€ä¸€å¤åˆ¶åˆ°æ–°çš„å¯¹è±¡ç©ºé—´åŽ»ã€?br />
* ‹¹…克隆是针对没有引用¾cÕdž‹çš„变量来克隆。针对引用类型的克隆应该用Deeply Cloneã€?br />‹¹…å…‹éš?
Code:
class FleetClone
{
 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="feifei";
   s2.p.age=30;
   System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
 }
}
class Professor
{
 String name;
 int age;
 Professor(String name,int age)
 {
  this.name=name;
  this.age=age;
 }
}

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™å°±æ˜¯æ·±å…‹éš†.



多力宇扬 2006-06-27 17:24 发表评论
]]>
Java学习½W”è®°-数组http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55372.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:22:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55372.htmlhttp://www.aygfsteel.com/dorydoo/comments/55372.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55372.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55372.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55372.htmlJava数组的相å…Ïx“ä½?/p>

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;
 }
}



多力宇扬 2006-06-27 17:22 发表评论
]]>
Java学习½W”è®°-¾l§æ‰¿,多æ€?/title><link>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55370.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Tue, 27 Jun 2006 09:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55370.html</guid><wfw:comment>http://www.aygfsteel.com/dorydoo/comments/55370.html</wfw:comment><comments>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dorydoo/comments/commentRss/55370.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dorydoo/services/trackbacks/55370.html</trackback:ping><description><![CDATA[ <p>理解¾l§æ‰¿æ˜¯ç†è§£é¢å‘对象程序设计的关键.在Javaä¸?通过关键字extends¾l§æ‰¿ä¸€ä¸ªå·²æœ‰çš„¾c?被ç‘ô承的¾cȝ§°ä¸ºçˆ¶¾c?­‘…ç±»åQŒåŸº¾c?,æ–°çš„¾cȝ§°ä¸ºå­¾c?‹z„¡”Ÿ¾c?.在Java中不允许多ç‘ôæ‰?code:<br />class Animal<br />{<br /> int height,weight;<br /> void eat()<br /> {<br />  System.out.println("Animal eat!");<br /> }<br /> void sleep()<br /> {<br />  System.out.println("Animal sleep!");<br /> }<br /> void breathe()<br /> {<br />  System.out.println("Animal breathe!");<br /> }<br />}<br />class Fish extends Animal<br />{<br /> <br />}<br />class DoMain<br />{<br /> public static void main(String[] args)<br /> {<br />  Animal an=new Animal();<br />  Fish fn=new Fish();<br />  <br />  an.breathe();<br />  fn.breathe();<br />  fn.height=30;<br />  fn.weight=20;<br /> }<br />}<br />Result:<br />F:\Java Develop>javac Animal.java</p> <p>F:\Java Develop>java DoMain<br />Animal breathe!<br />Animal breathe!<br />(˜q™è¯´æ˜Žæ´¾ç”Ÿç±»¾l§æ‰¿äº†çˆ¶¾cÈš„æ‰€æœ‰æ–¹æ³•和成员变量.)</p> <p>æ–ÒŽ³•的覆ç›?override)<br />在子¾cÖM¸­å®šä¹‰ä¸€ä¸ªä¸Žçˆ¶ç±»åŒå,˜q”回¾cÕdž‹,参数¾cÕdž‹å‡ç›¸åŒçš„一个方æ³?¿UîCØ“æ–ÒŽ³•的覆ç›?æ–ÒŽ³•的覆盖发生在子类与父¾cÖM¹‹é—?<br />code:<br />class Animal<br />{<br /> int height,weight;<br /> void eat()<br /> {<br />  System.out.println("Animal eat!");<br /> }<br /> void sleep()<br /> {<br />  System.out.println("Animal sleep!");<br /> }<br /> void breathe()<br /> {<br />  System.out.println("Animal breathe!");<br /> }<br />}<br />class Fish extends Animal<br />{<br /> int weight,height;   //隐藏了父¾cȝš„weight,height;<br /> void breathe()  //override method breathe()<br /> {<br />  super.breathe();  //用super调用父类的构造方æ³?br />  System.out.println("Fish bubble");<br /> }<br />}<br />class DoMain<br />{<br /> public static void main(String[] args)<br /> {<br /> // Animal an=new Animal();<br />  Fish fn=new Fish();<br />  <br />  an.breathe();<br />  fn.breathe();<br />  fn.height=30;<br />  fn.weight=20;<br /> }<br />}<br />输出¾l“æžœ:<br />F:\Java Develop>javac Animal.java</p> <p>F:\Java Develop>java DoMain<br />Animal breathe!<br />Fish bubble</p> <p>ç‰ÒŽ®Šå˜é‡super<br />* 使用ç‰ÒŽ®Šå˜é‡super提供对父¾cȝš„讉K—®<br />* 可以使用super讉K—®çˆ¶ç±»è¢«å­¾c»éšè—çš„变量或覆盖的æ–ÒŽ³•<br />* 每个子类构造方法的½W¬ä¸€æ¡è¯­å¥éƒ½æ˜¯éšå«çš„调用super,如果父类没有˜q™ç§å½¢å¼çš„æž„造函数就会报é”?<br />code:<br />class Animal<br />{<br /> int height,weight;<br /> Animal()<br /> {<br />  System.out.println("Animal construct");<br /> }<br /> void eat()<br /> {<br />  System.out.println("Animal eat!");<br /> }<br /> void sleep()<br /> {<br />  System.out.println("Animal sleep!");<br /> }<br /> void breathe()<br /> {<br />  System.out.println("Animal breathe!");<br /> }<br />}</p> <p>class Fish extends Animal<br />{<br /> Fish()<br /> {<br />  System.out.println("Fish construct");<br /> }<br /> void breathe()  //override method breathe()<br /> {<br />  System.out.println("Fish bubble");<br /> }<br />}<br />class DoMain<br />{<br /> public static void main(String[] args)<br /> {<br />  //Animal an=new Animal();<br />  Fish fn=new Fish();<br />  <br />  //an.breathe();<br />  //fn.breathe();<br />  //fn.height=30;<br />  //fn.weight=20;<br /> }<br />}<br />输出¾l“æžœ:<br />F:\Java Develop>javac Animal.java</p> <p>F:\Java Develop>java DoMain<br />Animal construct<br />Fish construct<br /><br /><br /><br /> 通过覆盖父类的方法来实现,在运行时æ ÒŽ®ä¼ é€’对象的引用,来调用相应的æ–ÒŽ³•.<br />code:<br />class Animal<br />{<br /> int height,weight;<br /> Animal()<br /> {<br />  System.out.println("Animal construct");<br /> }<br /> void eat()<br /> {<br />  System.out.println("Animal eat!");<br /> }<br /> void sleep()<br /> {<br />  System.out.println("Animal sleep!");<br /> }<br /> void breathe()<br /> {<br />  System.out.println("Animal breathe!");<br /> }<br />}</p> <p>class Fish extends Animal<br />{<br /> Fish()<br /> {<br />  System.out.println("Fish construct");<br /> }<br /> void breathe()  //override method breathe()<br /> {<br />  System.out.println("Fish bubble");<br /> }<br />}<br />class DoMain<br />{<br /> static void fn(Animal an)<br /> {<br />  an.breathe();<br /> }<br /> public static void main(String[] args)<br /> {<br />  //Animal an=new Animal();<br />  Fish fh=new Fish();<br />  Animal an;<br />  an=fh;<br />  DoMain.fn(an);<br /> }<br />}</p> <img src ="http://www.aygfsteel.com/dorydoo/aggbug/55370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dorydoo/" target="_blank">多力宇扬</a> 2006-06-27 17:20 <a href="http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习½W”è®°-¾cȝš„定义http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55369.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:19:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55369.htmlhttp://www.aygfsteel.com/dorydoo/comments/55369.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55369.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55369.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55369.html    OOP(Object Oriented Programming)æè¿°çš„æ˜¯å¯¹è±¡ä¸Žå¯¹è±¡ä¹‹é—´çš„ç›æ€º’作用.听老师ž®†é¢å‘过½E‹ä¸Žé¢å‘对象的最大区别是: ˜q‡ç¨‹åŒ–程序设计先¼‹®å®š½Ž—法,再确定数据结æž?再确定运½Ž?面向˜q‡ç¨‹¾~–程,习惯于先建立数据¾l“构存放数据òq¶å®šä¹‰æ–¹æ³?函数)来操作数æ?而面向对象的则是构徏一个模åž?ž®†æ•°æ®ä¸Žæ–ÒŽ³•¾l„织在一èµ?
    我们可以把现实世界的事物抽象为对è±?对象一般都有两个特å¾?状æ€?Status),è¡ŒäØ“(Behavior).软äšg的对象概忉|˜¯ç”±æ˜¾½CÞZ¸–界对象抽象而来.把现实世界的状态保存èÊY件对象的变量ä¸?现实世界对象的行为通过软äšg对象的方æ³?函数)来实çŽ?
    我们把相似的对象划分成一个类.在èÊY件中¾cÕd°±æ˜¯ä¸€ä¸ªæ¨¡æ?它定义了通用于一个特定种¾cÈš„æ‰€æœ‰å¯¹è±¡çš„状æ€?变量)和行ä¸?æ–ÒŽ³•).¾cÀL˜¯åˆ›å¾å¯¹è±¡çš„æ¨¡æ?对象是类的实ä¾?
    面向对象¾~–程的难点在于思èµ\çš„è{å?我们通常习惯与考虑解决问题的方法,而不是抽象成对象再去解决å®?
 ¾cÈš„æž„造方æ³?br />* 构造方法的名字和类名相å?òq¶ä¸”没有˜q”回å€?
* 构造方法主要用于定义类的初始化状�
* 我们不能直接调用构造方�必须通过new关键字来自动调用,从而创建类的实�
* Java的类都要求有构造方æ³?如果没有定义构造方æ³?Java¾~–译器会提供一个缺省的构造方æ³?也就是不参数的构造方æ³?
æ–ÒŽ³•的重è½?overload)
 重蝲构成的条ä»?æ–ÒŽ³•的名¿U°ç›¸å?但参数类型或参数个数不同,才能构成æ–ÒŽ³•的重è½?
code:
class Point
{
 int x,y;
 /*
  *带参数的构造方法和不带参数的构造方法就构成了方�函数)的重�br /> */
 Point(int a,int b)
 {
  x=a;
  y=b;
 }
 Point()
 {
 
 }
 void output()
 {
  System.out.println(x);
  System.out.println(y);
 }
 public static void main(String[] args)
 {
  //调用不带参数的构造方�br />  //Point p=new Point();
  //pt.x=10;
  //pt.y=20;
  //p.output();
  Point p1=new Point(3,3); //调用带参数的构造方�br />  p1.output();
 }
}
ç‰ÒŽ®Šå˜é‡this
* this变量代表对象本èín
* 当类中有两个同名变量,一个属于类(¾cÈš„æˆå‘˜å˜é‡),一个属于某个特定的æ–ÒŽ³•(æ–ÒŽ³•中的局部变é‡?,使用this区分成员变量和局部变é‡?
* 使用this½Ž€åŒ–构造函数的调用
code:
class Point
{
 int x,y;
 /*
  *带参数的构造方法和不带参数的构造方法就构成了方�函数)的重�br /> */
 Point(int a,int b)
 {
  x=a;
  y=b;
 }
 Point()
 {
  this(1,1);
 }
 void output()
 {
  System.out.println(x);
  System.out.println(y);
 }
 /*output()æ–ÒŽ³•定义的åŞ参与成员变量同名了,
 *那么在output()里就看不到成员变量的x,y了,它被隐藏�
 */
 void output(int x, int y)
 {
  this.x=x;
  this.y=y;
 }
 public static void main(String[] args)
 {
  Point pt=new Point(3,3);
  pt.output(5,5);
  pt.output();
 }
}
一个类所有的实例(对象)调用的成员方法在内存中只有一份拷è´?ž®½ç®¡åœ¨å†…存中可能有多个对è±?而数据成员在内的没个对象中都存在着一份拷è´?thiså˜é‡å…è®¸ç›¸åŒçš„å®žä¾‹æ–¹æ³•äØ“ä¸åŒçš„å¯¹è±¡å·¥ä½?每当调用一个实例方法时,this变量被设¾|®æˆå¼•用该实例方法的特定的类的对è±?æ–ÒŽ³•的代码接着会与this所代表的对象的特定数据建立兌™”.

多力宇扬 2006-06-27 17:19 发表评论
]]>
JAVA½E‹åºå‘˜é¢è¯?2é—?/title><link>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55368.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Tue, 27 Jun 2006 09:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55368.html</guid><wfw:comment>http://www.aygfsteel.com/dorydoo/comments/55368.html</wfw:comment><comments>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55368.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dorydoo/comments/commentRss/55368.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dorydoo/services/trackbacks/55368.html</trackback:ping><description><![CDATA[ <p>JAVA ½E‹åºå‘˜é¢è¯?32 é—?</p> <p>½W¬ä¸€åQŒè°ˆè°?final åQ?finally åQ?finalize 的区别? <br /><br />Final åQšä¿®é¥°ç¬¦åQˆå…³é”®å­—åQ‰å¦‚æžœä¸€ä¸ªç±»è¢«å£°æ˜ŽäØ“ final åQŒæ„å‘³ç€å®ƒä¸èƒ½å†‹z„¡”Ÿå‡ºæ–°çš„子¾c?ä¸èƒ½ä½œäØ“çˆ¶ç±»è¢«ç‘ôæ‰Ñ€‚因此一个类不能既被声明ä¸?abstract 的,又被声明ä¸?final 的。将å?量或æ–ÒŽ³•声明ä¸?final åQŒå¯ä»¥ä¿è¯å®ƒä»¬åœ¨ä½¿ç”¨ä¸­ä¸è¢«æ”¹å˜ã€‚被声明ä¸?final 的变量必™åÕdœ¨å£?明时¾l™å®šåˆå€û|¼Œè€Œåœ¨ä»¥åŽçš„引用中只能è¯Õd–åQŒä¸å¯ä¿®æ”V€‚被声明ä¸?final 的方法也同样只能 使用åQŒä¸èƒ½é‡è½?finally åQŸå†å¼‚常处理时提ä¾?finally{} 块来执行ä»ÖM½•清除操作。如果抛å‡ÞZ¸€ä¸ªå¼‚常,那么 相匹配的 catch 子句ž®×ƒ¼šæ‰§è¡ŒåQŒç„¶åŽæŽ§åˆ¶å°±ä¼šè¿›å…?finally 块(如果有的话)ã€?finalize åQšæ–¹æ³•åã€?Java æŠ€æœ¯å…è®æ€‹Éç”?finalize åQˆï¼‰æ–ÒŽ³•在垃圾收集器ž®†å¯¹è±¡ä»Žå†…å­˜ä¸?<br />清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用æ—?对这个对象调用的。它是在 Object ¾cÖM¸­å®šä¹‰çš„,因此所有的¾c»éƒ½¾l§æ‰¿äº†å®ƒã€‚子¾c»è¦†ç›?fi nalize åQˆï¼‰æ–ÒŽ³•以整理系¾lŸèµ„源或者执行其他清理工作ã€?finalize åQˆï¼‰ æ–ÒŽ³•是在垃圾攉™›† 器删除对象之前对˜q™ä¸ªå¯¹è±¡è°ƒç”¨çš„ã€?br /> </p> <p>½W¬äºŒåQ?Anonymous Inner Class åQˆåŒ¿åå†…部类åQ?是否可以 extends åQˆç‘ô承)其它¾c»ï¼Œæ˜¯å¦ 可以 implements åQˆå®žçŽŽÍ¼‰ interface åQˆæŽ¥å£ï¼‰åQ?<br /><br />匿名的内部类是没有名字的内部¾c…R€‚不èƒ?extends åQˆç‘ô承) 其它¾c»ï¼Œä½†ä¸€ä¸ªå†…部类可以ä½?ä¸ÞZ¸€ä¸ªæŽ¥å£ï¼Œç”±å¦ä¸€ä¸ªå†…部类实现ã€?</p> <p>½W¬ä¸‰åQ?Static Nested Class å’?Inner Class 的不同,说得­‘Šå¤š­‘Šå¥½åQˆé¢è¯•题有的很笼¾lŸï¼‰åQ?br /> <br />Nested Class åQˆä¸€èˆ¬æ˜¯ C++ 的说法)åQ?Inner Class åQˆä¸€èˆ¬æ˜¯ JAVA 的说法)ã€?Java 内部¾c?<br />ä¸?C++ 嵌套¾cÀLœ€å¤§çš„不同ž®±åœ¨äºŽæ˜¯å¦æœ‰æŒ‡å‘外部的引用上ã€?<br />具体可见 http åQ?//www.frontfree.net/articles/services/view.asp ?id=704&page=1  æ³?静态内部类åQ?Inner Class åQ‰æ„å‘³ç€ 1 创徏一ä¸?static 内部¾cȝš„对象åQŒä¸éœ€è¦ä¸€ä¸ªå¤–部类对象,2 不能从一ä¸?static 内部¾cȝš„一个对象访问一个外部类对象ã€?</p> <p>½W¬å››åQ?& å’?&& 的区别?<br /> <br />& 是位˜qç®—½W¦ã€?&& 是布ž®”逻辑˜qç®—½W¦ã€?</p> <p>½W¬äº”åQ?HashMap å’?Hashtable 的区别?<br /> <br />都属äº?Map 接口的类åQŒå®žçŽîCº†ž®†æƒŸä¸€é”®æ˜ ž®„到特定的å€ég¸Šã€?HashMap ¾cÀL²¡æœ‰åˆ†¾cÀLˆ–者排序。它允许一ä¸?null 键和多个 null 倹{€?Hashtable ¾cÖM¼¼äº?HashMap åQŒä½†æ˜¯ä¸å…è®¸ null 键和 null 倹{€‚它也比 HashMap æ…¢ï¼Œå› äØ“ 它是同步的ã€?</p> <p>½W¬å…­åQ?Collection å’?Collections 的区别? <br /><br />Collections 是个 java.util 下的¾c»ï¼Œå®ƒåŒ…含有各种有关集合操作的静态方æ³?Collection 是个 java.util 下的接口åQŒå®ƒæ˜¯å„¿Ué›†åˆç»“构的父接口ã€?</p> <p>½W¬ä¸ƒåQŒä»€ä¹ˆæ—¶å€™ç”¨ assert åQ?<br /><br />断言是一个包含布ž®”表辑ּçš„语句,在执行这个语句时假定该表辑ּä¸?true 。如果表辑ּ 计算为false åQŒé‚£ä¹ˆç³»¾lŸä¼šæŠ¥å‘Šä¸€ä¸?AssertionError 。它用于调试目的:assert(a > 0); // throws an AssertionError if a <= 0 åQ?断言可以有两¿UåŞ式: <br />assert Expression1 ; <br />assert Expression1 : Expression2 ; <br />Expression1 应该æ€ÀL˜¯äº§ç”Ÿä¸€ä¸ªå¸ƒž®”倹{€?<br />Expression2 可以是得å‡ÞZ¸€ä¸ªå€¼çš„ä»ÀL„è¡¨è¾¾å¼ã€‚这个值用于生成显½Cºæ›´å¤šè°ƒè¯•信息的 Str ing 消息.断言在默认情况下是禁用的。要在编译时启用断言åQŒéœ€è¦ä‹Éç”?source 1.4 标记åQ?<br />javac -source 1.4 Test.java <br />要在˜qè¡Œæ—¶å¯ç”¨æ–­­a€åQŒå¯ä½¿ç”¨ -enableassertions 或è€?-ea 标记ã€?<br />要在˜qè¡Œæ—‰™€‰æ‹©¼›ç”¨æ–­è¨€åQŒå¯ä½¿ç”¨ -da 或è€?-disableassertions 标记ã€?<br />要系¾lŸç±»ä¸­å¯ç”¨æ–­­a€åQŒå¯ä½¿ç”¨ -esa 或è€?-dsa 标记。还可以在包的基¼‹€ä¸Šå¯ç”¨æˆ–者禁ç”?断言.可以在预计正常情况下不会到达的ä“Q何位¾|®ä¸Šæ”„¡½®æ–­è¨€ã€‚æ–­­a€å¯ä»¥ç”¨äºŽéªŒè¯ä¼ é€’ç»™¿Uæœ‰æ–ÒŽ³•的参数。不˜q‡ï¼Œæ–­è¨€ä¸åº”该用于验证传递给公有æ–ÒŽ³•的参敎ͼŒå› äؓ不管是否启用了断­a€ åQŒå…¬æœ‰æ–¹æ³•都必须‹‚€æŸ¥å…¶å‚数。不˜q‡ï¼Œæ—¢å¯ä»¥åœ¨å…¬æœ‰æ–ÒŽ³•中,也可以在非公有方法中利用 断言‹¹‹è¯•后置条äšg。另外,断言不应该以ä»ÖM½•方式改变½E‹åºçš„状态ã€?</p> <p>½W¬å…«åQ?GC 是什ä¹?? ä¸ÞZ»€ä¹ˆè¦æœ?GC? ( 基础 ) åQ?<br /><br />GC 是垃圾收集器ã€?Java ½E‹åºå‘˜ä¸ç”¨æ‹…å¿ƒå†…å­˜ç®¡ç†ï¼Œå› äØ“åžƒåœ¾æ”‰™›†å™¨ä¼šè‡ªåЍ˜q›è¡Œ½Ž¡ç†ã€‚要è¯äh±‚垃圾攉™›†åQŒå¯ä»¥è°ƒç”¨ä¸‹é¢çš„æ–ÒŽ³•之一åQ?br />System.gc() <br /> Runtime.getRuntime().gc() </p> <p>½W¬ä¹åQ?String s = new String("xyz"); 创徏了几ä¸?String Object? <br />两个对象åQŒä¸€ä¸ªæ˜¯ “xyxâ€? 一个是指向 “xyxâ€?的引用对è±?s ã€?<br /></p> <p>½W¬ååQ?Math.round(11.5) ½{‰æ–¼å¤šå°‘ ? Math.round(-11.5) ½{‰æ–¼å¤šå°‘ ? <br />Math.round(11.5) ˜q”回åQ?long åQ?12 åQ?Math.round(-11.5) ˜q”回åQ?long åQ?-11; <br /></p> <p>½W¬åä¸€åQ?short s1 = 1; s1 = s1 + 1; 有什么错 ? short s1 = 1; s1 += 1; 有什么错 ? </p> <p>short s1 = 1; s1 = s1 + 1; 有错åQ?s1 æ˜?short 型, s1+1 æ˜?int åž?, 不能昑ּè½¬åŒ–ä¸?short åž?å¯ä¿®æ”¹äØ“ <br />s1 =(short)(s1 + 1) ã€?short s1 = 1; s1 += 1 正确ã€?</p> <p>½W¬åäºŒï¼Œ sleep() å’?wait() 有什么区åˆ?? <br />搞线½E‹çš„æœ€çˆ?sleep() æ–ÒŽ³•是ä‹É¾U¿ç¨‹åœæ­¢ä¸€ŒD‰|—¶é—´çš„æ–ÒŽ³•。在 sleep æ—‰™—´é—´éš”æœŸæ»¡åŽï¼Œ¾U¿ç¨‹ä¸ä¸€å®šç«‹åÏx¢å¤æ‰§è¡Œã€‚这是因为在那个时刻åQŒå…¶å®ƒçº¿½E‹å¯èƒ½æ­£åœ¨è¿è¡Œè€Œä¸”æ²¡æœ‰è¢«è°ƒåº¦äØ“æ”‘Ö¼ƒæ‰§è¡ŒåQŒé™¤é?(a)â€?醒来 â€?的线½E‹å…·æœ‰æ›´é«˜çš„优先¾U§ï¼Œ (b) 正在˜qè¡Œçš„线½E‹å› ä¸ºå…¶å®ƒåŽŸå›?而阻塞。wait() 是线½E‹äº¤äº’æ—¶åQŒå¦‚果线½E‹å¯¹ä¸€ä¸ªåŒæ­¥å¯¹è±?x 发出一ä¸?wait() 调用åQŒè¯¥¾U¿ç¨‹ä¼šæš‚停执行,被调对象˜q›å…¥½{‰å¾…状态,直到被唤醒或½{‰å¾…æ—‰™—´åˆ°ã€?</p> <p>½W¬åä¸‰ï¼Œ Java 有没æœ?goto? <br />Goto?java 中的保留字,现在没有åœ?java 中ä‹É用ã€?</p> <p>½W¬åå››ï¼Œæ•°ç»„有没æœ?length() ˜q™ä¸ªæ–ÒŽ³• ? String 有没æœ?length() ˜q™ä¸ªæ–ÒŽ³•åQ?<br />数组没有 length() ˜q™ä¸ªæ–ÒŽ³•åQŒæœ‰ length 的属性ã€?<br />String 有有 length() ˜q™ä¸ªæ–ÒŽ³•ã€?</p> <p>½W¬åäº”, Overload å’?Override 的区别ã€?Overloaded 的方法是否可以改变返回值的¾cÕdž‹ ? </p> <p>æ–ÒŽ³•的重å†?Overriding 和重è½?Overloading æ˜?Java 多态性的不同表现。重å†?Overriding 是父¾cÖM¸Žå­ç±»ä¹‹é—´å¤šæ€æ€§çš„一¿Uè¡¨çŽŽÍ¼Œé‡è² Overloading 是一个类中多态性的一¿Uè¡¨çŽ°ã€‚å¦‚æžœåœ¨ 子类中定义某æ–ÒŽ³•与其父类有相同的名称和参敎ͼŒæˆ‘们说该æ–ÒŽ³•被重å†?(Overriding) 。子¾cȝš„对象使用˜q™ä¸ªæ–ÒŽ³•æ—Óž¼Œž®†è°ƒç”¨å­¾cÖM¸­çš„定义,对它而言åQŒçˆ¶¾cÖM¸­çš„定义如同被 â€?屏蔽â€?了。如果在一个类中定义了多个同名的方法,它们或有不同的参æ•îC¸ªæ•°æˆ–有不同的参数 ¾cÕdž‹åQŒåˆ™¿UîCØ“æ–ÒŽ³•的重è½?(Overloading) ã€?Overloaded 的方法是可以改变˜q”回值的¾cÕdž‹ã€?</p> <p> <br />½W¬åå…­ï¼Œ Set 里的元素是不能重复的åQŒé‚£ä¹ˆç”¨ä»€ä¹ˆæ–¹æ³•来区分重复与否å‘?? 是用 == ˜q˜æ˜¯ equ <br />als()? 它们有何区别 ? <br />Set 里的元素是不能重复的åQŒé‚£ä¹ˆç”¨ iterator() æ–ÒŽ³•来区分重复与否ã€?equals() 是判è¯ÖM¸¤ä¸ªSet 是否相等ã€?<br />equals() å’?== æ–ÒŽ³•军_®šå¼•用值是否指向同一对象 equals() 在类中被覆盖åQŒäؓ的是当两个分¼›Èš„对象的内容和¾cÕdž‹ç›”R…çš„话åQŒè¿”回真倹{€?</p> <p>½W¬åä¸ƒï¼Œ¾l™æˆ‘一个你最常见到的 runtime exception åQ?<br />ArithmeticException, ArrayStoreException, BufferOverflowException, <br />BufferUnderflowException, CannotRedoException, <br />CannotUndoException, ClassCastException, CMMException, <br />ConcurrentModificationException, <br />DOMException, EmptyStackException, IllegalArgumentException, <br />IllegalMonitorStateException, <br />IllegalPathStateException, IllegalStateException, <br />ImagingOpException, <br />IndexOutOfBoundsException, MissingResourceException, <br />NegativeArraySizeException, NoSuchElementException, <br />NullPointerException, ProfileDataException, ProviderException, <br />RasterFormatException, SecurityException, SystemException, <br />UndeclaredThrowableException, <br />UnmodifiableSetException, UnsupportedOperationException </p> <p>½W¬åå…«ï¼Œ error å’?exception 有什么区åˆ?? <br />error 表示恢复不是不可能但很困隄¡š„情况下的一¿Uä¸¥é‡é—®é¢˜ã€‚比如说内存溢出。不可能指望½E‹åºèƒ½å¤„理这æ ïLš„æƒ…况exception 表示一¿Uè®¾è®¡æˆ–实现问题。也ž®±æ˜¯è¯?它表½Cºå¦‚果程序运行正å¸?从不会发生的情况. </p> <p>½W¬åä¹ï¼Œ List, Set, Map 是否¾l§æ‰¿è‡?Collection 接口 ? <br />List åQ?Set æ˜?Map 不是 </p> <p>½W¬äºŒåï¼Œ abstract class å’?interface 有什么区åˆ?? </p> <p>声明æ–ÒŽ³•的存在而不åŽÕd®žçŽ°å®ƒçš„ç±»è¢«å«åšæŠ½è±¡ç±»åQ?abstract class åQ‰ï¼Œå®ƒç”¨äºŽè¦åˆ›å¾ä¸€ä¸ªä½“现某些基本行为的¾c»ï¼Œòq¶äؓ该类声明æ–ÒŽ³•åQŒä½†ä¸èƒ½åœ¨è¯¥¾cÖM¸­å®žçŽ°è¯¥ç±»çš„æƒ…å†üc€‚不能创建abstract ¾cȝš„实例。然而可以创å»ÞZ¸€ä¸ªå˜é‡ï¼Œå…¶ç±»åž‹æ˜¯ä¸€ä¸ªæŠ½è±¡ç±»åQŒåƈ让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法ã€?Abstract ¾cȝš„子类为它们父¾cÖM¸­çš„æ‰€ 有抽象方法提供实玎ͼŒå¦åˆ™å®ƒä»¬ä¹Ÿæ˜¯æŠ½è±¡¾cÖMؓ。取而代之,在子¾cÖM¸­å®žçŽ°è¯¥æ–¹æ³•ã€‚çŸ¥é“å…¶ è¡ŒäØ“çš„å…¶å®ƒç±»å¯ä»¥åœ¨ç±»ä¸­å®žçŽ°è¿™äº›æ–¹æ³•ã€?br />接口åQ?interface åQ‰æ˜¯æŠ½è±¡¾cȝš„变体。在接口中,所有方法都是抽象的。多¾l§æ‰¿æ€§å¯é€šè¿‡å®?现这æ ïLš„æŽ¥å£è€ŒèŽ·å¾—ã€‚æŽ¥å£ä¸­çš„æ‰€æœ‰æ–¹æ³•éƒ½æ˜¯æŠ½è±¡çš„åQŒæ²¡æœ‰ä¸€ä¸ªæœ‰½E‹åºä½“。接口只可以å®?ä¹?static final 成员变量。接口的实现与子¾cȝ›¸ä¼û|¼Œé™¤äº†è¯¥å®žçŽ°ç±»ä¸èƒ½ä»ŽæŽ¥å£å®šä¹‰ä¸­¾l§æ‰¿ è¡ŒäØ“ã€‚å½“¾cÕd®žçŽ°ç‰¹ŒDŠæŽ¥å£æ—¶åQŒå®ƒå®šä¹‰åQˆå³ž®†ç¨‹åºä½“¾l™äºˆåQ‰æ‰€æœ‰è¿™¿UæŽ¥å£çš„æ–ÒŽ³•。然后,它可以在实现了该接口的类的ä“Q何对象上调用接口的方法。由于有抽象¾c»ï¼Œå®ƒå…è®æ€‹Éç”¨æŽ¥å£åä½œäØ“å¼•ç”¨å˜é‡çš„ç±»åž‹ã€‚é€šå¸¸çš„åŠ¨æ€è”¾~–将生效。引用可以è{换到接口¾cÕdž‹æˆ–从接口¾cÕdž‹è½¬æ¢åQ?instanceof ˜qç®—½W¦å¯ä»¥ç”¨æ¥å†³å®šæŸå¯¹è±¡çš„类是否实现了接口ã€?</p> <p>½W¬äºŒåä¸€åQ?abstract çš?method 是否可同时是 static, 是否可同时是 native åQŒæ˜¯å¦å¯åŒæ—¶æ˜?s <br />ynchronized? <br />都不èƒ?</p> <p>½W¬äºŒåäºŒ,接口是否可ç‘ô承接å?抽象¾cÀL˜¯å¦å¯å®žçް (implements) 接口?抽象¾cÀL˜¯å¦å¯¾l§æ‰¿å®žä½“¾c?(concrete class)? <br /><br />接口可以¾l§æ‰¿æŽ¥å£ã€‚抽象类可以实现 (implements) 接口åQŒæŠ½è±¡ç±»æ˜¯å¦å¯ç‘ô承实体类åQŒä½†å‰ææ˜¯å®žä½“类必须有明¼‹®çš„æž„造函数ã€?</p> <p>½W¬äºŒåä¸‰åQŒå¯åŠ¨ä¸€ä¸ªçº¿½E‹æ˜¯ç”?run() ˜q˜æ˜¯ start()? <br />启动一个线½E‹æ˜¯è°ƒç”¨ start() æ–ÒŽ³•åQŒä‹É¾U¿ç¨‹æ‰€ä»£è¡¨çš„虚拟处理机处于可运行状态,˜q™æ„å‘³ç€å®ƒå¯ä»¥ç”± JVM 调度òq¶æ‰§è¡Œã€‚è¿™òq¶ä¸æ„å‘³ç€¾U¿ç¨‹ž®×ƒ¼šç«‹å³˜qè¡Œã€?run() æ–ÒŽ³•可以产生必须退å‡?的标志来停止一个线½E‹ã€?</p> <p> <br />½W¬äºŒåå››åQŒæž„造器 Constructor 是否可被 override? <br />构造器 Constructor 不能被ç‘ô承,因此不能重写 Overriding åQŒä½†å¯ä»¥è¢«é‡è½?Overloading ã€?</p> <p> <br />½W¬äºŒåäº”åQŒæ˜¯å¦å¯ä»¥ç‘ôæ‰?String ¾c?? <br />String ¾cÀL˜¯ final ¾cÀL•…不可以ç‘ôæ‰Ñ€?</p> <p>½W¬äºŒåå…­åQŒå½“一个线½E‹è¿›å…¥ä¸€ä¸ªå¯¹è±¡çš„一个synchronized æ–ÒŽ³•å?其它¾U¿ç¨‹æ˜¯å¦å¯è¿›å…¥æ­¤å¯¹è±¡çš„其它方æ³?<br />不能åQŒä¸€ä¸ªå¯¹è±¡çš„一ä¸?synchronized æ–ÒŽ³•只能ç”׃¸€ä¸ªçº¿½E‹è®¿é—®ã€?</p> <p>½W¬äºŒåä¸ƒåQŒtry {} 里有一ä¸?return 语句åQŒé‚£ä¹ˆç´§è·Ÿåœ¨˜q™ä¸ª try 后的 finally {} 里的 code 会不会被执行,什么时候被执行åQŒåœ¨ return 前还是后 ? <br />会执行,åœ?return 前执行ã€?</p> <p>½W¬äºŒåå…«åQŒç¼–½E‹é¢˜ : 用最有效率的æ–ÒŽ³•½Ž—出 2 乘以 8 ½{‰æ–¼å‡?? <br />æœ?C 背景的程序员特别喜欢问这¿Ué—®é¢˜ã€?<br />2 << 3 </p> <p>½W¬äºŒåä¹åQŒä¸¤ä¸ªå¯¹è±¡å€¼ç›¸å?(x.equals(y) == true) åQŒä½†å´å¯æœ‰ä¸åŒçš„ hash code åQŒè¿™å¥è¯ <br />对不å¯?? <br />不对åQŒæœ‰ç›¸åŒçš?hash code ã€?</p> <p>½W¬ä¸‰åï¼Œå½“一个对象被当作参数传递到一个方法后åQŒæ­¤æ–ÒŽ³•可改变这个对象的属性,òq¶å¯˜q”回变化后的¾l“æžœåQŒé‚£ä¹ˆè¿™é‡Œåˆ°åº•是å€ég¼ é€’还是引用传é€?? 是å€ég¼ é€’ã€?Java ¾~–程语言只由å€ég¼ é€’参数。当一个对象实例作ä¸ÞZ¸€ä¸ªå‚数被传递到æ–ÒŽ³•中时åQŒå‚数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变åQŒä½†å¯¹è±¡çš„引用是永远不会改变的ã€?</p> <p>½W¬ä¸‰åä¸€åQ?swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String ä¸?? </p> <p>switch åQ?expr1 åQ‰ä¸­åQ?expr1 是一个整数表辑ּã€‚因此传递给 switch å’?case 语句的参数应该是 int ã€?short ã€?char 或è€?byte ã€?long,string 都不能作用于 swtich ã€?</p> <p>½W¬ä¸‰åäºŒåQŒç¼–½E‹é¢˜ : 写一ä¸?Singleton 出来åQ?<br />Singleton 模式主要作用是保证在 Java 应用½E‹åºä¸­ï¼Œä¸€ä¸ªç±» Class 只有一个实例存在ã€?</p> <p>一èˆ?Singleton 模式通常有几¿Uç§å½¢å¼ : <br />½W¬ä¸€¿UåÅžå¼?: 定义一个类åQŒå®ƒçš„æž„造函æ•îCØ“ private 的,它有一ä¸?static çš?private 的该¾cÕd˜é‡ï¼Œåœ¨ç±»åˆå§‹åŒ–时实例话,通过一ä¸?public çš?getInstance æ–ÒŽ³•获取对它的引ç”?, ¾l§è€Œè°ƒç”¨å…¶ä¸­çš„æ–ÒŽ³•ã€?<br />public class Singleton { <br />private Singleton(){} <br />// 在自己内部定义自å·×ƒ¸€ä¸ªå®žä¾‹ï¼Œæ˜¯ä¸æ˜¯å¾ˆå¥‡æ€ªï¼Ÿ <br />// 注意˜q™æ˜¯ private 只供内部调用 <br />private static Singleton instance = new Singleton(); <br />// ˜q™é‡Œæä¾›äº†ä¸€ä¸ªä¾›å¤–部讉K—®æœ?class 的静态方法,可以直接讉K—® <br />public static Singleton getInstance() { <br />   return instance;    <br />} <br />} </p> <p>½W¬äºŒ¿UåÅžå¼?: </p> <p>public class Singleton { <br />private static Singleton instance = null; <br />public static synchronized Singleton getInstance() { <br />// ˜q™ä¸ªæ–ÒŽ³•比上面有所改进åQŒä¸ç”¨æ¯‹Æ¡éƒ½˜q›è¡Œç”Ÿæˆå¯¹è±¡åQŒåªæ˜¯ç¬¬ä¸€‹Æ¡ã€€ã€€ã€€   <br />// 使用时生成实例,提高了效率! <br />if (instance==null) <br />   instance åQ?new Singleton(); <br />return instance;    } <br />} </p> <p>其他形式 : <br />定义一个类åQŒå®ƒçš„æž„造函æ•îCØ“ private çš„ï¼Œæ‰€æœ‰æ–¹æ³•äØ“ static çš„ã€?<br />一般认为第一¿UåŞ式要更加安全äº?</p> <p>½W¬ä¸‰åä¸‰ Hashtable å’?HashMap åQ?<br />Hashtable ¾l§æ‰¿è‡?Dictionary ¾c»ï¼Œè€?HashMap æ˜?Java1.2 引进çš?Map interface 的一个实çŽ?</p> <p>HashMap 允许ž®?null ä½œäØ“ä¸€ä¸?entry çš?key 或è€?value åQŒè€?Hashtable 不允许还有就是, HashMap æŠ?Hashtable çš?contains æ–ÒŽ³•åŽÀLމäº?æ”ÒŽˆ containsvalue å’?containsKey.因䨓contains æ–ÒŽ³•å®ÒŽ˜“让äh引è“v误解ã€?</p> <p>最大的不同æ˜?Hashtable 的方法是Synchronize çš?而HashMap 不是åQŒåœ¨å¤šä¸ª¾U¿ç¨‹è®‰K—® Hashtable æ—Óž¼Œä¸éœ€è¦è‡ªå·×ƒØ“它的æ–ÒŽ³•实现同步åQŒè€?HashMap ž®±å¿…™åÖMؓ之提供外同步.Hashtable å’?HashMap 采用çš?hash/rehash ½Ž—æ³•éƒ½å¤§æ¦‚ä¸€æ øP¼Œæ‰€ä»¥æ€§èƒ½ä¸ä¼šæœ‰å¾ˆå¤§çš„差异ã€?/p> <img src ="http://www.aygfsteel.com/dorydoo/aggbug/55368.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dorydoo/" target="_blank">多力宇扬</a> 2006-06-27 17:15 <a href="http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55368.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>æ‰ùN›¶http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55357.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:03:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55357.htmlhttp://www.aygfsteel.com/dorydoo/comments/55357.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55357.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55357.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55357.htmlblovesaga在一家小­‘…çñ”市场购买一ä¸?.10元棒‹‚’ç³–,但是他的钱报中都是两块一张的钞票.如果他用一张两块的钞票买这个棒‹‚’ç³–,那么应该扄¡»™ä»–多ž®‘零钱呢?
     ¾~–写一个程序解册™¿™ä¸ªé—®é¢?
code:
class Change
{
 public static void main(String[] args)
 {
  System.out.println(2.00-1.10);
 }
}

       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



多力宇扬 2006-06-27 17:03 发表评论
]]>
转晕乎了å?/title><link>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55356.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Tue, 27 Jun 2006 09:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55356.html</guid><wfw:comment>http://www.aygfsteel.com/dorydoo/comments/55356.html</wfw:comment><comments>http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55356.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/dorydoo/comments/commentRss/55356.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/dorydoo/services/trackbacks/55356.html</trackback:ping><description><![CDATA[ <p>转型用于ž®†ä¸€¿Uç±»åž‹è{换到另一¿Uç±»åž?看看下面的code˜qè¡ŒåŽä½ çŒœä¼šæ‰“印什ä¹?<br /> public class Multicast<br />{<br /> public static void main(String[] args)<br /> {<br />  System.out.println((int)(char)(byte)-1);<br /> }<br />}<br /> è½?è½?转,我给转晕äº?从intæ•°å€?1å¼€å§?然后从int转换为byte,ä¹‹åŽè½¬äØ“char,最后è{型回int.½W¬ä¸€ä¸ªè{型将数å€ég»Ž32为窄化到8ä½?½W¬äºŒä¸ªè{型从8ä½æ‹“å®½äØ“16ä½?最后从16位拓宽到32ä½?˜q™ä¸ªæ•°å€¼æœ€¾lˆå›žåˆ°è“v点了å?˜qè¡Œä¸€çœ‹ä¸ž®ÞqŸ¥é“了å?<br />Print:<br />F:\Java Develop>javac Multicast.java</p> <p>F:\Java Develop>java Multicast<br />65535<br />å•?˜q™ä¹ˆä¼šæ˜¯65535?<br />oh,my god!有条规则: 如果最初的数值类型是有符åïLš„,那么ž®±æ‰§è¡Œç¬¦åäh‰©å±?如果他是char,那么不管它将要被转换成什么类åž?都执行另扩展.<br />   用这条规则来44çœ?因䨓byte是有½W¦å·çš?所以在ž®†byteæ•°å€?1转换成charæ—?会发生符åäh‰©å±?ä½œäØ“¾l“果的charæ•°å€?6位就都被¾|®ä½äº?因此它等äº?^16-1(2çš?6‹Æ¡æ–¹å‡?),ž®±æ˜¯65535.从char到intçš„è{型也是一个扩å±?<br />用规则来说它ž®†æ‰§è¡Œå¦æ‰©å±•,而不是符åäh‰©å±?ä½œäØ“int的结果数值就æ˜?5535和打印的一æ ?<br />   从这个例子我们得åˆîC¸€ä¸ªæ•™è®?如果通过观察不能¼‹®å®š½E‹åºž®†è¦åšä»€ä¹?那么它做的就很有可能不是你想要的.</p> <img src ="http://www.aygfsteel.com/dorydoo/aggbug/55356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/dorydoo/" target="_blank">多力宇扬</a> 2006-06-27 17:02 <a href="http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优柔寡断http://www.aygfsteel.com/dorydoo/archive/2006/06/27/55353.html多力宇扬多力宇扬Tue, 27 Jun 2006 09:01:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55353.htmlhttp://www.aygfsteel.com/dorydoo/comments/55353.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/27/55353.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55353.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55353.html下面˜q™ä¸ªå¯æ€œçš„ž®ç¨‹åºåƈ不能òq²è„†çš„做军_®šã€‚它的decisiveæ–ÒŽ³•ž®†è¿”回true。但是它也返回false。那么,它到底打印的是什么呢åQŸç”šè‡»I¼Œåˆæ³•å?

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>

多力宇扬 2006-06-27 17:01 发表评论
]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÆÖ³ÇÏØ| ÎÄÉ½ÏØ| ³Ç¿ÚÏØ| ¿Ëʲ¿ËÌÚÆì| Óà¸ÉÏØ| ½úÖÐÊÐ| Ô­ÑôÏØ| ÓÎÏ·| Ò˱öÊÐ| ¶«¹âÏØ| ½çÊ×ÊÐ| ÌØ¿ËË¹ÏØ| èϳÇÏØ| ͨÐíÏØ| ξÊÏÏØ| ¶«°¢ÏØ| À­ÈøÊÐ| ½£ºÓÏØ| èϳÇÏØ| Î÷ÎÚÖéÄÂÇ߯ì| ¸ßÇå| »áÍ¬ÏØ| ¹ã×ÚÏØ| Áú¾®ÊÐ| Áúº£ÊÐ| Ñô¸ßÏØ| ÈÊ»³ÊÐ| ºù«µºÊÐ| ±±°²ÊÐ| ÁÖÖ¥ÏØ| ¼ÃÄÏÊÐ| ÂíÉ½ÏØ| ÑôÔ­ÏØ| ³üÖÝÊÐ| »ªÆºÏØ| ÈýÔ­ÏØ| »ù¡ÊÐ| ËàÄÏ| Î÷ÄþÊÐ| Ïã¸Û| ãä½­ÊÐ|