论坛首页 Java企业应用论坛

关于JAVA单例模式

浏览 52923 次
精华帖 (1) :: 良好帖 (2) :: 新手帖 (7) :: 隐藏帖 (12)
作者 正文
   发表时间:2012-03-20  
ironsabre 写道
To:xuehua1987

a == null;
if (a==null) no error. --这不算是对a进行方法调用。明白吗??
if (a.equals(xxx)) --这算是对a进行方法调用,所以会报错。nullpoint.

结论:你没写过代码。

xuehua1987 写道
xuehua1987 写道
freish 写道
ironsabre 写道
你真的写过代码吗??请你说实话。
你笨我可以理解,但你再笨你可以写两行代码验证一下吗?
-------------------------------------------------
null放在前面就是为了避免变量为空时 引了空指针异常
如: if(a==null) 如果a 真为空时,现在就相当用调用了变量a的方法,a 都为空了还调用他的方法,当然会引发空指针异常了,但写成if(null==a)就不会了.


亲,这个问题要深层次的理解,要在程序运行时才可能出现的,你都一个变量显示的赋值了,当然不是空指针了.

public class Test {
	public static void main(String[] args) {
		Object a = null;
		if(a == null) {
			System.out.println("abc");
		}
	}
}



执行一下去吧,抛异常了哥跟你姓
不过初学者哥不怪

“如果a 真为空时,现在就相当用调用了变量a的方法”,教你的老师你去揍他一顿吧,没见过这么无知的。无知不可怕,可怕的是还出来误人子弟



public static void main(String[] args) {
String test = null ;
if(test.equals(null)) {
System.out.println("------");
}
System.out.println("++");
}
你认为真短代码不报异常?


我们既然声明了变量,肯定会使用该变量的,或者使用该变量的方法,并不是a==null会报异常...唉...





if(a==null) 如果a 真为空时,现在就相当用调用了变量a的方法

 

不知道哪个家伙说的

 

典型的小学语文都没学好

 

0 请登录后投票
   发表时间:2012-03-20  
soongbo 写道
关于单例模式,请参考该文:http://soongbo.iteye.com/admin/blogs/1343683

千年不变的讨论一个问题。。。这位老兄已经把所有的单例模式讲清楚了。
0 请登录后投票
   发表时间:2012-03-21  
xuehua1987 写道
洪帮主 写道
给你看看吧。希望能帮上。
public final class DataSourceUtil {
private static DataSource dataSource;
static {
initDataSource();
}
/**
* 初始化数据源
* @throws ExceptionInInitializerError
*/
private static void initDataSource() throws ExceptionInInitializerError {
try {
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("java:/comp/env/jdbc/mysql");
} catch (NamingException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* 获得数据源
* @return
*/
public static DataSource getDataSource() {
if (null == dataSource) {
synchronized(dataSource) {
if (null == dataSource) initDataSource();
}
}
return dataSource;
}

private DataSourceUtil() {}
}





equals 只是比较值是否相同
而==则是比较两个变量 是不是同一个变量,也应时是说
要看看这两个变量是不是引用的同一个地址,
java 中只有引用地址相同的两个变量才被视为==
如果明白值传递与地址传递的话,这个问题应该不难理解

null放在前面就是为了避免变量为空时 引了空指针异常
如: if(a==null) 如果a 真为空时,现在就相当用调用了变量a的方法,a 都为空了还调用他的方法,当然会引发空指针异常了,但写成if(null==a)就不会了


if(a==null) a为空好像也没有调用a的方法啊?==是比较运算符怎么会报空指针呢?求答案?
0 请登录后投票
   发表时间:2012-03-21   最后修改:2012-03-21
Fkron 写道
freish 写道
xuehua1987 写道
wumingshi 写道
在多线程环境下有可能出现2个实例的情况。如果占用资源不大,可以直接在声明处创建,利用类加载的线程安全来保证;否则需要做一个sync。

另外,不要再用 if(null==smothing),应该if(something==null),这是几百年前的做法了,现代的编译器已经可以探测这样的错误了。



在表准的编程规范中应该是if(null==smothing)才正确
因为这样在程序中就可以避免空指针异常。

Object smothing = null
if(smothing == null) {
//
}

上面的代码会空指针?扯淡



   String str = null;
   System.out.println(str.equals("")); //亲。这亲会报空指针吗?
   System.out.println("".equals(str)); //呐又这样呢?




System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法
  System.out.println("".equals(str)); //呐又这样呢?
这个是不会报的,空串不等于空值,是可以调用空串的方法的
0 请登录后投票
   发表时间:2012-03-21  
wujiazhao88 写道
jdk 1.5 以后, 使用enum最方便啦
public enum Singleton{
  INSTANCE;
  //biz implements...
  //biz codes..
  public static Singleton getInstance(){
    return INSTANCE;
  }
}

恩,这个方法好,不过好像不是这样实现的吧?
0 请登录后投票
   发表时间:2012-03-22   最后修改:2012-03-22
引用
System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法
  System.out.println("".equals(str)); //呐又这样呢?
这个是不会报的,空串不等于空值,是可以调用空串的方法的



又一个 “==” 和 method  都不分的,my god!
人家说的是“==”,不是equals,擦亮眼睛,睁大眼睛看看!
这两者能一样么!
0 请登录后投票
   发表时间:2012-03-22  
freish 写道
引用
System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法
  System.out.println("".equals(str)); //呐又这样呢?
这个是不会报的,空串不等于空值,是可以调用空串的方法的



又一个 “==” 和 method  都不分的,my god!
人家说的是“==”,不是equals,擦亮眼睛,睁大眼睛看看!
这两者能一样么!


但你写的是equals,我只说你写的这个有问题
0 请登录后投票
   发表时间:2012-03-22  
悟⑤道 写道
freish 写道
引用
System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法
  System.out.println("".equals(str)); //呐又这样呢?
这个是不会报的,空串不等于空值,是可以调用空串的方法的



又一个 “==” 和 method  都不分的,my god!
人家说的是“==”,不是equals,擦亮眼睛,睁大眼睛看看!
这两者能一样么!


但你写的是equals,我只说你写的这个有问题

那,不是我写的,一个shability写的
0 请登录后投票
   发表时间:2013-02-26  
public class Singleton {

private Singleton() {

}

private static volatile Singleton singleton;

public static Singleton getInstance() {
if (null == singleton) {
synchronized (Singleton.class) {
if (null == singleton)
singleton = new Singleton();
}
}
return singleton;
}
}

这样写比较好。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics