- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章基于java中的null类型---有关null的9件事由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
今天听到一个问题,java中的null类型,null竟然是一种类型 。
java语言中有两种类型,一种是基本类型,还有一种是引用类型。还有一个特殊的null类型即表达式null的类型,它没有名字.
因为null类型没有名字,所以不可能声明为null类型的变量或者转换为null类型.
null引用是null类型表达式唯一可能的值.
null引用可以转换为任意引用类型.
实际上,程序员可以忽略null类型,可以认为null仅仅是一个可以称为任何引用类型的特殊符号.
一个null类型(null(空)引用是这种类型的唯一的一个值),可以赋值给任意类型,将返回一个该类型对象的空引用(其实还是null).
对于java程序员来说,null是令人头痛的东西。时常会受到空指针异常的骚扰。所以要好好了解一下null,确保正确使用null.
它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别他们然后报错.
现在,当你在敲代码的时候,IDE可以纠正这个错误.
int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将false作为自己的默认值,java中的任何引用变量都将null作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你).
这对静态和非静态的object来说都是正确的。就像你在这里看到的这样,myObj定义为静态引用,所以可以在主方法里直接使用它。注意:主方法是静态方法,不可使用非静态变量.
null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型, 。
可以看到idea并没有报错,可以正常编译。在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常.
不能将null赋值给基本类型变量,如int、double、float、boolean.
可以看到,直接将null赋值给基本类型会出现编译错误。但将null赋值给包装类object,然后将object赋给各自的基本类型,编译不会报错,但运行会空指针,这是自动拆箱导致的.
在java拆箱生成基本数据类型时候都会抛出一个空指针异常.
这段代码看起来非常简单并且没有错误。你所做的一切是找到一个数字在数组中出现了多少次, 这是Java数组中典型的寻找重复的技术.
开发者首先得到以前的数值,然后再加一,最后把值放回Map里。程序员可能会以为,调用put方法时,自动装箱会自己处理好将int装箱成Interger,但是他忘记了当一个数字没有计数值的时候,HashMap的get()方法将会返回null,而不是0,因为Integer的默认值是null而不是0.
当把null值传递给一个int型变量的时候自动装箱将会返回空指针异常。设想一下,如果这段代码在一个if嵌套里,没有在测试环境下运行,但是你一旦放在生产环境里,BOOM:-),是不是美兹兹.
这是instanceof操作一个很重要的特性,使得对强制类型转换检查很有用 。
因为静态方法使用静态类型绑定,不会抛空指针异常 。
这时方法可以接收任何引用类型,如 public void print(Object obj) 可以这样调用print(null).编译可以通过,但结果就取决去你的方法了。这个例子中的print方法,不会抛出空指针异常,只是退出,业务逻辑允许的话,推荐使用null安全的方法.
但是不能使用其他算法或者逻辑操作,如大于、小于。与SQL不同,java中的null==null会返回true; 。
避免空指针异常可以使你的代码变的null安全.
敲黑板,划重点!!!!——————>null是任何一个引用类型变量的默认值,在java中不能使用null引用来调用任何instance方法或者instance变量.
对于一条实例化语句:
1
|
Student stu=
new
Student();
//语句1
|
先是声明一个名为stu的Student类型变量,然后利用new关键字为其创建实例.
与下面的语句相比较:
1
|
Student stu;
//语句2
|
语句2是声明一个类型为Student 的变量stu,从表述习惯上讲stu 是实例变量,但实际上此时stu并未成为一个真正的实例,它仅仅只是一个变量名字.
1
|
stu=
new
Student();
//语句3
|
语句3的执行结果就使得stu真正成为了一个Student实例,它指向了内存中的某块地址空间.
语句1是一步到位,定义了一个实例变量并同时赋值.
为了明确地表示那些仅有名字而没有实例空间的变量的具体内容,Java引入了关键字null, null 就是表示“空”的意思,是绝对意义上的空,这个空指的是不存在的意思。为了更好地理解null是什么,这里举个例子
有个准备进人施工阶段的楼字建筑项目,设计图纸已经确定了,建筑设计师们正在讨论某间单元的装修效果时,该单元的房号已经命名,假设为A901,此时,A901就是null的,它相当于上面写的语句2(一个名为stu的Student),这里它只是一个名为A901的房屋单元.
而当该楼字项目已经施工完毕的时候,则A901就地在它所处的位置上真正地占有了一块物理空间,此时它就是非null(非空)了,也就是说它拥有了一块实例化的空间。就算这间房屋里头没有摆放东西,它也是存在的。我们千万不能将日常表达语“一间空的房问”等同于Java语言中的"房间为空”.
在Java中,假设房间类为Room,则:
1
2
|
Room room=
null
;
//房间为空,房间room只是一个名字,实际不存在。
Room room=
new
Room();
//一间空的房间,这间房里没东西。
|
null就是空,抽象意义上的空,空就是无的概念.
对于null的理解,应该是这样的:仅有一个变量名,但实际上不存在.
(1) 判断一个对象实例是否null.
用if(obj= = null){}来判断.
(2) 释放内存,让一个非null的实例变量赋值为null,这样这个实例指针引用就被释放了,等待JVM回收其对应的内存垃圾.
(1) null是关键字,是大小写敏感的,不能将null写成Null或NULL. 。
(2) null用来标识一个空的对象,因此不能将null赋给基本型的变量。比如
1
2
|
String s=
null
;
//正确
int
i=
null
;
//错误,应修正为"int i=0;"char c= null; //错误
|
(3) 对于一个值为null 的对象,如果你试图去访问其成员,则会触发空指针异常(NullPointerException).
(4) 用instancaeof(判断对象是否属于某种类型)去操作null对象,会返回false. 。
如:有语句: String s= null,
则“s instanceof String”的结果是false.
(5) 可以使==或着!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如<或者>.
在Java中,null ==null将返回true.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/qq_25077777/article/details/80174763 。
最后此篇关于基于java中的null类型---有关null的9件事的文章就讲到这里了,如果你想了解更多关于基于java中的null类型---有关null的9件事的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!