当前位置: 首页 > news >正文

西安做网站公司有哪些规范网站建设

西安做网站公司有哪些,规范网站建设,做网站排名的公司,wordpress 投稿 插件一、空指针问题的本质 空指针异常(Null Pointer Exception)是编程中最常见的错误之一,在C语言和Java中表现不同但本质相同:试图访问一个不存在对象的内存地址。 C语言中的空指针 int *ptr NULL; printf("%d", *ptr)…

一、空指针问题的本质

空指针异常(Null Pointer Exception)是编程中最常见的错误之一,在C语言和Java中表现不同但本质相同:试图访问一个不存在对象的内存地址

C语言中的空指针

int *ptr = NULL;
printf("%d", *ptr); // 段错误(Segmentation fault)

C语言中直接操作空指针会导致程序崩溃,且错误信息不明确。

Java中的空指针

String str = null;
System.out.println(str.length()); // NullPointerException

Java会抛出明确的NullPointerException,但程序不一定完全崩溃。

二、Java的空指针安全机制

1. 异常处理机制

Java用异常机制替代了C的直接崩溃:

try {String str = null;System.out.println(str.length());
} catch (NullPointerException e) {System.out.println("捕获到空指针异常:" + e.getMessage());// 可以在这里进行恢复操作
}

2. 对象初始化要求

Java强制要求局部变量使用前必须初始化:

// C语言中可以只声明不初始化
// int *ptr; // Java会编译报错
String str; 
// System.out.println(str); // 编译错误:可能尚未初始化

三、Java中预防空指针的6大实战技巧

1. 防御性编程(最基础)

public void printLength(String str) {if (str != null) {  // 显式检查System.out.println(str.length());} else {System.out.println("输入字符串为null");}
}

2. Objects工具类(Java 7+)

import java.util.Objects;String str = null;
System.out.println(Objects.requireNonNull(str, "参数不能为null").length());
// 抛出带消息的NullPointerException

3. Optional容器类(Java 8+革命性改进)

import java.util.Optional;Optional<String> optionalStr = Optional.ofNullable(getString());// 方式1:存在时执行
optionalStr.ifPresent(s -> System.out.println(s.length()));// 方式2:提供默认值
String result = optionalStr.orElse("默认值");// 方式3:链式操作
int length = optionalStr.map(String::length).orElse(0);

4. 注解约束(结合框架使用)

// Spring的注解
public void getUser(@NonNull String userId) {// 方法内不需要再判空
}// Lombok注解
@Getter @Setter @NonNull
private String name;

5. 字符串处理专用方法

// 比较字符串时把常量放前面
"constant".equals(variable);// 使用StringUtils(Apache Commons)
StringUtils.isEmpty(str); // 同时检查null和空串

6. 空对象模式(设计模式层面解决)

interface Animal {void makeSound();
}class Dog implements Animal {public void makeSound() { System.out.println("汪汪"); }
}class NullAnimal implements Animal {  // 空对象实现public void makeSound() { /* 静默处理 */ }
}// 使用时
Animal animal = getAnimal() != null ? getAnimal() : new NullAnimal();
animal.makeSound(); // 永远不会NPE

四、Java 14+的空指针异常增强

Java 14引入了更友好的空指针异常信息:

public class EnhancedNPE {public static void main(String[] args) {Person person = null;System.out.println(person.address.city); // 旧版只会提示某行出错// Java 14+输出:// Cannot read field "city" because "person.address" is null}
}class Person {Address address;
}class Address {String city;
}

五、与C语言的对比总结

特性C语言Java
空指针表现段错误/程序崩溃抛出NullPointerException
错误信息不明确明确异常堆栈
处理方式无法捕获try-catch机制
预防手段全靠程序员检查多种语言级解决方案
内存安全不安全相对安全

六、实际项目中的最佳实践

  1. DAO层处理
public User getUserById(Long id) {return Optional.ofNullable(userRepository.findById(id)).orElseThrow(() -> new BusinessException("用户不存在"));
}
  1. Service层处理
public void updateUser(UserDTO userDTO) {User user = Optional.ofNullable(userRepository.findById(userDTO.getId())).orElseGet(User::new); // 不存在则创建新用户// 后续操作...
}
  1. 集合处理
List<String> list = getPossibleNullList();
for (String item : Optional.ofNullable(list).orElse(Collections.emptyList())) {// 安全遍历
}

七、思考题

以下代码有哪些潜在的空指针风险?如何改进?

public class OrderService {public double calculateTotal(Order order) {return order.getItems().stream().mapToDouble(item -> item.getPrice() * item.getQuantity()).sum();}
}

参考答案

public double calculateTotal(Order order) {if (order == null) throw new IllegalArgumentException("Order不能为null");return Optional.ofNullable(order.getItems()).orElseGet(Collections::emptyList).stream().filter(Objects::nonNull) // 过滤掉null的item.mapToDouble(item -> Optional.ofNullable(item.getPrice()).orElse(0.0) *Optional.ofNullable(item.getQuantity()).orElse(0)).sum();
}

结语

Java通过以下方式显著改善了C语言中的空指针问题:

  1. 明确的异常机制替代直接崩溃
  2. 丰富的API支持(Optional等)
  3. 编译期的更多检查
  4. 现代化的工具和框架支持

关键建议

  • 优先使用Optional进行包装
  • 善用Objects工具类
  • 对输入参数进行有效性验证
  • 采用空对象模式等设计模式

记住:好的代码不是没有null,而是妥善处理了null!

http://www.15wanjia.com/news/191462.html

相关文章:

  • 网站对比wordpress注册开启邮件验证
  • 怎么做公司招聘网站云南建设厅网站监理员培训
  • 网站开发语言在那看出来温州手机网站制作哪家便宜
  • 广州市建设工程安全监督站网站甘肃省建设厅安全员官方网站
  • 贵阳奇点未来网站建设企业年报查询官网入口
  • 佛山提供网站设计报价宣传策划方案
  • 做阅读理解的网站食品网站建设项目的预算
  • 净水设备 技术支持 东莞网站建设海报设计说明万能模板
  • 专业的外贸网站建设公司价格网站建设教程(任务2签订网站建设合同)题库
  • 河北网站建设制作wordpress 新浪博客
  • 简历生成网站ui设计师工作流程
  • 建设拼多多一样网站需要多少钱建设网站网站设计
  • 山东金城建设网站黄骅贴吧金宝
  • 新乡做网站公司哪家好域名注册的网站都有哪些
  • 内容导购网站模板xx网站建设策划方案
  • 北京人才招聘网站德阳市建设局官方网站
  • 高效简便的网站开发网络推广需要多少钱
  • 专业做网站公司济南dw个人网页设计
  • 华贸中心网站谁做的公司网站优化
  • 网站建设需求分析网站seo查询工具
  • 诸暨有哪些好网站制作公司巴中 网站建设
  • 企业的网站特点2019网站怎么做
  • 医院网站建设报价表山东济宁
  • 网站建设方案企业网站等保建设
  • 广州天呈网站建设衡水网站制作公司
  • 深圳网站公司制作做app需要什么软件
  • 石家庄网站设计网站维护seo外贸网站建设
  • pc网站wordpress主题无法显示
  • 公司建的站加油违法吗佛山市顺德区建设局网站
  • 怎么加php网站登陆源码wordpress 密码明文