`

要搞清楚对象和对象的引用

 
阅读更多

有很多程序员还在写这样的代码

User user = new User();
user = userDao.selectUserById(id);
user.getName();

 

他的理由是,为了防止执行user.getName()时发生空指针异常,所以先new出一个对象,这样即使从数据库里查询不到对应id的用户,程序也不会报错。

 

这个想法真的很神奇,而事实是第一句代码是废话,你首先创建了一个对象new User()我们称它为用户A,然后创建了一个对象的引用User user指向用户A,紧接着查询数据库userDao.selectUserById(id)返回另一个对象用户B,最后让对象的引用user重新指向了用户B,用户B如果null,第三句空指针异常。

4
1
分享到:
评论

相关推荐

    java的传值与传引用详解

    既然争论中提到了引用这个东西,为了搞清楚这个问题,我们必须要知道引用是什么。  简单的说,引用其实就像是一个对象的名字或者别名 (alias),一个对象在内存中会请求一块空间来保存数据,根据对象的大小,它可能...

    Python中对象的引用与复制代码示例

    为了理解这个问题,有个基本概念需要搞清楚。 Python没有「变量」,我们平时所说的变量其实只是「标签」,是引用。 python中,”a=b”表示的是对象a引用对象b,对象a本身没有单独分配内存空间(重要:不是复制!),它...

    C#23种设计模式_示例源代码及PDF

    某些情况下,客户 不想 或者不能够直接引用一个对象, 代理对象可以在客户和目标对象直接起到中介的作用。 客户 端分辨不出代理主题对象与真实主题对象。代理模式可以并不知道真 正的被代理对象,而 仅仅持有一个被...

    Python中的深拷贝和浅拷贝详解

    要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) 【变量-对象-引用】 在Python中一切都是对象,比如说:3, 3.14, ‘Hello’, [1,2,3,4],{...

    net学习笔记及其他代码应用

    答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 38.abstract class和interface有什么区别? 答: 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为...

    C++中Reference与指针(Pointer)的使用对比

    虽然多数C++程序员对于何时使用reference何时使用pointer 都会有一些直觉,但总还是会有些时候搞不清楚。如果你想要建立一个关于使用reference使用的清晰有理的概念, 又有必要了解到底reference和pointer有什么不同...

    Java 向下转型的意义

    一直搞不清楚向下转型的意义和用途,不清楚其实是不会,那开发的过程肯定也想不到用向下转型。  其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也比较好理解。  但是向下转型,会...

    windows 程序设计

    Microsoft Windows版本3.1是1992年4月发布的,其中包括的几个重要特性是TrueType字体技术(给Windows带来可缩放的轮廓字体)、多媒体(声音和音乐)、对象连结和嵌入(OLE:Object Linking and Embedding)和通用...

    逆向工程实验报告.docx

    (3)查找是否使用了其他人所写的代码,搞清楚在应用程序的哪里使用了受保护的代码和技术,这对于保护知识产权不被滥用是很重要的。逆向工程技术可用于检测应用程序是否包含所关心的软件单元。(4)寻找对共享软件和...

    AutoCode代码生成器(JAVA版)

    您是不是因为java的开发和维护繁琐而烦恼,目前政府机关、企业大都要求用java来开发项目,本软件将彻底解决您的后顾之忧,通过本软件的自动生成功能,生成的java代码规范、全部开源,不存在用隐含的内容,全部代码...

    AutoCode代码生成器(ASP.NET版)

    您是不是因为ASP.NET的开发和维护繁琐而烦恼,微软的开发工具更新速度、开发技巧是成多元化的趋势,ASP.NET以其灵活多变的开发模式,深受广大开发人员的喜爱,灵活多变的开发模式有其利的一面,也有其不好的地方,...

    autocode中文java版

    如果您是经常使用Hibernate或其他插件的java开发人员,一定会为Hibernate或其他插件的配置部署问题而搞懵,这些类型的插件有个最大的问题是其核心操作均是由该插件的内部完成,对开发人员来说是个黑匣子(一般用户...

    Axure培训教程.pptx

    降低沟通时间 不用等到网页程序都开发好, Axure RP产出的原型页面就可以让使用者提早进行测试了 页面可直接连结,动线容易理解, 直接体验原型 以清楚的网站原型来确认所有需求,不担心执行团队没搞懂 Axure培训教程...

    javascript函数的解释

    点击后变成红色,其它为绿色……这里面最后需要搞清楚的就是一个先后问题,点击下一个按一个钮,显示为红色,前一个按钮由红变绿;其实在这里我不们不用考虑前面的那个按钮倒底是哪一个,点击下一个按钮后,我们先...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    9.3 位置和符号引用 229 9.3.1 位置标记 229 9.3.2 符号标记 230 9.3.3 FOR循环 231 9.4 返回更新后的行 232 9.5 求解顺序 233 9.5.1 行求解顺序 233 9.5.2 规则求解顺序 235 9.6 聚合 237 9.7 迭代 237 ...

    Linux操作系统基础教程

    第三讲 Linux下的网络服务,配置问题和常用工具.................................................................24 一.Linux下的网络服务.....................................................................

Global site tag (gtag.js) - Google Analytics