精华内容
下载资源
问答
  • 系统错误null是什么意思 Java中NULL用法的简单示例: public Employee getByName(String name) { int id = database.find(name); if (id == 0) { return null; } return new Employee(id); } 这种方法有什么...

    系统错误null是什么意思

    Java中NULL用法的简单示例:

    public Employee getByName(String name) {
      int id = database.find(name);
      if (id == 0) {
        return null;
      }
      return new Employee(id);
    }

    这种方法有什么问题?

    它可能返回NULL而不是对象-这是错误的。 在面向对象的范例中, NULL是一种可怕的做法,应不惜一切代价避免使用NULL 已经有一些关于这个意见已经发布,包括空引用,数十亿美元的错误由Tony Hoare的介绍和整个对象思想由大卫-韦斯特的书。

    在这里,我将尝试总结所有的参数,并举例说明如何避免使用NULL并使用适当的面向对象的结构代替它们。

    基本上,可以使用NULL两种替代方法。

    第一个是Null Object设计模式(最好的方法是使其成为常数):

    public Employee getByName(String name) {
      int id = database.find(name);
      if (id == 0) {
        return Employee.NOBODY;
      }
      return Employee(id);
    }

    第二种可能的替代方法是在无法返回对象时抛出异常 ,从而快速失败

    public Employee getByName(String name) {
      int id = database.find(name);
      if (id == 0) {
        throw new EmployeeNotFoundException(name);
      }
      return Employee(id);
    }

    现在,让我们看看反对NULL的参数。

    除了上面提到的Tony Hoare的演示文稿和David West的书以外,我在写这篇文章之前阅读了这些出版物:Robert Martin的Clean Code ,Steve McConnell的Code Complete ,John Sonmez的“ No”到“ Null”是否返回无效的不良设计? StackOverflow上的讨论。

    临时错误处理

    每次获取对象作为输入时,都必须检查它是否为NULL或有效的对象引用。 如果忘记检查,则NullPointerException (NPE)可能会在运行时中断执行。 因此,您的逻辑将受到多次检查以及if / then / else分支的污染:

    // this is a terrible design, don't reuse
    Employee employee = dept.getByName("Jeffrey");
    if (employee == null) {
      System.out.println("can't find an employee");
      System.exit(-1);
    } else {
      employee.transferTo(dept2);
    }

    这就是应该用C和其他命令式程序语言处理异常情况的方式。 OOP引入了异常处理,主要是为了摆脱这些临时的错误处理块。 在OOP中,我们让异常冒泡直到它们到达应用程序范围的错误处理程序,并且我们的代码变得更加简洁明了:

    dept.getByName("Jeffrey").transferTo(dept2);

    考虑NULL引用是过程编程的继承,请改用1)Null对象或2)异常。

    模棱两可的语义

    为了明确传达其含义,必须将函数getByName()命名为getByNameOrNullIfNotFound() 每个返回对象或NULL函数都应该发生相同的情况。 否则,代码阅读器不可避免地会产生歧义。 因此,为了保持语义的明确性,应为函数指定更长的名称。

    要摆脱这种歧义,请始终返回真实对象,空对象或引发异常。

    有人可能会争辩说,为了性能起见,我们有时必须返回NULL 例如,当地图中没有这样的项目时,Java中接口Map get()方法将返回NULL

    Employee employee = employees.get("Jeffrey");
    if (employee == null) {
      throw new EmployeeNotFoundException();
    }
    return employee;

    由于Map使用NULL ,因此此代码仅搜索地图一次。 如果我们将Map重构,以便其方法get()在未找到任何内容的情况下将引发异常,则我们的代码将如下所示:

    if (!employees.containsKey("Jeffrey")) { // first search
      throw new EmployeeNotFoundException();
    }
    return employees.get("Jeffrey"); // second search

    显然,这种方法的速度是第一种方法的两倍。 该怎么办?

    Map界面(对其作者没有冒犯)具有设计缺陷。 它的方法get()应该一直返回一个Iterator以便我们的代码如下所示:

    Iterator found = Map.search("Jeffrey");
    if (!found.hasNext()) {
      throw new EmployeeNotFoundException();
    }
    return found.next();

    顺便说一句,这正是C ++ STL map :: find()方法的设计方式。

    计算机思维与对象思维

    有人知道Java中的对象是指向数据结构的指针,而NULL是指向0x00000000的指针(在Intel x86处理器中为0x00000000 if (employee == null)可以理解if (employee == null)语句。

    但是,如果您开始将其作为一个对象来考虑,那么这种说法就没有意义了。 这是从对象角度看我们的代码的样子:

    - Hello, is it a software department?
    - Yes.
    - Let me talk to your employee "Jeffrey" please.
    - Hold the line please...
    - Hello.
    - Are you NULL?

    对话中的最后一个问题听起来很奇怪,不是吗?

    相反,如果他们在我们请求与Jeffrey通话后挂断电话,则会给我们造成麻烦(异常)。 那时,我们尝试再次致电或通知主管,我们无法联系Jeffrey并完成更大的交易。

    或者,他们可以让我们与不是Jeffrey的其他人交谈,但是可以帮助我们解决大多数问题,或者在我们需要“特定于Jeffrey”的东西时拒绝帮助(空对象)。

    缓慢失败

    上面的代码不是快速失败 ,而是尝试缓慢消失,并杀死其他人。 它没有让所有人都知道出了什么问题并且应该立即开始异常处理,而是向客户端隐藏了此故障。

    该参数与上面讨论的“临时错误处理”非常接近。

    最好使代码尽可能脆弱,让代码在必要时中断。

    使您的方法对它们操作的数据极为苛刻。 如果提供的数据不足或根本不适合该方法的主要使用场景,请让他们通过引发异常来抱怨。

    否则,返回一个Null对象,该对象暴露出一些常见行为,并在所有其他调用上引发异常:

    public Employee getByName(String name) {
      int id = database.find(name);
      Employee employee;
      if (id == 0) {
        employee = new Employee() {
          @Override
          public String name() {
            return "anonymous";
          }
          @Override
          public void transferTo(Department dept) {
            throw new AnonymousEmployeeException(
              "I can't be transferred, I'm anonymous"
            );
          }
        };
      } else {
        employee = Employee(id);
      }
      return employee;
    }

    可变和不完整的对象

    通常, 强烈建议设计时牢记不变性的对象。 这意味着对象在实例化过程中会获得所有必需的知识,并且在整个生命周期中都不会改变其状态。

    通常,在延迟加载中使用NULL值,以使对象不完整且可变。 例如:

    public class Department {
      private Employee found = null;
      public synchronized Employee manager() {
        if (this.found == null) {
          this.found = new Employee("Jeffrey");
        }
        return this.found;
      }
    }

    该技术尽管被广泛使用,但在OOP中却是一种反模式。 主要是因为它使对象负责计算平台的性能问题,而这是Employee对象不应该意识到的。

    对象不必管理状态并公开其与业务相关的行为,而必须处理其自身结果的缓存-这就是延迟加载的意义所在。

    缓存不是员工在办公室里做的事情,对吗?

    解决方案? 请勿以上述原始方式使用延迟加载。 相反,请将此缓存问题移至应用程序的另一层。

    例如,在Java中,您可以使用面向方面的编程方面。 例如, jcabi-aspects具有@Cacheable批注,用于缓存方法返回的值:

    import com.jcabi.aspects.Cacheable;
    public class Department {
      @Cacheable(forever = true)
      public Employee manager() {
        return new Employee("Jacky Brown");
      }
    }

    我希望这种分析令人信服,您将停止NULL您的代码!

    相关文章

    您可能还会发现以下有趣的帖子:

    翻译自: https://www.javacodegeeks.com/2014/09/why-null-is-bad.html

    系统错误null是什么意思

    展开全文
  • localdiskto disk to imade from imagepartitionto partition to image from imagecheckimage file disk这些是什么意思? disk 是对硬盘操作项;to disk 硬盘对硬盘克隆 to image 把硬盘内容作成镜像文件 from ...

    local
    disk
    to disk to imade from image
    partition
    to partition to image from image
    check
    image file
    disk
    这些是什么意思?

    disk 是对硬盘操作项;to disk 硬盘对硬盘克隆 to image 把硬盘内容作成镜像文件
    from image 把镜像文件恢复到硬盘
    partition是对分区操作;to partition分区对分区克隆 to image把分区内容作成镜像文件
    from image 把镜像文件恢复到分区
    local 本地、本机 check 是检查 image 镜像 file 文件 disk 硬盘

    GHOST本身并不能分区,但其软件包中带有分区工具。所以你装系统时能对你的硬盘进行分区。

    展开全文
  • 操作系统的位数是什么意思

    万次阅读 2008-07-25 10:33:00
    “0”和“1”就是二进制代码,线路上有电信号,则计1,没有电信号则为0。8位机有8条线路,每个时钟周期有8个电信号,组成一个字节。所以,随8位处理器上升至64位处理器,每个时钟周期传送1个字节到8个字节,关联到...
    64位技术 
    8位处理器、16位处理器、32位处理器和64位处理器,其计数都是8的倍数。它表示一个时钟周期里,处理器处理的二进制代码数。“0”和“1”就是二进制代码,线路上有电信号,则计做1,没有电信号则为0。8位机有8条线路,每个时钟周期有8个电信号,组成一个字节。所以,随8位处理器上升至64位处理器,每个时钟周期传送1个字节到8个字节,关联到时钟速度提高到若干个千兆赫之后,处理器处理信息的能力越来越大。



    这里的64位技术是相对于32位而言的,这个位数指的是CPU GPRs(General-Purpose Registers,通用寄存器)的数据宽度为64位,64位指令集就是运行64位数据的指令,也就是说处理器一次可以运行64bit数据。64bit处理器并非现在才有的,在高端的RISC(Reduced Instruction Set Computing,精简指令集计算机)很早就有64bit处理器了,比如SUN公司的UltraSparc Ⅲ、IBM公司的POWER5、HP公司的Alpha等。

    64bit计算主要有两大优点:可以进行更大范围的整数运算;可以支持更大的内存。不能因为数字上的变化,而简单的认为64bit处理器的性能是32bit处理器性能的两倍。实际上在32bit应用下,32bit处理器的性能甚至会更强,即使是64bit处理器,目前情况下也是在32bit应用下性能更强。所以要认清64bit处理器的优势,但不可迷信64bit。

    目前主流CPU使用的64位技术主要有AMD公司的AMD64位技术、Intel公司的EM64T技术、和Intel公司的IA-64技术。其中IA-64是Intel独立开发,不兼容现在的传统的32位计算机,仅用于Itanium(安腾)以及后续产品Itanium 2,一般用户不会涉及到,因此这里仅对AMD64位技术和Intel的EM64T技术做一下简单介绍。

    AMD64位技术
    AMD64的位技术是在原始32位X86指令集的基础上加入了X86-64扩展64位X86指令集,使这款芯片在硬件上兼容原来的32位X86软件,并同时支持X86-64的扩展64位计算,使得这款芯片成为真正的64位X86芯片。这是一个真正的64位的标准,X86-64具有64位的寻址能力。

    X86-64新增的几组CPU寄存器将提供更快的执行效率。寄存器是CPU内部用来创建和储存CPU运算结果和其它运算结果的地方。标准的32-bit x86架构包括8个通用寄存器(GPR),AMD在X86-64中又增加了8组(R8-R9),将寄存器的数目提高到了16组。X86-64寄存器默认位64-bit。还增加了8组128-bit XMM寄存器(也叫SSE寄存器,XMM8-XMM15),将能给单指令多数据流技术(SIMD)运算提供更多的空间,这些128位的寄存器将提供在矢量和标量计算模式下进行128位双精度处理,为3D建模、矢量分析和虚拟现实的实现提供了硬件基础。通过提供了更多的寄存器,按照X86-64标准生产的CPU可以更有效的处理数据,可以在一个时钟周期中传输更多的信息。

    EM64T技术
    Intel官方是给EM64T这样定义的:EM64T全称Extended Memory 64 Technology,即扩展64bit内存技术。EM64T是Intel IA-32架构的扩展,即IA-32e(Intel Architectur-32 extension)。IA-32处理器通过附加EM64T技术,便可在兼容IA-32软件的情况下,允许软件利用更多的内存地址空间,并且允许软件进行32 bit线性地址写入。EM64T特别强调的是对32 bit和64 bit的兼容性。Intel为新核心增加了8个64 bit GPRs(R8-R15),并且把原有GRPs全部扩展为64 bit,如前文所述这样可以提高整数运算能力。增加8个128bit SSE寄存器(XMM8-XMM15),是为了增强多媒体性能,包括对SSE、SSE2和SSE3的支持。

    Intel为支持EM64T技术的处理器设计了两大模式:传统IA-32模式(legacy IA-32 mode)和IA-32e扩展模式(IA-32e mode)。在支持EM64T技术的处理器内有一个称之为扩展功能激活寄存器(extended feature enable register,IA32_EFER)的部件,其中的Bit10控制着EM64T是否激活。Bit10被称作IA-32e模式有效(IA-32e mode active)或长模式有效(long mode active,LMA)。当LMA=0时,处理器便作为一颗标准的32 bit(IA32)处理器运行在传统IA-32模式;当LMA=1时,EM64T便被激活,处理器会运行在IA-32e扩展模式下。

    目前AMD方面支持64位技术的CPU有Athlon 64系列、Athlon FX系列和Opteron系列。Intel方面支持64位技术的CPU有使用Nocona核心的Xeon系列、使用Prescott 2M核心的Pentium 4 6系列和使用Prescott 2M核心的P4 EE系列。
    展开全文
  • 平时帮人家装系统时经常使用,也没有留意使用时出现的问题,今天有人问我Ghost备份中出现的NO FAST HIGH是什么意思? 下面就此问题个解答。  当我们用Ghost备份的时候,会弹出一个对话框,上面有三个按钮,分别...

        Ghost是一个系统备份/恢复工具软件,相信很多对装机有兴趣的朋友都用过此软件,此软件是英文版的,用起来比较简单。

    平时帮人家装系统时经常使用,也没有留意使用时出现的问题,今天有人问我Ghost备份中出现的NO FAST HIGH是什么意思?

    面就此问题做个解答。

        当我们用Ghost备份的时候,会弹出一个对话框,上面有三个按钮,分别是No、Fast、High,这实际上是提醒我们选择备份文件的压缩率,No不压缩,Fast低压缩, High高压缩。压缩率越高,制作出来的备份文件容量越小,但Ghost压缩的时间也就越长。一般选High高压缩,速度慢点,但可以压缩50%。

        实际使用过程中根据您的实际情况自行选择就是了,对于Ghost的内容是没有影响的,只是所花费的时间和所占用的容量问题。

     

    展开全文
  • 进程是什么意思?

    千次阅读 2013-01-17 14:22:20
    在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(如:应用程序在运行时所需的变量数据、需要引用的DLL文件等),当应用程序被运行两次时,容器里的东西并不会被倒掉,系统会找一个新的...
  • 端到端是什么意思

    千次阅读 2018-11-15 03:26:19
    端到端是什么意思
  • 共识机制是什么意思

    千次阅读 2018-08-29 15:24:56
    共识机制是什么意思?   在区块链的世界当中,我们应该经常听到一个词叫做共识机制,很多人都说,“尽管密码学占了区块链的半壁江山,但是共识机制却是整个区块链的灵魂。“那么共识机制究竟是什么呢?   首先...
  • 但很多人对于IPTV是什么还是有很多疑问,其实对于普通消费者来说不需要了解那么清楚,抠那些名词释义。只需要知道这是一种和传统方式相比,可以观看电视节目的方式就好了。 不过任何新的事物替代老的,肯定有其先进...
  • 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI各是什么意思
  • 易飞ERP系统中,最低补量、补货位量、最小用量、领用倍量、批量之间分别代表什么意思,其中的公式计算逻辑是什么?最低补量:采购时所谓补货的最低数量–即最小订单量(MOQ)。补货倍量:所补货的数量是该量的倍数–即...
  • Hook是什么意思

    千次阅读 2019-10-30 18:27:25
    作为一个程序猿应该会经常遇到hook这个词,尤其是逆向工程的人。对于一个小白来说,根本就不明白这帮人在说些什么,咱也不敢说咱也不敢问,默默的百度就完事儿了。 hook的中文翻译是钩子的意思,对于一个会耍帅的...
  • CRUD是什么意思

    万次阅读 2018-05-14 08:14:01
    CRUD是指在计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中DataBase或者持久层的基本操作功能。 CRUD说的就是增查改删 C:Create ...
  • ukey证书是什么意思_什么是证书?

    千次阅读 2020-07-12 15:45:19
    但是什么是证书,为什么它们会过期,又为什么会产生如此大的影响? 要回答这些问题,让我们退后一步,看看为什么首先需要证书。 让我们假设两个人,爱丽丝和鲍勃,想要交换秘密信息。 让我们进一步说,鲍勃实际上...
  • IP地址,子网掩码、默认网关,DNS服务器是什么意思? IP地址,子网掩码、默认网关,DNS服务器是什么意思? (一)问题解析 001. 问:IP地址,子网掩码,默认网关,DNS服务器,有什么区别呀?我知道没有IP地址就不能...
  • 什么是SDK? SDK是什么意思

    万次阅读 多人点赞 2018-07-04 10:18:51
    其实很简单,SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。具体到...
  • 1、套打,就是套用一定格式去打印,一般情况下,是指已经有了纸质的模板,然后在指定的位置上...7、就比如说税票,格式已经是固定的,只有一些要输入数字的地方是空的,现在把这样的税票为打印纸,把数据打印在税票上。
  • 1.Q:什么是系统时钟?什么是时钟系统? A:通常所说的系统时钟就是指时钟系统,它是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。 2.Q:时钟系统有什么作用? A:时钟是...
  • 经过多年的猜测和谣言,中国科技巨头华为在2019年正式发布了其Harmony OS操作系统。可以说,提出的问题多于回答的问题。它是如何工作的?它解决什么问题?这是华为与美国政府之间当前仇恨的产物吗? 是否基于...
  • 签入/签出是什么意思

    万次阅读 2013-06-17 21:10:14
    签入/签出是什么意思? 签入和签出在很多文档管理系统中是很普遍的名词,SharePoint也不例外。它们的目的是防止多人同时编辑同一部分内容(在SharePoint中,指列表项目或文件)造成冲突。签入描述描述了添加或修改...
  • 缺省是什么意思

    千次阅读 2017-05-13 10:19:00
    连起来这个词就是因为缺席而导致过错的意思,通俗来说就是因为什么都没导致了自己的错失——什么意思呢?因为有些事你是要的,不反而是错误的,比如说履行合约,没有去履行合约的内容,就是违约。对,default...
  • linux下的etc是什么意思

    千次阅读 2018-09-27 12:25:52
    /etcetc不是什么缩写,是and so on的意思 来源于 法语的 et cetera 翻译成中文就是 等等 的意思. 至于为什么在/etc下面存放配置文件, 按照原始的UNIX的说法(linux文件结构参考UNIX的教学实现MINIX) 这下面放的都是...
  • SMP是什么意思

    千次阅读 2009-09-26 19:08:00
    SMP:是Symmetric Multi Processing的简称,意为对称多处理系统,内有许多紧耦合多处理器,这种系统的最大特点就是共享所有资源。另外与之相对立的标准是MPP (Massively Parallel Processing),意为大规模并行处理...
  • Recovery是什么意思?对于很多刚接触到安卓手机的同学这是一件比较头疼的事情。那么究竟Recovery是什么意思?他又可以帮助我们一些什么呢?小编今天就给大家一个比较详细的recovery功能详解以及刷机教程。 ...
  • 嵌入式培养是什么意思 看完秒懂

    千次阅读 2019-09-14 09:26:05
    很多人肯定会有疑问,嵌入式培养是什么意思?说白了就是嵌入式人才培养,对于嵌入式,大家应该不陌生,以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的...
  • 什么是URL?URL是什么意思

    万次阅读 多人点赞 2013-09-23 17:08:07
    什么是URL? URL是Uniform Resource Locator的缩写,即统一资源定位系统,也就是我们通常所说的网址。URL是在Internet的WWW服务程序上用于指定信息位置的表示方法,它指定了如HTTP或FTP等Internet协议,是惟一能够...
  • 什么是网络终端,这个“终端”是什么意思? 名字术语太让人脑火,网络终端里的“终端”到底是什么意思?怎么理解?请用普通口语给解释下,术语坚决不要。 还是不明白,不是说手机也可以称为“终端”么?手机有CPU有...
  • RPA 软件技术是什么意思

    千次阅读 2019-07-19 10:29:18
    RPA 软件是一种机器人流程自动化技术,它允许通过配置自动化软件 (也叫“机器人”...它比人类的更好,一个 RPA 软件机器人不会睡觉,不犯错误,成本比员工少很多。 RPA 软件相对传统技术有哪些优点呢? 相对其他传...
  • spring的依赖注入是什么意思

    万次阅读 多人点赞 2015-11-22 21:24:33
    依赖注入式什么意思

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 635,470
精华内容 254,188
关键字:

做系统是什么意思