??xml version="1.0" encoding="utf-8" standalone="yes"?>国产一区二区中文字幕免费看,青青草免费在线,亚洲国产日韩精品在线http://www.aygfsteel.com/fisher/category/17939.html天行健,君子以自Z息。地势坤Q君子以厚d载物?/description>zh-cnMon, 12 Mar 2007 04:47:51 GMTMon, 12 Mar 2007 04:47:51 GMT60Java中堆和栈的区?/title><link>http://www.aygfsteel.com/fisher/articles/103150.html</link><dc:creator>Fisher</dc:creator><author>Fisher</author><pubDate>Sun, 11 Mar 2007 13:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/fisher/articles/103150.html</guid><wfw:comment>http://www.aygfsteel.com/fisher/comments/103150.html</wfw:comment><comments>http://www.aygfsteel.com/fisher/articles/103150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/fisher/comments/commentRss/103150.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/fisher/services/trackbacks/103150.html</trackback:ping><description><![CDATA[ <font size="2">   栈与堆都是Java用来在Ram中存放数据的地方。与C++不同QJava自动理栈和堆,E序员不能直接地讄栈或堆?<br /><br />     Java的堆是一个运行时数据?cȝ对象从中分配I间。这些对象通过new、newarray、anewarray和multianewarray{指令徏立,它们不需要程序代码来昑ּ的释放。堆是由垃圾回收来负责的Q堆的优势是可以动态地分配内存大小Q生存期也不必事先告诉编译器Q因为它是在q行时动态分配内存的QJava的垃圾收集器会自动收走这些不再用的数据。但~点是,׃要在q行时动态分配内存,存取速度较慢?<br /><br />     栈的优势是,存取速度比堆要快Q仅ơ于寄存器,栈数据可以共享。但~点是,存在栈中的数据大与生存期必L定的,~Z灉|性。栈中主要存放一些基本类型的变量Q?int, short, long, byte, float, double, boolean, charQ和对象句柄?<br /><br />     栈有一个很重要的特D性,是存在栈中的数据可以共享。假设我们同时定义: <br />int a = 3; <br />int b = 3Q?<br /><br />      ~译器先处理int a = 3Q首先它会在栈中创徏一个变量ؓa的引用,然后查找栈中是否?q个|如果没找刎ͼ将3存放q来Q然后将a指向3。接着处理int b = 3Q在创徏完b的引用变量后Q因为在栈中已经?q个|便将b直接指向3。这P出Ca与b同时均指?的情c?<br /><br />      q时Q如果再令a=4Q那么编译器会重新搜索栈中是否有4|如果没有Q则?存放q来Qƈ令a指向4Q如果已l有了,则直接将a指向q个地址。因此a值的改变不会影响到b的倹{?<br /><br />      要注意这U数据的׃n与两个对象的引用同时指向一个对象的q种׃n是不同的Q因U情况a的修改ƈ不会影响到b, 它是q译器完成的,它有利于节省I间。而一个对象引用变量修改了q个对象的内部状态,会媄响到另一个对象引用变量?<br /><br />String是一个特D的包装cL据。可以用Q?<br />String str = new String("abc"); <br />String str = "abc"; <br /><br />      两种的Ş式来创徏Q第一U是用new()来新建对象的Q它会在存放于堆中。每调用一ơ就会创Z个新的对象?而第二种是先在栈中创Z个对Stringcȝ对象引用变量strQ然后查找栈中有没有存放"abc"Q如果没有,则将"abc"存放q栈Qƈ令str指向”abc”,如果已经有”abc?则直接ostr指向“abc”?<br /><br />      比较c里面的数值是否相{时Q用equals()ҎQ当试两个包装cȝ引用是否指向同一个对象时Q用==Q下面用例子说明上面的理论?<br />String str1 = "abc"; <br />String str2 = "abc"; <br />System.out.println(str1==str2); //true <br />可以看出str1和str2是指向同一个对象的?<br /><br />String str1 =new String ("abc"); <br />String str2 =new String ("abc"); <br />System.out.println(str1==str2); // false <br />用new的方式是生成不同的对象。每一ơ生成一个?<br /><br /><br />     因此用第二种方式创徏多个”abc”字W串,在内存中其实只存在一个对象而已. q种写法有利与节省内存空? 同时它可以在一定程度上提高E序的运行速度Q因为JVM会自动根据栈中数据的实际情况来决定是否有必要创徏新对象。而对于String str = new String("abc")Q的代码Q则一概在堆中创徏新对象,而不其字符串值是否相{,是否有必要创建新对象Q从而加重了E序的负担?<br /><br />      另一斚w, 要注? 我们在用诸如String str = "abc"Q的格式定义cLQL惛_然地认ؓQ创ZStringcȝ对象str。担心陷阱!对象可能q没有被创徏Q而可能只是指向一个先前已l创建的对象。只有通过new()Ҏ才能保证每次都创Z个新的对象?<br />׃Stringcȝimmutable性质Q当String变量需要经常变换其值时Q应该考虑使用StringBufferc,以提高程序效率?<br /><br />转自<a >http://hi.baidu.com/liufujian/blog/item/f9a736d19fb596389b5027b8.html</a></font> <img src ="http://www.aygfsteel.com/fisher/aggbug/103150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/fisher/" target="_blank">Fisher</a> 2007-03-11 21:14 <a href="http://www.aygfsteel.com/fisher/articles/103150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java IOhttp://www.aygfsteel.com/fisher/articles/102008.htmlFisherFisherMon, 05 Mar 2007 14:41:00 GMThttp://www.aygfsteel.com/fisher/articles/102008.htmlhttp://www.aygfsteel.com/fisher/comments/102008.htmlhttp://www.aygfsteel.com/fisher/articles/102008.html#Feedback0http://www.aygfsteel.com/fisher/comments/commentRss/102008.htmlhttp://www.aygfsteel.com/fisher/services/trackbacks/102008.html
1、流Q?br />它是通过~冲机制数据从生者(如键盘、磁盘文件、内存或其他讑֤Q传送到接受该数据的消费者(如屏q、文件或者内存等Q的q一q程的抽象?br />2、有关的Java包:
Java.io包中包括许多cL供许多有x件的各个斚w操作?br />3、有x件名及目录名的类QFile cȝ立于pȝq_Q利用构造函?br />File( String path)?br />File(String path, String FileName)?br />File(File dir, String name) {创建出File 对象Q再利用canRead() 、canWrite()?getParent()?getPath(){成员函数实现对文g的各个属性的操作?br />import java.io.*;
public class FileTest
{ public static void main(String []args)
{
String FileName="C:\\temp\\myfile.dat"
File myFile=new File(FileName);
If( ! myFile. exists() )
{ System.err.println("Can't Find " + FileName);
return;
}
System.out.println("File " + FileName + "is " +myFile.length() + "bytes Long !");
If( myFile. isDirectory() )
{ System.err.println("File" + FileName +"Is a Directory !");
return;
}
}
}
4、有x件内容(数据Q操作的c:
4.1 输入输出抽象基类InputStream/OutputStream Q实现文件内Ҏ作的基本功能函数read()?write()、close()、skip(){;一般都是创建出其派生类对象Q完成指定的Ҏ功能Q来实现文gd。在文gd的编E过E中主要应该注意异常处理的技术?br />4.2 FileInputStream/FileOutputStreamQ?br />用于本地文gdQ二q制格式dq且是顺序读写,d写要分别创徏Z同的文g对象)Q?br />本地文gd~程的基本过EؓQ?br />?生成文g对象(Ҏ件读操作时应该ؓFileInputStreamc,而文件写应该为FileOutputStreamc)Q?
?调用FileInputStream或FileOutputStreamcM的功能函数如read()、write(int b){)d文g内容Q?br />?关闭文gQclose()Q?br />4.3 PipedInputStream/PipedOutputStreamQ?br />用于道输入输出Q将一个程序或一个线E的输出l果直接q接到另一个程序或一个线E的输入端口Q实C者数据直接传送。操作时需要连l)Q?
4.3.1 道的连接:
Ҏ之一是通过构造函数直接将某一个程序的输出作ؓ另一个程序的输入Q在定义对象时指明目标管道对?br />PipedInputStream pInput=new PipedInputStream();
PipedOutputStream pOutput= new PipedOutputStream(pInput);
Ҏ之二是利用双方类中的M个成员函?connect()相连?br />PipedInputStream pInput=new PipedInputStream();
PipedOutputStream pOutput= new PipedOutputStream();
pinput.connect(pOutput);
4.3.2 道的输入与输出Q?br />输出道对象调用write()成员函数输出数据Q即向管道的输入端发送数据)Q而输入管道对象调用read()成员函数可以读v数据Q即从输出管道中获得数据Q。这主要是借助pȝ所提供的缓冲机制来实现的?br />4.4、随机文件读写:
RandomAccessFilec(它直接承于Objectc而非InputStream/OutputStreamc)Q从而可以实现读写文件中M位置中的数据Q只需要改变文件的d位置的指针)?
随机文gd~程的基本过EؓQ?br />?生成对象ƈ且指明读写类型;
?Udd位置Q?br />?d文g内容Q?br />?关闭文g?br />StringBuffer buf=new StringBuffer();
char ch;
while( (ch=(char)System.in.read()) !='\n')
{
buf.append( ch);
} //d方式可以?r" or "rw"
RandomAccessFile myFileStream=new RandomAccessFile("myFile.dat"," rw");
myFileStream . seek(myFileStream.length()) ;
myFileStream.writeBytes(buf.toString()); //用户从键盘输入的内Ҏ加到文g的尾?br />myFileStream.close();
4.5 DataInput/DataOutput接口Q实C机器无关的各U数据格式读写(如readChar() 、readInt()、readLong()、readFloat()Q而readLine()返回一个StringQ。其中RandomAccessFilecdC该接口,h比FileInputStream或FileOutputStreamcL灉|的数据读写方式?br />4.6 标准输入输出:System.inQ如Qchar c=System.in.read()Q和System.outQ如QSystem.out.println()、System.out.println()Q?br />try
{ char ch=System.in.read(); //q回二进制数据(?位ؓ键盘的ASCII码)
}
catch(IOException e)
{
}
4.7、文件操作的一般方法:
Q?Q生成一个输入输出文件类的对象(Ҏ所要操作的cdQ;
Q?Q调用此cȝ成员函数实现文g数据内容的读写;
Q?Q关闭此文g?/p>

 



Fisher 2007-03-05 22:41 发表评论
]]>
JSP 使用 彩色囄验证? Servlet 生成)http://www.aygfsteel.com/fisher/articles/95257.htmlFisherFisherMon, 22 Jan 2007 03:50:00 GMThttp://www.aygfsteel.com/fisher/articles/95257.htmlhttp://www.aygfsteel.com/fisher/comments/95257.htmlhttp://www.aygfsteel.com/fisher/articles/95257.html#Feedback0http://www.aygfsteel.com/fisher/comments/commentRss/95257.htmlhttp://www.aygfsteel.com/fisher/services/trackbacks/95257.html首页
<img src="RandomCodeCtrl"/>

web.xml
<servlet>
<servlet-name>RandomCodeCtrl</servlet-name>
<servlet-class>com.chainway.util.RandomCodeCtrl</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RandomCodeCtrl</servlet-name>
<url-pattern>/RandomCodeCtrl</url-pattern>
</servlet-mapping>

RandomCodeCtrl:
package com.chainway.util;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RandomCodeCtrl extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("image/jpeg");
resp.setHeader("Pragma","No-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setDateHeader("Expires", 0);
RandomCode rc = new RandomCode();
try{
rc.getRandcode(req,resp);
}catch(Exception e){
System.err.println(e);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

//生成c?
//数字文字囄验证?
package com.chainway.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class RandomCode {
/**
* 随机取得一个字?
* @param Random random 随机?
* @return Font q回一个新字体
*/
private synchronized Font getsFont(Random random){
return new Font("Fixedsys",Font.CENTER_BASELINE,18);
}
/**
* q回一个随机颜?
* @param int fc 随机?
* @param int bc 随机?
* @param Random random 随机?
* @return Color q回一个新颜色
*/
synchronized Color getRandColor(int fc,int bc,Random random){
if(fc>255) fc=255;
if(bc>255) bc=255;
int r=fc+random.nextInt(bc-fc-6);
int g=fc+random.nextInt(bc-fc-4);
int b=fc+random.nextInt(bc-fc-8);
return new Color(r,g,b);
}
/**
* 生成随机数图?
*/
public synchronized void getRandcode(HttpServletRequest request,HttpServletResponse response)throws Exception{
System.setProperty("java.awt.headless","true");
HttpSession session = request.getSession();
int width=80, height=26;//讄囄大小
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.fillRect(0, 0, width, height);//讑֮Ҏ
g.setFont(new Font("Times New Roman",Font.ROMAN_BASELINE,18));
g.setColor(getRandColor(111,133,random));
//产生随机U?
for (int i=0;i<11;i++){
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(13);
int yl = random.nextInt(15);
g.drawLine(x,y,x+xl,y+yl);
}
//产生随机?
g.setColor(getRandColor(130,150,random));
//产生5个随机数
String sRand="";
for (int i=0;i<5;i++){
g.setFont(getsFont(random));
g.setColor(new Color(random.nextInt(101),random.nextInt(111),random.nextInt(121)));
//String rand=String.valueOf(getRandomString(random.nextInt(36)));
String rand=String.valueOf(getRandomString(random.nextInt(10)));
sRand+=rand;
g.translate(random.nextInt(3),random.nextInt(3));
g.drawString(rand,13*i,16);
}
session.removeAttribute("Rand");
session.setAttribute("Rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}

public synchronized String getRandomString(int num){
String randstring = "0123456789";
//String randstring = "0123456789abcdefghijklmnopqrstuvwxyz";
return String.valueOf(randstring.charAt(num));
}

}

//登陆判断Ҏ
从session里面取验证码数字q行比较

Fisher 2007-01-22 11:50 发表评论
]]>
վ֩ģ壺 | ӽ| ݸ| | ף| | | | ʶ| Դ| | ˮ| | º| ˮ| | | ɽ| | | ӽ| | | ¡| | ʼ| ؼ| ϰˮ| ƽȪ| ¡| | | Ʊ| Ƕ| | ϸ| ΢| | | ƺ| |