黑马程序员技术交流社区
标题:
初学者的瓶颈 求高手解释
[打印本页]
作者:
李龙涛
时间:
2011-7-23 23:43
标题:
初学者的瓶颈 求高手解释
在看张老师的视频教程中经常遇到这种问题
import java.util.*;
import javax.management.*;
public class TestTimerTask {
public static void main(String[] args) {
class MyTimerTask extends TimerTask
{
private Timer tm=null;
public MyTimerTask(Timer tm)
{
this.tm=tm;
}
public void run()
{
try{
Runtime.getRuntime().exec("calc.exe");
}catch(Exception e)
{
e.printStackTrace();
}
//结束任务线程的代码
tm.cancel();
}
}
Timer tm=new Timer();
tm.schedule(new MyTimerTask(tm),5000);
}
}
schedule(TimerTask task,long delay)
我知道在schedule方法中要传递进去一个TimerTask对象
问题1:为什么要定义一个TimerTask的子类呢?为什么这个子类要定义为内部类呢?
问题2:这个TimerTask对象为什么还要传递进去一个Timer对象呢?
问题3:为什么还要在TimerTask子类中定义一个Timer的构造函数呢?而且还要传递进去一个Timer类型的引用变量呢?
问题4:Timer tm=null;这句也理解不了
也许对于高手来说这些问题都很容易 但是相信对于我或者跟我一样的初学者来说 经常遇到这种问题 例如多线程同步中也有遇到类似的问题,请高手们赐教
[
本帖最后由 李龙涛 于 2011-07-23 23:47 编辑
]
作者:
匿名
时间:
2011-7-23 23:49
管理员多给点分呀 这个问题相信是很多初学者都一时难以理解的
作者:
那日苏
时间:
2011-7-24 00:42
问题1. TimerTask定义为子类的原因是为了复写父类的方法(本例中为fun()方法)。
1.2 (a)如果一个类只在另一个类中用到了,那就可以把它声明为这另一个类的内部类(本例中为MyTimerTask )。
(b)不想被除了外部类的类访问,这也是内部类的好处,
(c)也为了程序的高内聚,低耦合。
问题2.是为了实例化MyTimerTask 对象。
问题3.构造函数中传递进去一个Timer对象的原因是为了实例化Timer对象。
问题4.private Timer tm=null; 是初始化成员变量tm。
PS:文笔不好,别笑。
[
本帖最后由 那日苏 于 2011-07-24 00:46 编辑
]
作者:
孙斌
时间:
2011-7-24 00:46
尽我所能,解释一些,大家多多补充!
一、
1.内部类是程序更具模块化,更紧凑;
2.TimerTask是一个abstract类,要用它必须定义它的一个子类;
二、
Timer对象表示schedule delay in milliseconds的时间,因为Timer有schedule(TimerTask task, long delay)这样一个方法,需要传递进去一个参数,详见JDK中Timer类的schedule方法,不知道能不能缺省?
三、
定义public MyTimerTask(Timer tm)方法是为了把Timer获得的值传递给自己的变量;
四、
赋予一个空值,应该是出于安全方面的考虑。
[
本帖最后由 孙斌 于 2011-07-24 00:51 编辑
]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2