﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-kaiking</title><link>http://www.blogjava.net/kaiking/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 20:57:41 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 20:57:41 GMT</pubDate><ttl>60</ttl><item><title>Java 的引用和垃圾回收机制</title><link>http://www.blogjava.net/kaiking/archive/2006/05/23/47655.html</link><dc:creator>宗凯</dc:creator><author>宗凯</author><pubDate>Tue, 23 May 2006 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/kaiking/archive/2006/05/23/47655.html</guid><wfw:comment>http://www.blogjava.net/kaiking/comments/47655.html</wfw:comment><comments>http://www.blogjava.net/kaiking/archive/2006/05/23/47655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kaiking/comments/commentRss/47655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kaiking/services/trackbacks/47655.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Garamond" size="1">       Java的引用是Java和C++的主要区别之一,也是Java比C++好用的地方,Java语言明确说明取消了指针,这只是在Java语言中没有明确的指针定义，实质上每一个new语句返回的都是一个指针的引用.而这也是很多程序员在编程中常常忽略了对象与引用的区别.更是公司笔试的时候最喜欢考的地方.<br />        CSDN上的Java引用的笔试题:<br /> <br />第一题:      <br />  public class Test {<br />    public static void changeStr(String str){<br />        str="welcome";//1<br />    }<br />    public static void main(String[] args) {<br />        String str="1234";//2<br />        changeStr(str);<br />        System.out.println(str);<br />    }<br />}<br />答案是"1234".<br />        详细分析：<br />Java中函数参数传递是值传递，在C语言以后的都是这样的，关键是传进来的值是什么。<br />①如果参数是基础类型，如int型的，则传进来的是int型变量的值，这个值放在堆里的。<br />举个例子：<br />void fun(int i){};<br />int i = 5;<br />fun(i);<br />传进fun函数的是5;<br />②如果参数是引用类型。如String型的，则传进来的是String型变量的值，这个值放在栈里，此值是该变量将要指向的对象的地址,实际的对象是放在堆的。<br />举个例子：<br />void fun(String str0){};<br />String str = "Hello";<br />fun(str); </font>
		</p>
		<p>
				<font face="Garamond" size="1">fun()方法调用时第一件事就是，做了一个赋值操作：str0 = str;<br />这个操作的结果就是将str变量的值传给str0变量的值，也就是使得str0也指向str所指向的对象。对str0所指向的对象做修改操作，也就是对str所指的对象做修改。<br /><br />第二题:<br />1.class X2{<br />2.         public X2 x;<br />3.         public static void main(String[] args){<br />4.         X2 x2=new X2();<br />5.         X2 x3=new X2();<br />6.         x2.x=x3;<br />7.         x3.x=x2;<br />8.         x2=new X2();<br />9.         x3=x2;<br />10.         doComplexStuff();<br />11.}<br />12.}<br />after line 9 runs,how many objects are eligible for garbage collection?<br />A.0  B.1  C.2  D.3  E.4<br /><br />这道题比较BT,首先要搞清楚Java的内存分配机制<br />Java中 内存有2部分:stack和heap<br />stack:存放基本类型的数据和对象的reference，但对象本身不存放在stack中，而是存放在Heap中<br />Heap:存放用new产生的数据<br />TIJ中说了Java的GC就是首先从stack和静态分配区的ref查找heap中对应的对象<br />,如果heap对象没有找到相应ref就回收它.<br />可以这样理解在第7行的时候都是正常的<br />x2 -&gt; A<br />x2.x -&gt; B<br />x3 -&gt; B<br />x3.x -&gt; A<br />问题就在8行,给x2 重新new出来一个对象,x2的成员对象x就是null了,x3.x还是指向A,A还是没有给释放.<br />9行,x3也给重新赋值了和x2指向同一个对象,A和B都不到在stack上的ref了,所以<br />A和B给回收了<br />answer :C<br /></font>
		</p>
<img src ="http://www.blogjava.net/kaiking/aggbug/47655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kaiking/" target="_blank">宗凯</a> 2006-05-23 15:40 <a href="http://www.blogjava.net/kaiking/archive/2006/05/23/47655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开篇的文章,写写今天捣鼓的 Java的日期</title><link>http://www.blogjava.net/kaiking/archive/2006/05/22/47517.html</link><dc:creator>宗凯</dc:creator><author>宗凯</author><pubDate>Mon, 22 May 2006 10:39:00 GMT</pubDate><guid>http://www.blogjava.net/kaiking/archive/2006/05/22/47517.html</guid><wfw:comment>http://www.blogjava.net/kaiking/comments/47517.html</wfw:comment><comments>http://www.blogjava.net/kaiking/archive/2006/05/22/47517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/kaiking/comments/commentRss/47517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/kaiking/services/trackbacks/47517.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Garamond" size="1"> java的日期显示要涉及到java.util的3个类,<br />一.  Date<br />  最早JDK处理时间/日期的类.<br />  例如:<br />import java.util.*;<br />import java.text.*; </font>
		</p>
		<p>
				<font face="Garamond" size="1">public class TestDate {<br />   public static void main(String[] args){<br />     Date date = new Date();<br />     System.out.println(date);<br />    }<br />}<br />  得到的结果是格林威治标准时间 :Mon May 22 18:05:17 CST 2006<br />import java.util.*;<br />import java.text.*; </font>
		</p>
		<p>
				<font face="Garamond" size="1">public class TestDate 1{<br />   public static void main(String[] args){<br />     Date date = new Date();<br />     System.out.println(date);<br />    }<br />}<br />  返回该日期表示的从 GMT 1970 年 1 月 1 日 00:00:00 起的毫秒数.<br /><br />二. DateFormate <br />      DateFormate日期／时间格式化子类的一个抽象类.DateFormat类的一个目标是建立一个人们能够识别的字符串。然而，因为语言的差别，不是所有的人希望看到严格的相同格式的日期。法国人更喜欢看到 "25 decembre 2000,",但是美国人习惯看到"December 25,2000."所以一个DateFormat的实例创建以后，这个对象包含了日期的显示格式的信息。如果使用用户电脑区域设置缺省的格式，你可以象下面那样，创建DateFormat对象，使用getDateInstance()方法：<br /><br />DateFormat df = DateFormat.getDateInstance();<br /><br />import java.util.*;<br />import java.text.*;<br /><br />public class NowString {<br />public static void main(String[] args) {<br />Date now = new Date();<br />DateFormat df = DateFormat.getDateInstance();<br />String s = df.format(now);<br />System.out.println(s);<br />}<br />}<br />得到的结果是 2005-5-22;<br /><br /></font>
				<font size="1">
						<font face="Garamond">
								<font color="#000000">DateFormat还提供了几个选择日期格式，你可以通过使用重载的 getDateInstance(int style)获得。出于方便的原因，DateFormat提供了几种预置的常量，你可以使用这些常量参数。下面是几个SHORT, MEDIUM, LONG, 和FULL类型的示例<br /></font>
								<br />例如:<br /></font>
				</font>
				<font size="1">
						<font face="Garamond">
								<font color="#000000">import java.util.*;<br />import java.text.*;<br /><br />public class StyleDemo {<br />public static void main(String[] args) {<br />Date now = new Date();<br /><br />DateFormat df = DateFormat.getDateInstance();<br />DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT);<br />DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM);<br />DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);<br />DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL); <br />String s = df.format(now);<br />String s1 = df1.format(now);<br />String s2 = df2.format(now);<br />String s3 = df3.format(now);<br />String s4 = df4.format(now);<br /><br />System.out.println("(Default) Today is " + s);<br />System.out.println("(SHORT) Today is " + s1);<br />System.out.println("(MEDIUM) Today is " + s2);<br />System.out.println("(LONG) Today is " + s3);<br />System.out.println("(FULL) Today is " + s4);<br />}<br />}</font>
								<br />
								<br />显示结果为:<br /></font>
				</font>
				<font size="1">
						<font face="Garamond">
								<font color="#000000">Default) Today is Nov 8, 2000<br />(SHORT) Today is 11/8/00<br />(MEDIUM) Today is Nov 8, 2000<br />(LONG) Today is November 8, 2000<br />(FULL) Today is Wednesday, November 8, 2000</font>
								<br />
								<br />但是如果我希望看到秒数和分钟怎么办?<br />可以尝试将从工厂方法中获得的 DateFormat 变形为 SimpleDateFormat<br />例如:<br />import java.util.*;<br />import java.text.*; </font>
				</font>
		</p>
		<p>
				<font face="Garamond" size="1">public class TestSimpleDateFormat{<br />  public static void main(String[] args){<br />     SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />     Date date = new Date();<br />     System.out.println(sf.format(date));<br />  }<br />}<br />得到的结果是 2005-05-22 18:30:17<br /><br />三 Calendar 类 Calendar是JDK提供的日历类.<br /><br />import java.util.*;<br />import java.text.*;<br />public class TestCalendar {<br />    public static void main(String[] args){<br />       Calendar calendar = Calendar.getInstance();<br />       calendar.set(Calendar.HOUR_OF_DAY,10);//设置小时是24小时制的10点<br />       calendar.set(Calendar.MINUTE,30); //设置分钟是30<br />       calendar.set(Calendar.SECOND,30); //设置秒数是30<br />       Date time =   calendar.getTime();<br />   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />   System.out.println(sf.format(time));<br />    }<br />} <br />得到结果是 2005-05-22  10:30:30<br /> <br />我现在想得到10年前的日期怎么办啊?<br />import java.util.*;<br />import java.text.*;<br />public class TestCalendar {<br />    public static void main(String[] args){<br />       Calendar calendar = Calendar.getInstance();<br />            calendar.add(Calendar.YEAR,-10);//设置年份为当前-10<br />       Date time =   calendar.getTime();<br />   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />   System.out.println(sf.format(time));<br />    }<br />} <br /><br />我现在想得到100天前的日期怎么办啊?<br />import java.util.*;<br />import java.text.*;<br />public class TestCalendar {<br />    public static void main(String[] args){<br />       Calendar calendar = Calendar.getInstance();<br />            calendar.add(Calendar.DAY_OF_YEAR,-100);//设置日期为当前-100前.<br />       Date time =   calendar.getTime();<br />   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br />   System.out.println(sf.format(time));<br />    }<br />} <br />只要修改时间域即可,很简单的.<br /><br />对了想知道星期几怎么办?<br />import java.util.*;<br />import java.text.*;<br />public class TestCalendar {<br />    public static void main(String[] args){<br />       Calendar calendar = Calendar.getInstance();<br />      calendar.add(Calendar.DAY_OF_YEAR,-99);<br />      Date time =   calendar.getTime();<br />   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");//加上星期啦.<br />   System.out.println(sf.format(time));<br />    }<br />} <br /><br />想修改星期怎么办?<br /><br />import java.util.*;<br />import java.text.*;<br />public class TestCalendar {<br />    public static void main(String[] args){<br />       Calendar calendar = Calendar.getInstance();<br />    <br />       calendar.set(Calendar.DAY_OF_WEEK,1);//本周的第一个星期日.<br />       Date time =   calendar.getTime();<br />   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");<br />   System.out.println(sf.format(time));<br />    }<br />} <br />  <br />OK,就这么多,Calendar可以轻松的得到日期和时间. </font>
		</p>
<img src ="http://www.blogjava.net/kaiking/aggbug/47517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/kaiking/" target="_blank">宗凯</a> 2006-05-22 18:39 <a href="http://www.blogjava.net/kaiking/archive/2006/05/22/47517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>