今天看单例模式的视频时,发现一个错误,毕老师的代码是这样子的
我再eclipse里运行的时候出错了,按照错误指示我在 class Single 前面加上了静态static
这样代码就可以正常运行了
但是究其原因我确实不知道,{:soso_e101:}
各位一起来看看咯{:soso_e154:} public class SingleDemo {
class Single
{
private int num;
private Single() //第一步构造函数私有化
{ }
private static Single s=new Single(); //第二步自定义一个对象s
public static Single getInstance() //第三步提供方法可获取到该对象
{
return s;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
public static void main(String[] args) {
Single s1=new Single();
s1.setNum(20);
System.out.println(s1.getNum());
}}
作者: 安路凤 时间: 2012-5-7 21:22
哦 我说呢 茅塞顿开!!!!!!!!!!!!!谢谢斑竹咯作者: 黄或俊 时间: 2012-5-7 21:24
瞎我一跳,居然说老毕错了{:soso_e120:}作者: 安路凤 时间: 2012-5-7 21:28
其实是我写错了!!正确的代码应该是这样子的 嘿嘿{:soso_e106:}
唉!!这回丢人丢大发啦
static class Single
{
private int num;
private Single() //第一步构造函数私有化
{ }
private static Single s=new Single(); //第二步自定义一个对象s
public static Single getInstance() //第三步提供方法可获取到该对象
{
return s;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
public class SingleDemo {
public static void main(String[] args) {
Single s1=Single.getInstance();
Single s2=Single.getInstance();
s1.setNum(20);
System.out.println(s2.getNum()); }
金肖 发表于 2012-5-7 21:41
因为主函数是静态的,静态不能访问非静态,而你的 class Single在成员位置上,可以理解是一个成员变量
所以 ...
如果说因为主函数是静态的,静态的不能访问非静态的那下面的程序怎么能顺利通过呢。对象直接访问了成员变量num.
class Single
{
private int num;
private Single() //第一步构造函数私有化
{ }
private static Single s=new Single(); //第二步自定义一个对象s
public static Single getInstance() //第三步提供方法可获取到该对象
{
return s;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
因为num是私有的,你对外提供了公共的set() get()方法,
你是用的对象调用set方法对num进行赋值
楼主可以将重新在Single类和主函数外定义一个非静态的 int型的变量 a = 2; ,然后在主函数中打印a,编译会报
无法从静态上下文中引用非静态 变量 a
System.out.println(a);
^作者: 黄燕京 时间: 2012-5-7 23:51
class Single
{
private int num;
private Single() //第一步构造函数私有化
{ }
private static Single s=new Single(); //第二步自定义一个对象s
public static Single getInstance() //第三步提供方法可获取到该对象
{
return s;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
public class SingleDemo {
public static void main(String[] args) {
Single s1=Single.getInstance();
Single s2=Single.getInstance();
s1.setNum(20);
System.out.println(s2.getNum()); }