锁定老帖子 主题:关于JAVA单例模式
精华帖 (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会报异常...唉...
不知道哪个家伙说的
典型的小学语文都没学好
|
|
返回顶楼 | |
发表时间:2012-03-20
soongbo 写道 关于单例模式,请参考该文:http://soongbo.iteye.com/admin/blogs/1343683
千年不变的讨论一个问题。。。这位老兄已经把所有的单例模式讲清楚了。 |
|
返回顶楼 | |
发表时间: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的方法啊?==是比较运算符怎么会报空指针呢?求答案? |
|
返回顶楼 | |
发表时间: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)); //呐又这样呢? 这个是不会报的,空串不等于空值,是可以调用空串的方法的 |
|
返回顶楼 | |
发表时间:2012-03-21
wujiazhao88 写道 jdk 1.5 以后, 使用enum最方便啦
public enum Singleton{ INSTANCE; //biz implements... //biz codes.. public static Singleton getInstance(){ return INSTANCE; } } 恩,这个方法好,不过好像不是这样实现的吧? |
|
返回顶楼 | |
发表时间:2012-03-22
最后修改:2012-03-22
引用 System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法 System.out.println("".equals(str)); //呐又这样呢? 这个是不会报的,空串不等于空值,是可以调用空串的方法的 又一个 “==” 和 method 都不分的,my god! 人家说的是“==”,不是equals,擦亮眼睛,睁大眼睛看看! 这两者能一样么! |
|
返回顶楼 | |
发表时间:2012-03-22
freish 写道 引用 System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法 System.out.println("".equals(str)); //呐又这样呢? 这个是不会报的,空串不等于空值,是可以调用空串的方法的 又一个 “==” 和 method 都不分的,my god! 人家说的是“==”,不是equals,擦亮眼睛,睁大眼睛看看! 这两者能一样么! 但你写的是equals,我只说你写的这个有问题 |
|
返回顶楼 | |
发表时间:2012-03-22
悟⑤道 写道 freish 写道 引用 System.out.println(str.equals("")); //亲。这亲会报空指针吗?
这个是会报空指针的,明显调用了null的方法 System.out.println("".equals(str)); //呐又这样呢? 这个是不会报的,空串不等于空值,是可以调用空串的方法的 又一个 “==” 和 method 都不分的,my god! 人家说的是“==”,不是equals,擦亮眼睛,睁大眼睛看看! 这两者能一样么! 但你写的是equals,我只说你写的这个有问题 那,不是我写的,一个shability写的 |
|
返回顶楼 | |
发表时间: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; } } 这样写比较好。 |
|
返回顶楼 | |