28-引用的缺省值——null
原创2024年11月29日大约 4 分钟...约 1344 字
1. 引用也有缺省值——null
- null 是引用类型的缺省值
- null 代表空,不存在。可以读作空
- 引用类型的数组创建出来,初始值都是空「如果,我们有一个类,创建一个类出来之后成员变量里面的每一个数据类型,都会赋于数据类型的缺省值。
int:0
、double:0.0
、bool:true、false
」
Merchandise.java
/**
* @ClassName: Merchandise
* @Description: TODO
* @Author: AI悦创
* @Date: 2024/11/28 22:39
* @Version: V1.0
* @Blog: https://bornforthis.cn
*/
public class Merchandise {
String name;
String id;
int count;
double price;
}
Step1: RefAndNull.java
/**
* @ClassName: RefAndNull
* @Description: TODO
* @Author: AI悦创
* @Date: 2024/12/11 17:16
* @Version: V1.0
* @Blog: https://bornforthis.cn
*/
public class RefAndNull {
public static void main(String[] args) {
Merchandise[] merchandises = new Merchandise[9];
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i] = new Merchandise();
}
}
for (int i = 0; i < merchandises.length; i++) {
System.out.println(merchandises[i]);
}
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
System.out.println(merchandises[i].name);
System.out.println(merchandises[i].id);
System.out.println(merchandises[i].count);
System.out.println(merchandises[i].price);
}
}
}
}
Step2: RefAndNull.java
/**
* @ClassName: RefAndNull
* @Description: TODO
* @Author: AI悦创
* @Date: 2024/11/28 22:40
* @Version: V1.0
* @Blog: https://bornforthis.cn
*/
public class RefAndNull {
public static void main(String[] args) {
// 数组在创建出来之后,会按照类型给数组中的每个元素赋缺省值。
// 引用类型的缺省值是null
Merchandise[] merchandises = new Merchandise[9];
// 给索引为偶数的引用赋值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i] = new Merchandise();
}
}
// 依次输出数组的值
for (int i = 0; i < merchandises.length; i++) {
System.out.println(merchandises[i]);
}
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
Merchandise m = merchandises[i]; // 现杀现卖!
System.out.println(m.price);
System.out.println(m.count);
System.out.println(m.name);
System.out.println(m.id);
}
}
}
}
Step3: RefAndNull.java
/**
* @ClassName: RefAndNull
* @Description: TODO
* @Author: AI悦创
* @Date: 2024/11/28 22:40
* @Version: V1.0
* @Blog: https://bornforthis.cn
* @desc: 尝试不一样的输出
*/
public class RefAndNull {
public static void main(String[] args) {
// 数组在创建出来之后,会按照类型给数组中的每个元素赋缺省值。
// 引用类型的缺省值是null
Merchandise[] merchandises = new Merchandise[9];
// 给索引为偶数的引用赋值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i] = new Merchandise(); // 数组元素放入整个实例化对象
}
}
// 依次输出数组的值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i].name = "bornforthis";
System.out.println(merchandises[i].name);
} else {
System.out.println(merchandises[i]);
}
}
// for (int i = 0; i < merchandises.length; i++) {
// if (i % 2 == 0) {
// System.out.println(merchandises[i]);
//// Merchandise m = merchandises[i];
//// System.out.println(m.price);
//// System.out.println(m.count);
//// System.out.println(m.name);
//// System.out.println(m.id);
// }
// }
}
}
Step4: RefAndNull.java
/**
* @ClassName: RefAndNull
* @Description: TODO
* @Author: AndersonHJB
* @date: 2022/11/11 13:19
* @Version: V1.0
* @Blog: https://bornforthis.cn
* @desc: 不一样的实例
*/
public class RefAndNull {
public static void main(String[] args) {
// 数组在创建出来之后,会按照类型给数组中的每个元素赋缺省值。
// 引用类型的缺省值是null
Merchandise[] merchandises = new Merchandise[9];
// 给索引为偶数的引用赋值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i] = new Merchandise(); // 数组元素放入整个实例化对象
}
}
// 依次输出数组的值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i].name = "aiyc";
System.out.println(merchandises[i].name);
} else {
System.out.println(merchandises[i]);
}
}
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
System.out.println(merchandises[i]);
Merchandise m = merchandises[i]; // 把数组内的实例化对象,再次实例化数组
System.out.println(m.price);
System.out.println(m.count);
System.out.println(m.name);
System.out.println(m.id);
}
}
}
}
2. null 带来的问题
- 大名鼎鼎的 NullPointerException(NPE) 「如果一个引用是空的话,你再去访问它的属性,那就会抛出 NPE,也就是默认 null(代表不存在) 会导致报错,这个报错我们之后再说。」总之就是:数组创建之后,数组内的数据没有赋值默认类型下,如果是 null 的话,你调用或者使用是会报错的。
- 如果不确定,使用前要先判断引用是不是空
public class CheckBeforeUse {
public static void main(String[] args) {
// 数组在创建出来之后,会按照类型给数组中的每个元素赋缺省值。
// 引用类型的缺省值是null
Merchandise[] merchandises = new Merchandise[9];
// 给索引为偶数的引用赋值
for (int i = 0; i < merchandises.length; i++) {
if (i % 2 == 0) {
merchandises[i] = new Merchandise();
}
}
// merchandises[7].name = "不存在的商品,不存在的名字";
for (int i = 0; i < merchandises.length; i++) {
if (merchandises[i] != null) {
merchandises[i].name = "商品" + i;
}
}
for (int i = 0; i < merchandises.length; i++) {
if (merchandises[i] != null) {
System.out.println(merchandises[i].name);
}
}
}
}
3. 通过 null 理解引用的“二级跳”
PS:引用需要二极跳。
欢迎关注我公众号:AI悦创,有更多更好玩的等你发现!
公众号:AI悦创【二维码】

AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh
