标题: 2个问题 [打印本页] 作者: 戎石锁 时间: 2012-8-13 19:44 标题: 2个问题 private Son(){}
private static Son son=new Son();
public static Son getInstance(){
return son;
}
static有什么作用啊?
求解答
多线程问题
是不是用实现接口runnable可以实现的同步 用继承Thread也一定能也可以做到,反之亦然??
还有例如其他的一些接口类和主类也是一样?? 作者: pphdsny3 时间: 2012-8-13 19:53
第一个问题:你那是设计单例类的方法:
1,构造函数私有,不让其在外面生产实例
private Son(){}
2,此类必须要有一个实例
private static Son son=new Son();
3,必须给外部调用此唯一的实例的方法,但是此类不能被实例化,只能通过对象调用该方法,所以方法要静态,又由于静态方法只能访问静态的内容,所以类中创建的对象要变成静态static的
public static Son getInstance(){
return son;
}
第2个问题:
目前实现多线程的方法就是有两个
1,继承Thread,但是此方法不是再继承别的类
2,实现implement接口,可以继承别的类
所以一般实现多线程多用第2种方法作者: 梁志仲 时间: 2012-8-14 00:30
private Son(){}
private static Son son=new Son();
public static Son getInstance(){
return son;
}
static有什么作用啊?
答:当成员被static静态修饰后,除了可以被对象调用外,还可以直接被类名调用。而没有被static修饰的成员,必须建立了对象后,通过对象调用。两种成员的生命周期是不同的。静态变量在类被加载时就存在了,而非静态变量是随着对象的建立才在堆内存中建立存储空间。因为静态方法可以通过类名直接调用,而静态方法先于对象存在,因此静态方法只能访问静态成员。
多线程问题
是不是用实现接口runnable可以实现的同步 用继承Thread也一定能也可以做到,反之亦然??
还有例如其他的一些接口类和主类也是一样??
答:多线程可以通过继承Thread类或实现Runnable接口两种方法实现 ,但继承方式产生的子类,只能有Thread类作为父类,而实现Runnable接口方式产生的对象所属的类,可以继承自其他类。多线程主要是要运行其中的run方法,用实现Runnable接口的方式产生多线程会使程序更易懂,类与类之间的关系更紧密和清晰,所以一般用这种方式。用继承方式实现的多线程可以用实现接口方式实现,但用实现接口方式实现的多线程,用继承方式就不一定适用了,因为要创建的对象可能已经是继承了其他类的功能。
在选择用继承还是实现接口的时候,要考虑要产生的子类与父类或接口的关系,继承是 is a 关系,实现是 like a 关系。如果只是要某一个功能,而关系不是很密切的话,则选用实现接口的方式。