请问
下面是单例设计模式,懒汉式的一段代码,
为什么把s=new Single()写出Single s=new Single();就会编译错误;
是什么原因?谢谢!class Single
{
private int age;
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single(); //这里如果是Single s=new Single();就会编译错误;为什么呢?
return s;
}
}
下面是单例设计模式,懒汉式的一段代码,
为什么把s=new Single()写出Single s=new Single();就会编译错误;
是什么原因?谢谢!class Single
{
private int age;
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null)
s=new Single(); //这里如果是Single s=new Single();就会编译错误;为什么呢?
return s;
}
}
静态方法不能实例化对象
Single s=new Single();
我觉得应该是这两句重复定义了Single s.
...............
}
Single s=new Single(); }
return s;
加上大括号呀!!!!
这点千万不能懒呀!!否则意思就变啦。。
不能再定义
{
int i = 0;
{
int i = 0;
}
}
这种写法在C和C++里就没有问题,但是在JAVA里就不行,因为JAVA的设计师们认为这样的定义方式会影响到程序代码的可读性
所以
People p1 = new People("楼主");
People p2 = p1;
这样p1和p2对应的都是"楼主"这个实例,楼主就有2个"名字"啦~\(≧▽≦)/~但是
People p1 = new People("楼主");
People p1 = new People("不结贴的楼主");
就会报错,因为,p1已经是楼主的名字了,不能再给别人用了~另外觉得那句话总结的很好
有的人觉得编程语言应该能让程序员做任何事
有的人觉得编程语言应该能防止程序员做"蠢事"java是后者的代表,所以,因为我是从java入门的,所以我觉得想突破自身就是要了解,java都防止我们做什么"蠢事"了,而且是怎样实现防止我们干"蠢事"的
public class Example
{
static String s = null;
public static void main(String[] args) throws IOException {
if(true){
String s = "s";
}
}
}
public class Example
{
static String s = null;
public static void main(String[] args) throws IOException {
if(true)
String s = "s";
}
}
楼上说得东西我还真没注意,刚才差了点资料.给大家分享.楼上的问题可以解释为
Java 把 String s = "s"; 当两条语句看待了相当于 String s ; s = "";
所以不加括号会出错
具体的东西涉及到编译原理的一些知识
楼主代码改成public static Single getInstance() {
if (s == null){
Single s = new Single(); // 这里如果是Single s=new Single();就会编译错误;为什么呢?
}
return s;
}就不出编译期错误了
Java 把 String s = "s"; 当两条语句看待了相当于 String s ; s = "";
所以不加括号会出错
具体的东西涉及到编译原理的一些知识
所以12说对了,出错的原因不是重新定义,是括号的问题
楼主代码改成public static Single getInstance() {
if (s == null){
Single s = new Single(); // 这里如果是Single s=new Single();就会编译错误;为什么呢?
}
return s;
}就不出编译期错误了
http://baike.baidu.com/view/1859857.htm
上面回答的几个人也都是不明白的。
不用感谢组长,结贴吧。