??xml version="1.0" encoding="utf-8" standalone="yes"?>狠狠综合久久综合88亚洲,亚洲一区二区三区在线播放,亚洲人成无码久久电影网站http://www.tkk7.com/xxxzheng/archive/2005/11/30/22007.htmlSteveSteveWed, 30 Nov 2005 09:08:00 GMThttp://www.tkk7.com/xxxzheng/archive/2005/11/30/22007.htmlhttp://www.tkk7.com/xxxzheng/comments/22007.htmlhttp://www.tkk7.com/xxxzheng/archive/2005/11/30/22007.html#Feedback0http://www.tkk7.com/xxxzheng/comments/commentRss/22007.htmlhttp://www.tkk7.com/xxxzheng/services/trackbacks/22007.html阅读全文

Steve 2005-11-30 17:08 发表评论
]]>
问题集锦QServlets/JSP开发技术问{?/title><link>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21997.html</link><dc:creator>Steve</dc:creator><author>Steve</author><pubDate>Wed, 30 Nov 2005 08:56:00 GMT</pubDate><guid>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21997.html</guid><wfw:comment>http://www.tkk7.com/xxxzheng/comments/21997.html</wfw:comment><comments>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21997.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/xxxzheng/comments/commentRss/21997.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/xxxzheng/services/trackbacks/21997.html</trackback:ping><description><![CDATA[ <B>Z么GenericServlet在init(ServletConfig config)基础上增加了一个init()ҎQ?/B><BR>  <BR>  init()Ҏ被GenericServlet.init(ServletConfig config)Ҏ调用?BR>  <BR>  init()Ҏ方便了开发h员定制Servlet的初始化Q而无dl护ServletConfig对象的存储工作?BR>  <BR>  重写GenericServlet.init(ServletConfig config)必须要显C的调用super.init(config)Ҏ?BR>  <BR>  <B>ServletContext.getContect(java.lang.String uripath)的作用是什么?</B><BR>  <BR>  q回同一Server中指定的path对应的ServletContext对象,通过该对象可以实CServer中的其他Context打交道?BR>  <BR>  uripath必须是以"/"开始(该\径的含义是相对于整个Servlet文档的根路径Q而不是当前ServletContext的根路径Q?BR>  <BR>  <B>Servlet生命周期是什么?</B><BR>  <BR>  一般的Servlet(GenericServlet,即与协议无关的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy.<BR>  <BR>  HttpServlet的生命周? init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.<BR>  <BR>  <B>有没有必要重写GenericServlet.service()ҎQ?/B><BR>  <BR>  对于HttpServlet来说没有必要。只需要重写它的doXXXX()Ҏ可以了。HttpServlet中service()Ҏ会自动的Ҏ用户hcd把请求{发给相应的doXXXX()ҎQ例如doGet()ҎQ?BR>  <BR>  ServletRequest.getReader()和ServletRequest.getInputStream()如何使用Q?BR>  <BR>  注意两个Ҏ不能同时使用?BR>  <BR>  ServletRequest.getRealPath(String path)Ҏ已经不推荐用?BR>  <BR>  请用ServletContext.getRealPath(String path)Ҏ?BR>  <BR>  <B>ServletResponse~省的字W集(charset)是什?</B><BR>  <BR>  ServletResponse~省的字W集(charset)是ISO-8859-1,可以通过setContentType(java.lang.String)Ҏ改变新的字符集?BR>  <BR>  例如QsetContentType("text/html; charset=Shift_JIS").<BR>  <BR>  关于字符集信息,可以览<A target=_blank><FONT color=blue><span id="nr9x3pd" class=zhi14>RFC 2045</SPAN></FONT></A><BR>  <BR>  <B>HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()区别是什?<BR>  </B><BR>  request.getRequestURI() q回值类|/xuejava/requestdemo.jsp<BR>  <BR>  request.getRequestURL() q回值类|http://localhost:8080/xuejava/requestdemo.jsp<BR>  <BR>  HttpServletRequest.encodeURL()和HttpServletRequest.encodeRedirectURL(()区别是什?Z么要有两个不同的Ҏ呢?<BR>  <BR>  当用URL-rewriting方式来管理Session的时候,需要用C上的两个Ҏ?BR>  <BR>  两个Ҏ的不同点是:两个Ҏ定是否需要包含session ID的逻辑不同?BR>  <BR>  在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()ҎQ否则可能会丢失Sesssion信息?...<BR>  <BR>  <B>如何使你的Servlet或者JSP实现Single Thread Model?</B><BR>  <BR>  对于Servlet实现javax.single.SingleThreadModel接口?BR>  <BR>  对于JSP,在Page Directive中写如下的语?lt;%@ page isThreadSafe="false" %><BR>  <BR>  JSP Tag ?JSP XML-based Tag<BR>  <BR>  ...<BR>  <BR>  <B>如何把某一个JSP Page定义成ؓError Page?Z么要q样做?</B><BR>  <BR>  实现ҎQ?<%@ page isErrorPage="true" %><BR>  <BR>  Z么? 因ؓ需要获取Exception 对象Q缺省情况下Q在JSP Page中是不能直接使用“隐含对象?exception的)?BR>  <BR>  <B>JSP Page的执行顺序是如何的?</B><BR>  <BR>  JSP Page的执行顺序如下:<BR>  <BR>  JSP Page Translation. JSP Page --> Servlet source code.<BR>  JSP Page Compilation. Servlet source code --> Servlet class.<BR>  Load Class(First time or the server restarted)<BR>  <BR>  Create instance(可能会很多次Q如果JSP Page中声明了<%@ page isThreadSafe="false" %>)<BR>  <BR>  Call jspInit methodQ一般的JSP Page都没有重写这个方法,重写需要在声明语句D中Q?BR>  <BR>  Call _jspService methodQ类g一般HttpServlet的doGet和doPostҎQ但是可以同时用来处理Post和GetqhQ?BR>  <BR>  Call jspDestroy methodQServer在卸载Servet的时候,例如当Servlet很久没有使用的情况)?BR>  <BR>  <B>JSP Page中有哪些隐含对象(Implicity Object)?各自的类型和作用是什么?</B><BR>  <BR>  request --<BR>  reponse --<BR>  session --<BR>  application --<BR>  out --<BR>  page --<BR>  pagecontext --<BR>  exception -- 只有在当前JSP Page为Error Page的时候才有效?BR>  config --<BR>  <BR>  <B><jsp:include page="/foo/foo.jsp" %> ?<@ include file="/foo/foo.jsp" %>的区别是什么?<BR>  </B><BR>  <jsp:include ... -- request time.<BR>  <@ include ... -- Page translation time.<BR>  <BR>  <B>Servlets/JSP Container(Engine)有几U运行方式?</B><BR>  <BR>  Standalone<BR>  Tomcat standalone mode<BR>  In-process<BR>  Tomcat running inside Apache Web Server.<BR>  Out-of-process<BR>  Apache + mod_jk + Tomcat<BR>  <BR>  Servlet,Servlet开发h员,Servlet API, Servlet Container的关pL什么?<BR>  <BR>  Servlet,Servlet开发h?--->Servlet API --> Servlet Container<BR>  The parts of an HTTP message<BR>  <BR>  Message part Description<BR>  The initial lineQ?Specifies the purpose of the request or response message<BR>  例子QGET /reports/sales/index.html HTTP/1.0<BR>  The header section:Specifies the meta-information, such as size, type, and encoding,<BR>  about the content of the message<BR>  A blank line:<BR>  An optional message body: The main content of the request or response message<BR>  <BR>  下面是一个Response的例子:<BR>  <BR>  HTTP/1.0 200 OK<BR>  Date: Tue, 01 Dec 2001 23:59:59 GMT<BR>  Content-Type: text/html<BR>  Content-Length: 52<BR>  <BR>  <html><BR>  <body><BR>  <h1>Hello, John!</h1><BR>  </body><BR>  </html><BR>  <BR>  <B>HTTP规范中定义了哪些ҎQ各自有什么用途?</B><BR>  <BR>  GET<BR>  HEAD<BR>  POST<BR>  ?Http 1.1规范开始,增加了以下的Ҏ:<BR>  <BR>  PUT<BR>  OPTIONS<BR>  TRACE<BR>  DELETE<BR>  CONNECT<BR>  <BR>  ServetRequest中ؓ什么要定义:getContentType(),getContentLength()Ҏ?BR>  <BR>  ҎHTTP协议规范QRequest ?Response一样也有这些必不可的内容Q?BR>  <BR>  所以需要首先了?HTTP Message的概念和其内容的格式Q这些东西对于Request和Reponse是一L?BR>  <BR>  对于GET方式发送的hQ其内容cd为:null<BR>  <BR>  对于POST方式发送的hQ其内容cd为:application/x-www-form-urlencoded<BR>  <BR>  POST方式发送请求的内容cM于:username=xuejava.<BR>  <BR>  RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的区别是什么?<BR>  <BR>  RequestDispatcher.forward()是在服务器端q行QHttpServletResponse.sendRedirect()是通过向客h览器发送命令来完成?BR>  <BR>  所以RequestDispatcher.forward()对于览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是?BR>  <BR>  另外Q还要注意RequestDispatcher.forward()在调用的时候Response不能已经Commit了(Response.isCommitted()Q?BR>  <BR>  ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的区别是什么?Z么?<BR>  <BR>  ServletContext.getRequestDispatcher(String url)中的url只能使用l对路径Q而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径?BR>  <BR>  因ؓServletRequesth相对路径的概念;而ServletContext对象无次概念?BR>  <BR>  <B>如何把请求{Ud另外一个Web App中的某个地址Q?/B><BR>  <BR>  ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)只能把请求{Ud同一个Web App中的地址?BR>  <BR>  如果需要把h转移到另外一个Web App中的某个地址Q可以按下面的做法:<BR>  <BR>  1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).<BR>  <BR>  2. 调用ServletContext.getRequestDispatcher(String url)Ҏ?BR>  <BR>  未完待箋<img src ="http://www.tkk7.com/xxxzheng/aggbug/21997.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/xxxzheng/" target="_blank">Steve</a> 2005-11-30 16:56 <a href="http://www.tkk7.com/xxxzheng/archive/2005/11/30/21997.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>问题集锦QServlets/JSP开发技术问{?/title><link>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21998.html</link><dc:creator>Steve</dc:creator><author>Steve</author><pubDate>Wed, 30 Nov 2005 08:56:00 GMT</pubDate><guid>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21998.html</guid><wfw:comment>http://www.tkk7.com/xxxzheng/comments/21998.html</wfw:comment><comments>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/xxxzheng/comments/commentRss/21998.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/xxxzheng/services/trackbacks/21998.html</trackback:ping><description><![CDATA[ <B>Z么GenericServlet在init(ServletConfig config)基础上增加了一个init()ҎQ?/B><BR>  <BR>  init()Ҏ被GenericServlet.init(ServletConfig config)Ҏ调用?BR>  <BR>  init()Ҏ方便了开发h员定制Servlet的初始化Q而无dl护ServletConfig对象的存储工作?BR>  <BR>  重写GenericServlet.init(ServletConfig config)必须要显C的调用super.init(config)Ҏ?BR>  <BR>  <B>ServletContext.getContect(java.lang.String uripath)的作用是什么?</B><BR>  <BR>  q回同一Server中指定的path对应的ServletContext对象,通过该对象可以实CServer中的其他Context打交道?BR>  <BR>  uripath必须是以"/"开始(该\径的含义是相对于整个Servlet文档的根路径Q而不是当前ServletContext的根路径Q?BR>  <BR>  <B>Servlet生命周期是什么?</B><BR>  <BR>  一般的Servlet(GenericServlet,即与协议无关的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy.<BR>  <BR>  HttpServlet的生命周? init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.<BR>  <BR>  <B>有没有必要重写GenericServlet.service()ҎQ?/B><BR>  <BR>  对于HttpServlet来说没有必要。只需要重写它的doXXXX()Ҏ可以了。HttpServlet中service()Ҏ会自动的Ҏ用户hcd把请求{发给相应的doXXXX()ҎQ例如doGet()ҎQ?BR>  <BR>  ServletRequest.getReader()和ServletRequest.getInputStream()如何使用Q?BR>  <BR>  注意两个Ҏ不能同时使用?BR>  <BR>  ServletRequest.getRealPath(String path)Ҏ已经不推荐用?BR>  <BR>  请用ServletContext.getRealPath(String path)Ҏ?BR>  <BR>  <B>ServletResponse~省的字W集(charset)是什?</B><BR>  <BR>  ServletResponse~省的字W集(charset)是ISO-8859-1,可以通过setContentType(java.lang.String)Ҏ改变新的字符集?BR>  <BR>  例如QsetContentType("text/html; charset=Shift_JIS").<BR>  <BR>  关于字符集信息,可以览<A target=_blank><FONT color=blue><span id="999pr39" class=zhi14>RFC 2045</SPAN></FONT></A><BR>  <BR>  <B>HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()区别是什?<BR>  </B><BR>  request.getRequestURI() q回值类|/xuejava/requestdemo.jsp<BR>  <BR>  request.getRequestURL() q回值类|http://localhost:8080/xuejava/requestdemo.jsp<BR>  <BR>  HttpServletRequest.encodeURL()和HttpServletRequest.encodeRedirectURL(()区别是什?Z么要有两个不同的Ҏ呢?<BR>  <BR>  当用URL-rewriting方式来管理Session的时候,需要用C上的两个Ҏ?BR>  <BR>  两个Ҏ的不同点是:两个Ҏ定是否需要包含session ID的逻辑不同?BR>  <BR>  在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()ҎQ否则可能会丢失Sesssion信息?...<BR>  <BR>  <B>如何使你的Servlet或者JSP实现Single Thread Model?</B><BR>  <BR>  对于Servlet实现javax.single.SingleThreadModel接口?BR>  <BR>  对于JSP,在Page Directive中写如下的语?lt;%@ page isThreadSafe="false" %><BR>  <BR>  JSP Tag ?JSP XML-based Tag<BR>  <BR>  ...<BR>  <BR>  <B>如何把某一个JSP Page定义成ؓError Page?Z么要q样做?</B><BR>  <BR>  实现ҎQ?<%@ page isErrorPage="true" %><BR>  <BR>  Z么? 因ؓ需要获取Exception 对象Q缺省情况下Q在JSP Page中是不能直接使用“隐含对象?exception的)?BR>  <BR>  <B>JSP Page的执行顺序是如何的?</B><BR>  <BR>  JSP Page的执行顺序如下:<BR>  <BR>  JSP Page Translation. JSP Page --> Servlet source code.<BR>  JSP Page Compilation. Servlet source code --> Servlet class.<BR>  Load Class(First time or the server restarted)<BR>  <BR>  Create instance(可能会很多次Q如果JSP Page中声明了<%@ page isThreadSafe="false" %>)<BR>  <BR>  Call jspInit methodQ一般的JSP Page都没有重写这个方法,重写需要在声明语句D中Q?BR>  <BR>  Call _jspService methodQ类g一般HttpServlet的doGet和doPostҎQ但是可以同时用来处理Post和GetqhQ?BR>  <BR>  Call jspDestroy methodQServer在卸载Servet的时候,例如当Servlet很久没有使用的情况)?BR>  <BR>  <B>JSP Page中有哪些隐含对象(Implicity Object)?各自的类型和作用是什么?</B><BR>  <BR>  request --<BR>  reponse --<BR>  session --<BR>  application --<BR>  out --<BR>  page --<BR>  pagecontext --<BR>  exception -- 只有在当前JSP Page为Error Page的时候才有效?BR>  config --<BR>  <BR>  <B><jsp:include page="/foo/foo.jsp" %> ?<@ include file="/foo/foo.jsp" %>的区别是什么?<BR>  </B><BR>  <jsp:include ... -- request time.<BR>  <@ include ... -- Page translation time.<BR>  <BR>  <B>Servlets/JSP Container(Engine)有几U运行方式?</B><BR>  <BR>  Standalone<BR>  Tomcat standalone mode<BR>  In-process<BR>  Tomcat running inside Apache Web Server.<BR>  Out-of-process<BR>  Apache + mod_jk + Tomcat<BR>  <BR>  Servlet,Servlet开发h员,Servlet API, Servlet Container的关pL什么?<BR>  <BR>  Servlet,Servlet开发h?--->Servlet API --> Servlet Container<BR>  The parts of an HTTP message<BR>  <BR>  Message part Description<BR>  The initial lineQ?Specifies the purpose of the request or response message<BR>  例子QGET /reports/sales/index.html HTTP/1.0<BR>  The header section:Specifies the meta-information, such as size, type, and encoding,<BR>  about the content of the message<BR>  A blank line:<BR>  An optional message body: The main content of the request or response message<BR>  <BR>  下面是一个Response的例子:<BR>  <BR>  HTTP/1.0 200 OK<BR>  Date: Tue, 01 Dec 2001 23:59:59 GMT<BR>  Content-Type: text/html<BR>  Content-Length: 52<BR>  <BR>  <html><BR>  <body><BR>  <h1>Hello, John!</h1><BR>  </body><BR>  </html><BR>  <BR>  <B>HTTP规范中定义了哪些ҎQ各自有什么用途?</B><BR>  <BR>  GET<BR>  HEAD<BR>  POST<BR>  ?Http 1.1规范开始,增加了以下的Ҏ:<BR>  <BR>  PUT<BR>  OPTIONS<BR>  TRACE<BR>  DELETE<BR>  CONNECT<BR>  <BR>  ServetRequest中ؓ什么要定义:getContentType(),getContentLength()Ҏ?BR>  <BR>  ҎHTTP协议规范QRequest ?Response一样也有这些必不可的内容Q?BR>  <BR>  所以需要首先了?HTTP Message的概念和其内容的格式Q这些东西对于Request和Reponse是一L?BR>  <BR>  对于GET方式发送的hQ其内容cd为:null<BR>  <BR>  对于POST方式发送的hQ其内容cd为:application/x-www-form-urlencoded<BR>  <BR>  POST方式发送请求的内容cM于:username=xuejava.<BR>  <BR>  RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的区别是什么?<BR>  <BR>  RequestDispatcher.forward()是在服务器端q行QHttpServletResponse.sendRedirect()是通过向客h览器发送命令来完成?BR>  <BR>  所以RequestDispatcher.forward()对于览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是?BR>  <BR>  另外Q还要注意RequestDispatcher.forward()在调用的时候Response不能已经Commit了(Response.isCommitted()Q?BR>  <BR>  ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的区别是什么?Z么?<BR>  <BR>  ServletContext.getRequestDispatcher(String url)中的url只能使用l对路径Q而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径?BR>  <BR>  因ؓServletRequesth相对路径的概念;而ServletContext对象无次概念?BR>  <BR>  <B>如何把请求{Ud另外一个Web App中的某个地址Q?/B><BR>  <BR>  ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)只能把请求{Ud同一个Web App中的地址?BR>  <BR>  如果需要把h转移到另外一个Web App中的某个地址Q可以按下面的做法:<BR>  <BR>  1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).<BR>  <BR>  2. 调用ServletContext.getRequestDispatcher(String url)Ҏ?BR>  <BR>  未完待箋<img src ="http://www.tkk7.com/xxxzheng/aggbug/21998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/xxxzheng/" target="_blank">Steve</a> 2005-11-30 16:56 <a href="http://www.tkk7.com/xxxzheng/archive/2005/11/30/21998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java基础知识——java入门与加׃http://www.tkk7.com/xxxzheng/archive/2005/11/30/21994.htmlSteveSteveWed, 30 Nov 2005 08:53:00 GMThttp://www.tkk7.com/xxxzheng/archive/2005/11/30/21994.htmlhttp://www.tkk7.com/xxxzheng/comments/21994.htmlhttp://www.tkk7.com/xxxzheng/archive/2005/11/30/21994.html#Feedback0http://www.tkk7.com/xxxzheng/comments/commentRss/21994.htmlhttp://www.tkk7.com/xxxzheng/services/trackbacks/21994.html  
  {:Java是一U通用的,q发的,强类型的Q面向对象的~程语言Q摘自Java规范W二? JDK是Sun公司分发的免费Java开发工P正式名称为J2SDK(Java2 Software Develop Kit)?BR>  
  2 什么是JRE/J2REQ?BR>  
  {:J2RE是Java2 Runtime EnvironmentQ即Javaq行环境Q有时简UJRE?BR>  
  如果你只需要运行JavaE序或AppletQ下载ƈ安装它即可?BR>  
  如果你要自行开发Java软gQ请下蝲JDK。在JDK中附带有J2RE?BR>  
  注意׃Microsoft对Java的支持不完全Q请不要使用IE自带的虚拟机来运行AppletQ务必安装一个J2RE或JDK?BR>  
  3 学习Java用什么工h较好Q?BR>  
  {:作者徏议首先用JDK+文本~辑器,q有助你理解下列几个基础概念QpathQclasspathQpackageq熟悉基本命令:javac和java。ƈ且下载和你的JDK版本一致的API帮助?BR>  
  如果你不定cL函数的用法,请先查阅API而不是发贴求助?BR>  
  当你熟悉Java之后Q你可以考虑换一个IDE。很多h推荐JCreatorQ实际上JCreator的功能还 是很q?BR>  
  作者推荐eclipseQ下载网址http://www.eclipse.org 。因eclispe是免费的.
  
  4 学习Java有哪些好的参考书Q?BR>  
  {:作者首先推荐Thinking in JavaQ中文名《Java~程思想》,有中文版?BR>  
  该书W一章介l了很多面向对象的编E思想Q作为新手应当认真阅诅R?BR>  
  除此以外QO′relly出版C֒Wrox出版C书也不错。作者本Z喜欢大陆作者的书?BR>  
  也许你觉得英文太难,但是|上大多数资料都是英文的。另外,你需要经常查阅APIQ而那也是英文的?BR>  
  5 Java和C++哪个更好Q?BR>  
  {:q个问题是一个很不恰当的问题。你应该问:Java和C++哪个更适用于我的项目?
  
  如果你不需要跨q_Q不需要分布式Q要E序的运行速度QC++更ؓ适用。反?你应当考虑Java?BR>  
  6 什么是J2SE/J2EE/J2MEQ?BR>  
  {:J2SE是一般的Java?BR>  
  J2ME是针对嵌入式讑֤的,比如Java手机Q它有自qSDK。而J2EE使用J2SE的SDK?BR>  
  J2EE规范更多的是对J2EE服务器的要求和开发h员的U束。详情见后《J2EE FAQ》?BR>  
  二、命令篇
  
  7 我写了第一个JavaE序Q应该如何编?q行Q?BR>  
  {:首先请将E序保存为xxx.java文gQ然后在dosH口下用javac xxx.java命oQ你会发现该目录下多了一个xxx.class文gQ再使用java xxx命oQ你的javaE序开始运行了?BR>  
  8 我照你说的做了,但是出现什?′javac?不是内部或外部命令,也不是可q行的程序或批处理文件??BR>  
  {:你遇Cpath问题。操作系l在一定的范围(path)内搜索javac.exeQ但是没能找到。请~辑你的操作pȝ环境变量Q新增一个JAVA_HOME变量Q设ZJDK的安装目录,再编辑Path变量Q加上一?%JAVA_HOME%\bin。然后关掉ƈ新开一个dosH口Q你可以用javac和java命o了?BR>  
  9 环境变量怎么讄Q?BR>  
  {:请向w边会设的h咨询?BR>  
  10 javac xxx.java利通过了,但是java xxx的时候显CZ?NoClassDefFoundError"?br>
  
  {:你遇Cclasspath问题。java命o在一定的范围(classpath)内搜索你要用的class文gQ但是未能找到?BR>  
  首先L认你没有错敲成java xxx.classQ其ơ,查你的CLASSPATH环境变量Q如果你讄了该变量又没有包?Q代表当前目录)?br> ?br> 你就会遇到这个问题。请在你的CLASSPATH环境变量中加入一?。另外参?5?BR>  
  11 我在java xxx的时候显C?Exception in thread "main" java.lang.NoSuchMethodError: main"?BR>  
  {:首先Q在你的E序中每个java文g有且只能有一个publicc,q个cȝcd必须和文件名的大写完全一栗其ơ,在你要运行的cM有且只能有一个public static void main(String[] args)ҎQ这个方法就是你的主E序?BR>  
  12 package是什么意思?怎么用?
  
  {:Z唯一标识每个cdƈ分组Qjava使用了package的概c?BR>  
  每个c都有一个全名,例如String的全名是java.lang.StringQ其中java.lang是包名,String是短名?BR>  
  q样Q如果你也定义了StringQ你可以把它攑֜mypackage中,通过使用全名mypackage.String和java.lang.String来区分这两个cR同Ӟ逻辑上相关的cL在同一个包中,可以使程序结构更为清楚。你要做的就是在java文g开头加一?package mypackage;"?BR>  
  注意包没有嵌套或包含关系QA包和A.B包对java命o来说是ƈ列的两个包?BR>  
  13 我没有声明Q何package会怎么P
  
  {:你的c被认ؓ攑֜默认包中。这时全名和短名是一致的?BR>  
  14 在一个类中怎么使用其他c?
  
  {:如果你用java.lang包中的类Q不用做M事?BR>  
  如果你用其他包中的c,使用import package1.class1; ?import package2.*;q里.*表示引入q个包中的所有类。然后在E序中你可以使用其他cȝ短名。如果短名有冲突Q用全名来区分?BR>  
  15 我用了package的时候显C?NoClassDefFoundError"Q但是我把所有packageL的时候能正常q行?BR>  
  {:你的java文g按包名存放?BR>  
  比如你的工作目录?workQ你的类是package1.class1Q那么将它存放ؓ/work/package1/class1.java。如果没有声明包Q那么直接放?work下?BR>  
  ?work下执行javac package1/class1.javaQ再执行java package1.class1Q你会发C切正常。另外,你可以考虑开始用IDE?BR>  
  16 我想把java~译成exe文gQ该怎么做?
  
  {:JDK只能java源文件编译ؓclass文g?BR>  
  class文g是一U跨q_的字节码Q必M赖^台相关的JRE来运行。Java以此来实现跨q_.有些开发工具可以将java文g~译为exe文g。作者反对这U做法,因ؓq样取消了跨^台性。如果你信你的软g只在Windowsq_上运行,你可以考虑使用C++/C#来编E?BR>  
  17 我在~译的时候遇C?deprecated API"Q是什么意思?
  
  {:所谓deprecated是指已经?Ӟ但是Z向前兼容赯仍然保留的方??br> q些Ҏ可能会在以后取消支持。你应当改用较新的方法。一般在API里面会说明你应当用什么方法来代替之?BR>  
  三、I/O?/B>
  
  18 我怎么ljavaE序加启动参敎ͼ像dir /p/w那样Q?BR>  
  {:q记得public static void main(String[] args)吗?q里的args是你的启动参数。在q行时你输入java package1.class1 -arg1 -arg2Qargs中就会有两个StringQ一个是arg1Q另一个是arg2?BR>  
  19 我怎么从键盘输入一个int/double/字符Ԍ
  
  {:java的I/O操作比C++要复杂一炏V如果要从键盘输入,样例代码如下QBufferedReader cin = new BufferedReader( new InputStreamReader( System.in ) );String s = cin.readLine();
  
  q样你就获得了一个字W串Q如果你需要数字的话再加上Qint n = Integer.parseInt( s ); 或?double d = Double.parseDouble( s );
  
  20 我怎么输出一个int/double/字符Ԍ
  
  {:在程序开始写Q?BR>  
  PrintWriter cout = new PrintWriter( System.out );
  
  需要时写:
  
  cout.print(n); 或者cout.println("hello"){等?BR>  
  21 我发现有些书上直接用System.in和System.out输入输出Q比你要单得多?BR>  
  {:java使用unicodeQ是双字节。而System.in和System.out是单字节的stream?BR>  
  如果你要输入输出双字节文字比如中文,请用作者的做法?BR>  
  22 我怎么从文件输入一个int/double/字符Ԍ
  
  {:cM于从键盘输入Q只不过换成BufferedReader fin = new BufferedReader( new FileReader(" myFileName " ) );
  PrintWriter fout = new PrintWriter( new FileWriter(" myFileName " ) );
  
  另外如果你还没下载APIQ请开始下载ƈ阅读java.io包中的内宏V?BR>  
  23 我想d文g的指定位|,该怎么办?
  
  {:你肯定没有认真看API。java.io.RandomAccessFile可以满你的需要?BR>  
  24 怎么判断要读的文件已l到了尽_
  
  {:你肯定没有认真看API。在Reaer的readҎ中明说明返?1表示的l尾?BR>  
  四?关键字篇
  
  25 java里面怎么定义宏?
  
  {:java不支持宏Q因为宏代换不能保证cd安全?BR>  
  如果你需要定义常量,可以它定义为某个类的static final成员。参?6?0?BR>  
  26 java里面没法用const?BR>  
  {:你可以用final关键字。例?final int m = 9。被声明为final的变量不能被再次赋?final也可以用于声明方法或c,被声明ؓfinal的方法或cM能被l承。注意const是java的保留字以备扩充?BR>  
  27 java里面也不能用goto?BR>  
  {:甚至在面向过E的语言中你也可以完全不用goto。请查你的程序流E是否合理?BR>  
  如果你需要从多层循环中迅速蟩出,java增强了(和C++相比Qbreak和continue的功能?img src ="http://www.tkk7.com/xxxzheng/aggbug/21994.html" width = "1" height = "1" />

Steve 2005-11-30 16:53 发表评论
]]>
java基础知识——java入门与加?http://www.tkk7.com/xxxzheng/archive/2005/11/30/21995.htmlSteveSteveWed, 30 Nov 2005 08:53:00 GMThttp://www.tkk7.com/xxxzheng/archive/2005/11/30/21995.htmlhttp://www.tkk7.com/xxxzheng/comments/21995.htmlhttp://www.tkk7.com/xxxzheng/archive/2005/11/30/21995.html#Feedback0http://www.tkk7.com/xxxzheng/comments/commentRss/21995.htmlhttp://www.tkk7.com/xxxzheng/services/trackbacks/21995.html  
  {:throws用于声明一个方法会抛出哪些异常。而throw是在Ҏ体中实际执行抛出异常的动作?BR>  
  如果你在Ҏ中throw一个异常,却没有在Ҏ声明中声明之Q编译器会报错?BR>  
  注意Error和RuntimeException的子cL例外Q无需特别声明?BR>  
  32 什么是异常Q?BR>  
  {:异常最早在Ada语言中引入,用于在程序中动态处理错误ƈ恢复?BR>  
  你可以在Ҏ中拦截底层异常ƈ处理之,也可以抛l更高层的模块去处理?BR>  
  你也可以抛出自己的异常指C发生了某些不正常情c常见的拦截处理代码如下Q?BR>  try
  {
  ...... //以下是可能发生异常的代码
  ...... //异常被抛出,执行程中断q{向拦截代码?BR>  ......
  }
  
  catch(Exception1 e) //如果Exception1是Exception2的子cdƈ要做特别处理Q应排在前面
  {
  //发生Exception1时被该段拦截
  }
  catch(Exception2 e)
  {
  //发生Exception2时被该段拦截
  }
  finally //q是可选的
  {
  //无论异常是否发生Q均执行此段代码
  }
  
  33 final和finally有什么不同?
  
  {:final误26。finally用于异常机制Q参?2?BR>  
  五?面向对象?/B>
  
  34 extends和implements有什么不同?
  
  {:extends用于Q单Q承一个类QclassQ,而implements用于实现一个接口(interfaceQ?BR>  
  interface的引入是Z部分地提供多l承的功能?BR>  
  在interface中只需声明Ҏ_而将Ҏ体留l实现的class来做?BR>  
  q些实现的class的实例完全可以当作interface的实例来对待?BR>  
  有趣的是在interface之间也可以声明ؓextendsQ单l承Q的关系?BR>  
  35 java怎么实现多承?
  
  {:java不支持显式的多ѝ?BR>  
  因ؓ在显式多l承的语a例如c++中,会出现子c被q声明祖先虚基类构造函数的问题Q而这是违反面向对象的装性原则的?BR>  
  java提供了interface和implements关键字来部分地实现多l承。参?4?BR>  
  36 abstract是什么?
  
  {:被声明ؓabstract的方法无需l出Ҏ体,留给子类来实现?BR>  
  而如果一个类中有abstractҎQ那么这个类也必d明ؓabstract?BR>  
  被声明ؓabstract的类无法实例化,管它可以定义构造方法供子类使用?BR>  
  37 public,protected,private有什么不同?
  
  {:q些关键字用于声明类和成员的可见性。public成员可以被Q何类讉KQprotected成员限于自己和子c访问,private成员限于自己讉K?BR>  
  Javaq提供了W四U的默认可见性,当没有Q何public,protected,private修饰?
  
  cd以用public或默认来修饰?BR>  
  38 Override和Overload有什么不同?
  
  {:Override是指父类和子cM间方法的l承关系Q这些方法有着相同的名U和参数cd?BR>  
  Overload是指同一个类中不同方法(可以在子cM可以在父cM定义Q间的关p,q些Ҏ有着相同的名U和不同的参数类型?BR>  
  39 我承了一个方法,但现在我惌用在父类中定义的Ҏ?BR>  
  {:用super.xxx()可以在子cM调用父类Ҏ?BR>  
  40 我想在子cȝ构造方法中调用父类的构造方法,该怎么办?
  
  {:在子cL造方法的W一行调用super(...)卛_?BR>  
  41 我在同一个类中定义了好几个构造方法ƈ且想在一个构造方法中调用另一个?BR>  
  {:在构造方法第一行调用this(...)?BR>  
  42 我没有定义构造方法会怎么P
  
  {:自动获得一个无参数的构造方法?BR>  
  43 我调用无参数的构造方法失败了?BR>  
  {:如果你至定义了一个构造方法,׃再有自动提供的无参数的构造方法了?BR>  
  你需要显式定义一个无参数的构造方法?BR>  
  44 我该怎么定义cM于C++中的析构ҎQdestructorQ?
  
  {:提供一个void finalize()Ҏ。在Garbarge Collector回收该对象时会调用该Ҏ?BR>  
  注意实际上你很难判断一个对象会在什么时候被回收。作者从未感到需要提供该Ҏ?BR>  
  45 我想一个父cd象{换成一个子cd象该怎么做?
  
  {:强制cd转换。如
  public void meth(A a)
  {
  B b = (B)a;
  }
  如果a实际上ƈ不是B的实例,会抛出ClassCastException。所以请保a实是B的实例?BR>  
  46 其实我不定a是不是B的实例,能不能分情况处理Q?BR>  
  {:可以使用instanceof操作W。例?BR>  
  if( a instanceof B )
  {
  B b = (B)a;
  }
  else
  {
  ...
  
  
  }
  
  47 我在Ҏ里修改了一个对象的|但是退出方法后我发现这个对象的值没变!
  
  {:很可能你把传入参数重赋了一个新对象Q例如下列代码就会造成q种错误Q?BR>  
  public void fun1(A a) //a是局部参敎ͼ指向了一个外在对象?BR>  {
  a = new A(); //a指向了一个新对象Q和外在对象脱钩了。如果你要让a作ؓ传出变量Q不要写q一句?BR>  
  a.setAttr(attr);//修改了新对象的|外在对象没有被修攏V?BR>  }
  
  基本cd也会出现q种情况。例如:
  
  public void fun2(int a)
  {
  a = 10;//只作用于本方法,外面的变量不会变化?BR>  }
  
  六、java.util?/B>
  
  48 java能动态分配数l吗Q?BR>  
  {:可以。例如int n = 3; Language[] myLanguages = new Language[n];
  
  49 我怎么知道数组的长度?
  
  {:用length属性。如上例中的 myLanguages.length ׃ؓ 3?BR>  
  50 我还惌数组的长度能自动改变Q能够增?删除元素?BR>  
  {:用顺序表--java.util.List接口?BR>  
  你可以选择用ArrayList或是LinkedListQ前者是数组实现Q后者是链表实现?BR>  
  例如Q?List list = new ArrayList(); 或是 List list = new LinkedList(); ?BR>  
  51 什么是链表Qؓ什么要有两U实玎ͼ
  
  {:误习数据结构?BR>  
  52 我想用队?栈?BR>  
  {:用java.util.LinkedList?BR>  
  53 我希望不要有重复的元素?BR>  
  {:用集?-java.util.Set接口。例如:Set set = new HashSet()?BR>  
  54 我想遍历集合/Map?BR>  
  {:用java.util.Iterator。参见API?BR>  
  55 我还要能够排序?BR>  
  {:用java.util.TreeSet。例如:Set set = new TreeSet()。放q去的元素会自动排序?BR>  
  你需要ؓ元素实现Comparable接口Q还可能需要提供equals()ҎQcompareTo()ҎQhash Code()Ҏ?BR>  
  56 但是我想l数l排序?BR>  
  {:java.util.Arrayscd含了sort{实用方法?BR>  
  57 我想按不同方法排序?BR>  
  {:为每U方法定义一个实C接口Comparator的类q和Arraysl合q用?BR>  
  58 Map有什么用Q?BR>  
  {:存储key-value的关键字-值对Q你可以通过关键字来快速存取相应的倹{?BR>  
  59 setҎ没问题,但是getҎq回的是Object?BR>  
  {:强制cd转换成你需要的cd。参?5?BR>  
  60 我要获得一个随机数?BR>  
  {:使用java.util.RandomcR?BR>  
  61 我比较两个StringLfalseQ但是它们明明都?abc" Q?BR>  
  {:比较String一定要使用equals或equalsIgnoreCaseҎQ不要?== Q?BR>  
  ==比较的是两个引用Q变量)是否指向了同一个对象,而不是比较其内容?img src ="http://www.tkk7.com/xxxzheng/aggbug/21995.html" width = "1" height = "1" />

Steve 2005-11-30 16:53 发表评论
]]>
开发JavapȝE序员要注意的基本知识二http://www.tkk7.com/xxxzheng/archive/2005/11/30/21992.htmlSteveSteveWed, 30 Nov 2005 08:48:00 GMThttp://www.tkk7.com/xxxzheng/archive/2005/11/30/21992.htmlhttp://www.tkk7.com/xxxzheng/comments/21992.htmlhttp://www.tkk7.com/xxxzheng/archive/2005/11/30/21992.html#Feedback0http://www.tkk7.com/xxxzheng/comments/commentRss/21992.htmlhttp://www.tkk7.com/xxxzheng/services/trackbacks/21992.html问题四:final关键字到底修C什么?
  
  final使得被修饰的变量"不变"Q但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义Q引用本w的不变Q和引用指向的对象不变?BR>  
  引用本n的不变:
  final StringBuffer a=new StringBuffer("immutable");
  final StringBuffer b=new StringBuffer("not immutable");
  a=b;//~译期错?BR>  
  引用指向的对象不变:
  final StringBuffer a=new StringBuffer("immutable");
  a.append(" broken!"); //~译通过
  
  可见Qfinal只对引用的“值?也即它所指向的那个对象的内存地址)有效Q它q引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化Qfinal是不负责的。这很类?=操作W:==操作W只负责引用的“值”相{,至于q个地址所指向的对象内Ҏ否相{,==操作W是不管的?BR>  
  理解final问题有很重要的含义。许多程序漏z都Z?---final只能保证引用永远指向固定对象Q不能保证那个对象的状态不变。在多线E的操作?一个对象会被多个线E共享或修改Q一个线E对对象无意识的修改可能会导致另一个用此对象的线E崩溃。一个错误的解决Ҏ是在此对象新徏的时候把它声明ؓfinalQ意图得它“永q不变”。其实那是徒劳的?BR>  
  问题五:到底要怎么样初始化Q?/B>
  
  本问题讨论变量的初始化,所以先来看一下Java中有哪些U类的变量?BR>  
  1. cȝ属性,或者叫值域
  
  2. Ҏ里的局部变?BR>  
  3. Ҏ的参?BR>  
  对于W一U变量,Java虚拟Z自动q行初始化。如果给Z初始|则初始化初始倹{如果没有给出,则把它初始化cd变量的默认初始倹{?BR>  
  intcd变量默认初始gؓ0
  
  floatcd变量默认初始gؓ0.0f
  
  doublecd变量默认初始gؓ0.0
  
  booleancd变量默认初始gؓfalse
  
  charcd变量默认初始gؓ0(ASCII?
  
  longcd变量默认初始gؓ0
  
  所有对象引用类型变量默认初始gؓnullQ即不指向Q何对象。注意数l本w也是对象,所以没有初始化的数l引用在自动初始化后其g是null?BR>  
  对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创徏实例的时候初始化Qstatic属性在cd载,也就是第一ơ用到这个类的时候初始化Q对于后来的实例的创建,不再ơ进行初始化。这个问题会在以后的pd中进行详l讨论?BR>  
  对于W二U变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,~译器会抗议。如果初始化的语句在try块中或if块中Q也必须要让它在W一ơ用前一定能够得到赋倹{也是_把初始化语句攑֜只有if块的条g判断语句中编译器也会抗议Q因为执行的时候可能不W合if后面的判断条Ӟ如此一来初始化语句׃会被执行了,q就q反了局部变量用前必须初始化的规定。但如果在else块中也有初始化语句,可以通过~译Q因为无论如何,L臛_一条初始化语句会被执行Q不会发生用前未被初始化的事情。对于try-catch也是一P如果只有在try块里才有初始化语句,~译部通过。如果在 catch或finally里也有,则可以通过~译。MQ要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要Z化成什么值好Q就用上面的默认值吧Q?BR>  
  其实W三U变量和W二U本质上是一LQ都是方法中的局部变量。只不过作ؓ参数Q肯定是被初始化q的Q传入的值就是初始|所以不需要初始化?BR>  
  问题六:instanceof是什么东东?
  
  instanceof是Java的一个二元操作符Q和==Q?gt;Q?lt;是同一cM东。由于它是由字母l成的,所以也是Java的保留关键字。它的作用是试它左边的对象是否是它双的类的实例,q回booleancd的数据。D个例子:
  
  String s = "I AM an Object!";
  boolean isObject = s instanceof Object;
  
  我们声明了一个String对象引用Q指向一个String对象Q然后用instancof来测试它所指向的对象是否是Objectcȝ一个实例,昄Q这是真的,所以返回trueQ也是isObject的gؓTrue?BR>  instanceof有一些用处。比如我们写了一个处理̎单的pȝQ其中有q样三个c:
  
  public class Bill {//省略l节}
  public class PhoneBill extends Bill {//省略l节}
  public class GasBill extends Bill {//省略l节}
  
  在处理程序里有一个方法,接受一个Billcd的对象,计算金额。假设两U̎单计方法不同,而传入的Bill对象可能是两U中的Q何一U,所以要用instanceof来判断:
  
  public double calculate(Bill bill) {
  if (bill instanceof PhoneBill) {
  //计算电话账单
  }
  if (bill instanceof GasBill) {
  //计算燃气账单
  }
  ...
  }
  q样可以用一个方法处理两U子cR?BR>  
  然而,q种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实玎ͼq是面向对象变成应有的做法,避免回到l构化编E模式。只要提供两个名字和q回值都相同Q接受参数类型不同的Ҏ可以了Q?BR>  
  public double calculate(PhoneBill bill) {
  //计算电话账单
  }
  
  public double calculate(GasBill bill) {
  //计算燃气账单
  }
  
  所以,使用instanceof在绝大多数情况下q不是推荐的做法Q应当好好利用多态?img src ="http://www.tkk7.com/xxxzheng/aggbug/21992.html" width = "1" height = "1" />

Steve 2005-11-30 16:48 发表评论
]]>
java E序員注意几?/title><link>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21903.html</link><dc:creator>Steve</dc:creator><author>Steve</author><pubDate>Wed, 30 Nov 2005 01:40:00 GMT</pubDate><guid>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21903.html</guid><wfw:comment>http://www.tkk7.com/xxxzheng/comments/21903.html</wfw:comment><comments>http://www.tkk7.com/xxxzheng/archive/2005/11/30/21903.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/xxxzheng/comments/commentRss/21903.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/xxxzheng/services/trackbacks/21903.html</trackback:ping><description><![CDATA[ <B>问题一Q我声明了什么!</B><BR>  <BR>  String s = "Hello world!";<BR>  <BR>  许多人都做过q样的事情,但是Q我们到底声明了什么?回答通常是:一个StringQ内Ҏ“Hello world!”。这hp的回答通常是概念不清的Ҏ。如果要准确的回{,一半的人大概会回答错误?BR>  <BR>  q个语句声明的是一个指向对象的引用Q名为“s”,可以指向cd为String的Q何对象,目前指向"Hello world!"q个Stringcd的对象。这是真正发生的事情。我们ƈ没有声明一个String对象Q我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:<BR>  <BR>  String string = s;<BR>  <BR>  我们是声明了另外一个只能指向String对象的引用,名ؓstringQƈ没有W二个对象生,stringq是指向原来那个对象Q也是Q和s指向同一个对象?BR>  <BR>  <B>问题二:"=="和equalsҎI竟有什么区别?</B><BR>  <BR>  ==操作W专门用来比较变量的值是否相{。比较好理解的一ҎQ?BR>  int a=10;<BR>  int b=10;<BR>  则a==b是true?BR>  但不好理解的地方是:<BR>  String a=new String("foo");<BR>  String b=new String("foo");<BR>  则a==b返回false?BR>  <BR>  Ҏ前一帖说q,对象变量其实是一个引用,它们的值是指向对象所在的内存地址Q而不是对象本w。a和b都用了new操作W,意味着在内存中生两个内容ؓ"foo"的字W串Q既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的|所以?=="操作W,l果会是 false。诚Ӟa和b所指的对象Q它们的内容都是"foo"Q应该是“相{”,但是==操作Wƈ不涉及到对象内容的比较?BR>  <BR>  对象内容的比较,正是equalsҎ做的事?BR>  <BR>  看一下Object对象的equalsҎ是如何实现的Q?BR>  boolean equals(Object o){<BR>  <BR>  return this==o;<BR>  <BR>  }<BR>  Object 对象默认使用?=操作W。所以如果你自创的类没有覆盖equalsҎQ那你的cM用equals和?=会得到同Ll果。同样也可以看出Q?Object的equalsҎ没有辑ֈequalsҎ应该辑ֈ的目标:比较两个对象内容是否相等。因为答案应该由cȝ创徏者决定,所以Object把这个Q务留l了cȝ创徏者?BR>  <BR>  看一下一个极端的c:<BR>  Class Monster{<BR>  private String content;<BR>  ...<BR>  boolean equals(Object another){ return true;}<BR>  <BR>  }<BR>  我覆盖了equalsҎ。这个实CD无论Monster实例内容如何Q它们之间的比较永远q回true?BR>  <BR>  所以当你是用equalsҎ判断对象的内Ҏ否相{,请不要想当然。因为可能你认ؓ相等Q而这个类的作者不q样认ؓQ而类的equalsҎ的实现是׃掌握的。如果你需要用equalsҎQ或者用Q何基于散列码的集合(HashSet,HashMap,HashTableQ,请察看一下java doc以确认这个类的equals逻辑是如何实现的?BR>  <BR>  <B>问题三:String到底变了没有Q?/B><BR>  <BR>  没有。因为String被设计成不可?immutable)c,所以它的所有对象都是不可变对象。请看下列代码:<BR>  <BR>  String s = "Hello";<BR>  s = s + " world!";<BR>  <BR>  s 所指向的对象是否改变了呢?从本pdW一的l论很容易导个结论。我们来看看发生了什么事情。在q段代码中,s原先指向一个String对象Q内Ҏ "Hello"Q然后我们对sq行?操作Q那么s所指向的那个对象是否发生了改变呢?{案是没有。这Ӟs不指向原来那个对象了Q而指向了另一?String对象Q内容ؓ"Hello world!"Q原来那个对象还存在于内存之中,只是sq个引用变量不再指向它了?BR>  <BR>  通过上面的说明,我们很容易导出另一个结论,如果l常对字W串q行各种各样的修改,或者说Q不可预见的修改Q那么用String来代表字W串的话会引起很大的内存开销。因?String对象建立之后不能再改变,所以对于每一个不同的字符Ԍ都需要一个String对象来表C。这Ӟ应该考虑使用StringBufferc,它允怿改,而不是每个不同的字符串都要生成一个新的对象。ƈ且,q两U类的对象{换十分容易?BR>  <BR>  同时Q我们还可以知道Q如果要使用内容相同的字W串Q不必每ơ都new一个String。例如我们要在构造器中对一个名叫s的String引用变量q行初始化,把它讄为初始|应当q样做:<BR>  public class Demo {<BR>  private String s;<BR>  ...<BR>  public Demo {<BR>  s = "Initial Value";<BR>  }<BR>  ...<BR>  }<BR>  而非<BR>  s = new String("Initial Value");<BR>  后者每ơ都会调用构造器Q生成新对象Q性能低下且内存开销大,q且没有意义Q因为String对象不可改变Q所以对于内容相同的字符Ԍ只要一个String对象来表C就可以了。也pQ多ơ调用上面的构造器创徏多个对象Q他们的Stringcd属性s都指向同一个对象?BR>  <BR>  上面的结Zq样一个事实:对于字符串常量,如果内容相同QJava认ؓ它们代表同一个String对象。而用关键字new调用构造器QL会创Z个新的对象,无论内容是否相同?BR>  <BR>  至于Z么要把Stringc设计成不可变类Q是它的用途决定的。其实不只StringQ很多Java标准cd中的c都是不可变的。在开发一个系l的时候,我们有时候也需要设计不可变c,来传递一l相关的|q也是面向对象思想的体现。不可变cL一些优点,比如因ؓ它的对象是只ȝQ所以多U程q发讉K也不会有M问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表Q可能会造成性能上的问题。所以Java标准cdq提供了一个可变版本,?StringBuffer?img src ="http://www.tkk7.com/xxxzheng/aggbug/21903.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/xxxzheng/" target="_blank">Steve</a> 2005-11-30 09:40 <a href="http://www.tkk7.com/xxxzheng/archive/2005/11/30/21903.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://gtja1668.com" target="_blank">޹˾þ</a>| <a href="http://webgame86.com" target="_blank">99re6ƵƷѹۿ</a>| <a href="http://benjiebf.com" target="_blank">Ƶ</a>| <a href="http://seosuanfa.com" target="_blank">񼶵Ӱ</a>| <a href="http://sy8989.com" target="_blank">޳վ</a>| <a href="http://sitefmns.com" target="_blank">Ƶ</a>| <a href="http://cnpc1002.com" target="_blank">**һëƬ</a>| <a href="http://7778kk.com" target="_blank">޹av</a>| <a href="http://aiqingdao999.com" target="_blank">Ұ߹ۿ </a>| <a href="http://my77789.com" target="_blank">ַ߹ۿ</a>| <a href="http://thinkchating.com" target="_blank">һ߲ѹۿİƵ</a>| <a href="http://xdxsw.com" target="_blank">ۺۺ</a>| <a href="http://qiseka.com" target="_blank">þ99žŹѿС˵</a>| <a href="http://youyou8tv.com" target="_blank">˳ھþۺվ</a>| <a href="http://17soco.com" target="_blank">ĻmvƵ8</a>| <a href="http://zjjtejia.com" target="_blank">鶹AVþþƷ</a>| <a href="http://www73234.com" target="_blank">ѿһƬ</a>| <a href="http://bbscqz.com" target="_blank">ƷҳѸ߹ۿ </a>| <a href="http://wwwkckc.com" target="_blank">ڵĤѿ</a>| <a href="http://www16am8.com" target="_blank">ĻӰ߾Ʒ</a>| <a href="http://hongyue8.com" target="_blank">ɫƵ</a>| <a href="http://dd99com.com" target="_blank">ٸƷһѶ̬</a>| <a href="http://46339cc.com" target="_blank">Ů˻Ů</a>| <a href="http://goeqq.com" target="_blank">ҹһƵ</a>| <a href="http://96j6.com" target="_blank"></a>| <a href="http://fanqi5.com" target="_blank">ƷպAVһ </a>| <a href="http://chaoxung.com" target="_blank">aƵѹۿ</a>| <a href="http://yy885.com" target="_blank">ڳ߿</a>| <a href="http://ssdtsz.com" target="_blank">aƵ</a>| <a href="http://kph37.com" target="_blank">Ѳһ</a>| <a href="http://1897tao.com" target="_blank">AV벻߲</a>| <a href="http://shaonvfushi.com" target="_blank">Ƶһ</a>| <a href="http://ywjh666.com" target="_blank">ϵվۿ</a>| <a href="http://www09191z.com" target="_blank">˳ߵӰ</a>| <a href="http://qzllw.com" target="_blank">ѿƵվ</a>| <a href="http://zygwkqf.com" target="_blank">߹ۿ</a>| <a href="http://hongyue8.com" target="_blank">޹˾þۺһ</a>| <a href="http://fsweicheng.com" target="_blank">Ȱ׽һ</a>| <a href="http://bj-tkld.com" target="_blank">˾Ʒѿ</a>| <a href="http://wlamyx.com" target="_blank">˳߲</a>| <a href="http://kuaizhuxia.com" target="_blank">av뾫Ʒվ </a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>