String sdate="2001-08-30";
int syear = Integer.parseInt(sdate.substring(0, 4));
int smonth = Integer.parseInt(sdate.substring(5, 7)) - 1;
int sday = Integer.parseInt(sdate.substring(8, 10));
GregorianCalendar cal = new GregorianCalendar();
cal.set(syear, smonth, sday);
week = cal.get(java.util.Calendar.DAY_OF_WEEK);//1为星期天
下面知道怎么做了吧...........

解决方案 »

  1.   

    垃圾收及器调用的就是finialize()这个函数
      

  2.   

    gxc_csdn(火箭炮)说错,garbage collection只在jvm认为需要的时候进行,不能由程序控制。finialize用来释放除却内存空间以外的资源
      

  3.   

    for gc, user can not control,you never explicitly free memory that you allocated, although the gc() exist in System and Runtime;
     
    for unused Objects ,it may be eligible to gc, but it not must be collected,so you can still get memory leaks;
      

  4.   

    我来说几句:1. 什么是垃圾收集?
    我想也就是回收那些已经没有有效引用但仍占据 jvm 堆空间的内存块吧。垃圾收集可以使用 System.gc() 来强制实行,我不明白上面朋友的不能由程序控制是什么意思。
    我以前好像也有看到有朋友说垃圾收集不能由程序控制的说法,我曾怀疑是不是我的基本概念有问题,因为我想一般人应该不会犯这样关于简单的常识的错误,我仔细看了 jdk1.3.1 关于 gc 的文档:Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse. When control returns from the method call, the Java Virtual Machine has made a best effort to reclaim space from all discarded objects. 注意到最后一句,当控制从方法调用返回之后,jvm 将因回收了所有的无用的内存空间而得到最好的性能。
    如果我的逻辑判别能力还正常的话,这句话的意思应该是:方法调用之后,将完成垃圾收集。2. 每个对象都可以重载 finialize 方法,以完成类似 C++ 里面的析构函数的功能(也就是打扫战场)。
    比如说一些关于 io 的类,如果你忘了在程序中关闭一些系统资源,finalize 方法检查并替你关闭。
    但是并不要以为这样你就可以高枕无忧,因为一般情况下,垃圾收集是不会主动调用的,只有在 jvm 的可用内存空间小于某个数值时才会调用垃圾收集器,此时每个 Object 的 finalize 方法将被用,当然这个数值可以由你自己设定。
      

  5.   

    yatwql(Dr.Jone) 难道系统调用的不是这个方法吗?你可以做个试验,重载这个方法,在里面写一个输出语句,看看在垃圾回收时是不是用了这个方法。我又没说是自己调用这个方法。而且用system.gc可以强行调用,清除未被清除的垃圾。
      

  6.   

    我来说两句 ,java中不能确定什么时候垃圾会被收集,system.gc()只是对系统发出收集垃圾的建议.
      

  7.   

    JVM的垃圾收集其实是用一个另外的线程来进行,而这个线程的优先级很低……
    当我们调用system.gc()的时候,实际上是start这个线程,具体什么时候运行,什么时候中断,取决于系统……
    垃圾收集的时候会先调用该对象的finialize()方法,所以你可以在这个方法里面写一些收尾的工作,但由于GC线程的优先级很低,随时可能被打断,所以依靠finialize()方法是很不可靠的……你无法知道这个方法具体什么时候才会被执行……
    所以SUN也说gc只是suggests虚拟机进行垃圾收集而已……
      

  8.   

    同意sunni(), java中不能确定什么时候垃圾会被收集。我的理解是,JAVA中会自动管理需要回收的内存空间,比如放在队列里。调用system.gc()将提高该块内存回收的优先级,就好象线程的调度一样,优先级较高的线程会优先获得CPU,但不是马上获得。同样,system.gc()也不能保证马上进行垃圾回收。
      

  9.   

    suggests,也就是一个建议而已,gc不可考
      

  10.   

    我觉得那些 gc 不能强迫垃圾收集的说法至少对那些初学者是一种迷惑。
    也没有必要强调这一点,对于那些初学者来说,我们要让他们知道的是,jdk 提供这样一种方法,可以用它来强制进行垃圾收集,实际上绝大部分实际情况下也是这样的。这是我的观点:的确垃圾收集是用一个守护线程来做的,但即使是 main 方法,也不过是一个线程而已,因此,是不是说,main 也不可靠呢?
    一般情况下,gc 总是马上调用成功的,所以 gc 在某种意义上说,是可以‘强迫’系统进行垃圾收集的,至少看上去是这样 - 因为事实上,如果我没有设用 gc 的话,垃圾收集在程序运行期间也许永远也不会发生,只有显示调用 gc 之后,gc 才会产生作用,而所有无用的 Object 里的 finalize 里面的方法也将被逐个调用。注意的是,凡是线程,它们的运行是并发的,也就是说一旦线程启动,它便会一直进行下去,不管你是什么线程,不管你的优先级有多低,里面的语句总是会执行下去的。
    如果你要的是及时的垃圾收集,gc 也许不会保证百分之百可靠,但至少是百分之九十九,因为一个线程大部分时间都不可能占用全部 cpu 利用率的,它总要留一部分时间给别的线程。如果你对时间要求不是那么严格的话,gc 可以算得上是百分之百可靠的。