你有没有被这跟“针”扎的头皮冒汗?

技术人生——第17集:京城首发,AI叩问 随着《收获,不止SQL优化》即将出版,我专程飞了一趟北京。第一站目的地是印刷厂。去完成一项极具仪式感,也极具体力挑战的任务... 阅读详情

据说,穿秋裤的原因只有两个

一个是你觉得冷了

二是你妈觉得你冷了

但是……今年不太一样

一股寒潮的光临

它速度快、降温猛、特别冷

还影响南北很多省

江湖人称速冻小能手

不过寒潮再猛……

当生产环境中出现这根“空指针”的时候

就问你的头皮冒不冒汗?

常见空指针异常

级联调用时

我们在写代码的时候,不可避免的都需要调用别的方法来获取数据,这个方法可能是自己写的,也可能是别人写的,所以对于返回值就有所不同,如果方法返回值没有做处理,直接返回了个null,那么作为调用方,就有可能会出现空指针异常了,例如:

public static void main(String[] args) {
    // 当我们在获取到User信息,但没有做判断的情况下,直接获取名字就可能会导致空指针异常
    userService.getUserById("123").getName();
}

使用for循环时

这个经常会出现,使用for循环处理集合时,不管是从别的方法调用返回的集合,还是自己写的方法使用集合时,稍微一疏忽就掉进去了,例如:

public static void main(String[] args) {
    List<String> list = null;
    // 直接使用就会出现空指针异常
    for(String s : list){
        System.out.print(s);
    } 
}

// 这个方法没有什么问题,但是当出现异常的时候,返回值就是null了
public List add(){
    List list=null;
    try {
        list=new ArrayList();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}
对象直接取属性时

对象为空时,直接使用会导致,当书写复杂逻辑时,容易出现该问题

public void test(){
    User user = null;
    // 经过不少代码块处理的复杂逻辑;
    {} {} ……{}
    // 空指针异常
    String name = user.getName();
}
使用包装类型时

包装类型是可以为空,而在开发中一般都推荐使用包装类型,而不是原始类型,所以这个点也容易造成空指针异常

public void test(Integer i){
    // 如果传 null ,直接使用就空指针了
    System.out.print(i);
}
使用equals方法时

从未知对象调用equals方法时,容易出现空指针异常

public static void main(String[] args) {
    String testStr = null;
    // 错误使用方式
    if(testStr.equals("test")){
        System.out.print("这种就会产生空指针异常");
    }
    // 正确使用方式
    if("test".equals(testStr)){
        System.out.print("从已知的String对象中调用equals(),而非未知对象");
    }
}
使用toString方法时

当调用空对象的toString()方法的时候,会报空指针异常

BigDecimal bd = getPrice();
// bd为null的时候,会报空指针异常
System.out.println(bd.toString()); 

如何避免

  • 避免从方法中返回空指针,而是返回空collection或者空数组。
  • 从已知的String对象中调用equals(),而非未知对象;
  • 当valueOf()和toString()返回相同的结果时,使用valueOf()代替toString();
  • 使用传null安全的方法和库,例如:StringUtils工具类、Preconditions工具类;
  • 使用注解@NotNull 和 @Nullable;
  • 根据业务定义数据库中的字段为非空,这样就不需要判断是否非空;
  • Java8中还提供了Optional类型,可以使用;

还有很多的注意事项,可以帮助我们规范开发,避免空指针异常,不再一一列举了,阿里发布的《Java开发手册》里面有很多,非常值得一项一项的去研读。

应急响应之windows日志分析工具logparser使用 windows日志分析工具logparser使用介绍 阅读详情

相关推荐

维护测试监控LLM应用

LangFuse: 开源 + SaaS(免费/付费),LangSmith 平替,可集成 LangChain 也可直接对接 OpenAI API;LangSmith: LangChain 的官方平台,SaaS 服务(免费/付费),非开源,企业版支持私有部署;调试 Prompt 的 Playground测试/验证系统的相关指标数据集管理各种指标监控与统计:访问量、响应时长、Token 费等等。

SunnyRivers 1780

都当项目经理了,一定要戒掉「弱者气息」!

最近,小赛听到了一个很有意思的词儿:弱者气息。💁什么意思呢?简单来说,就是一个人说话畏畏缩缩,做事拖泥带水,整个人时不时地流露出一些不自信的表现,这就叫“弱者气息”。这种“气息”在身份转变的场景中尤为明显。比如许多刚升职的项目经理,常常因思维尚未完成从执行者到管理者的转变,不知不觉就被 “弱者气息” 拖后腿,项目越管越乱,团队也带不动。

xsxmmm的博客 987

VMware桥接模式实战:用手机热点给Linux虚拟机共享网络(附WiFi适配技巧)

本文详细介绍了在移动办公场景下,如何为VMware中的Linux虚拟机配置桥接模式,以通过手机热点共享网络。文章深入解析了桥接模式在无线环境下的工作原理,提供了从主机端准备、VMware设置到Linux虚拟机内部配置的完整实战步骤,并针对手机热点的特殊性,分享了MTU优化、DNS配置及常见网络问题的诊断与解决方案,帮助用户实现稳定高效的移动虚拟化办公。

2y3u4i5o6p的博客 1194

明明睡够了还是头重脚轻?你陷入了大脑的“垃圾回收死锁”

睡久了反而头重脚轻,不是因为你身体虚,而是陷入了“垃圾回收死锁”。大脑只有在深度睡眠时才开启自动排污。躺平刷手机不是休息,它会阻断大扫除程序。别再静止,而是去快步走二十分钟,用“微汗”强制清灰重启 。

maqh_csdn的博客 658

Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生

*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生名字、次高分的学生名字题目题目概述next()读取一个字符与nextLine()读取一行破题代码 题目 题目概述 *5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生名字、次高分的学生名字 使用Scanner类的next()方法而不是nextLine()方法来读取名字 next()读取一个字符与nextLine()读取一行 举个例子理

weixin_46356698的博客 2154

Godot 2D游戏开发实战:用GDScript复刻10款经典小游戏(附完整源码)

本文是一份Godot 2D游戏开发实战指南,通过使用GDScript语言复刻10款经典小游戏,帮助开发者快速掌握引擎核心功能。内容涵盖从环境配置、GDScript基础到贪吃蛇、Flappy Bird、打砖块、俄罗斯方块等项目的核心逻辑与代码实现,并附有完整源码,旨在通过实践提升独立开发能力。

gold的博客 778

社交焦虑不是“内向“——从Liebowitz量表的四个维度,看懂你的焦虑到底在哪个环节失控

文章摘要: "社恐"一词在中文互联网被广泛使用,但其实际表现和机制差异极大。1987年,哥伦比亚大学精神病学家Michael Liebowitz开发的"Liebowitz社交焦虑量表"(LSAS)突破了传统评估方式,将社交焦虑分解为"恐惧/焦虑"和"回避行为"两个独立维度,并对24种具体社交场景分别评分。研究发现,社交焦虑包含四个相互强化的维度:社交恐惧(大脑自动将社交解读为威胁)、社交回避(通过逃避维持焦虑循环)、身体症状(对生理反应的灾难化解读)和认知偏差(系统性负面思维模式)。临床将社交焦虑分为四个等

kongzhonghu的专栏 366

零基础玩转IndexTTS2:5分钟搭建个人语音克隆工具(支持B站同款情感语音)

本文详细介绍了如何零基础使用IndexTTS2快速搭建个人语音克隆工具,支持B站同款情感语音。IndexTTS2作为自回归零样本TTS系统,突破传统技术限制,实现精准时长控制和丰富情感表达。通过HuggingFace在线演示,用户可轻松克隆音色并调节情感参数,适用于自媒体配音、有声书朗读等场景。

purple的博客 917

线上出了Bug,全组排查到凌晨三点。最后发现是我改公共类导致的。检讨书写到一半,隔壁老兵说了句话,让我从“背锅侠“变成了“改革者“

他说,你们知道软件缺陷在不同阶段修复的成本差异有多大吗,需求分析阶段发现问题,成本是1,设计阶段是3到5倍,编码阶段是10倍,测试阶段是15到20倍,生产环境,100倍起步。他吐了口烟,说,你想想看,如果今天我们把你拉出来批评一顿,扣你绩效,下次再有人改公共类的时候,他会怎么做,他会隐瞒,会推责,会想尽办法证明这不是他的问题。然后他看向我,说,这次事故,你不需要写检讨,但我们需要一份完整的根因分析报告,不是追责,而是找出我们防御体系的每一个漏洞,然后补上。影响范围,全站支付功能,持续时间,5个小时,损失。

java思维导图 599

【AI就业干货12】机器学习八股文速通:从损失函数到 XGBoost,一篇带走全部面试点

本文总结了机器学习面试的核心知识点,涵盖监督与非监督学习、线性模型、正则化、决策树、KNN/K-means、SVM、集成学习、梯度下降、评估指标、特征工程、降维、概率模型等内容。重点包括:损失函数选择(MSE/交叉熵)、正则化作用(L1稀疏/L2平滑)、决策树划分准则、集成学习方法(Bagging降方差/Boosting降偏差)、XGBoost优化等。提供了30秒速记口诀和XGBoost代码示例,帮助快速掌握面试要点。全文采用公式+代码+口诀的形式,系统梳理了机器学习从理论到实践的常见考点。

m0_51738372的博客 731

Openclaw 附录B 常用Skills清单

核心作用支持URL、网页、PDF、图片、音频和YouTube视频的摘要与字幕提取,由OpenClaw创始人@steipete开发的官方内置Skill。安装⚠️说明:原推荐的summarize未在ClawHub验证到,YouTube字幕提取功能已内置于summarize中。使用场景“提取这个2小时Next.js教程视频的核心代码逻辑,按章节整理成学习笔记”推荐指数:⭐⭐⭐⭐。

Maynor的博客 857

面试官与“水货“程序员的戏剧性面试之旅 - 互联网大厂Java岗

面试官推了推眼镜,面前摆着谢飞机的简历,眉头微皱。面试官:「谢飞机你好,咱们先聊聊基础问题。你在工作中有使用过ArrayList和LinkedList吧?」谢飞机端坐身体,露出自信的微笑:谢飞机:「报告面试官!这个我会!ArrayList底层是数组,LinkedList底层是链表!数组查询快,链表增删快!」面试官微微点头:面试官:「不错,那你说说HashMap的put过程?」谢飞机摸了摸鼻子:谢飞机:「这个...先计算hash值,然后...然后...那个...找到对应位置,如果有值就...就覆盖?」面试官:

qq_40738155的博客 509

好写作AI:和导师开会不再慌!用AI初稿开启高效沟通的“副本预演”

导师沟通的本质,是展示你的思考过程和寻求专业碰撞。

mxy13871831511的博客 665

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

面试官狂问Java八股文,水货程序员谢飞机的“精彩“翻车现场

一场大厂Java面试的搞笑实录:严肃面试官老王对水货程序员谢飞机进行三轮灵魂拷问,从HashMap底层原理到线程池、JVM、Spring、Redis、MySQL等核心技术,谢飞机时而灵光乍现时而胡言乱语,文章末尾附带所有技术问题的详细解答,让小白也能彻底搞懂。

weixin_46755643的博客 224

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

身体是革命的本钱

本文于2017年5月6号发布在个人博客中,因为个人博客关闭,全部迁移到优快云,以下是正文: “问问题无论多忙总说有空,笑呵呵的很有意思。大家都很喜欢你,为何这样!一路走好”。我记不得是在中午吃饭的时候看到的,还是下班的时候看到的。 想想这几年来,篮球不打了,步不跑了,仰卧起坐不做了,俯卧撑也不做了。腹肌他就像我们的青春,悄悄的就走远了。 从前年开始,偶尔身上痒痒的,每次都挠到红彤彤的,...

煎鸡蛋汤 1604

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

谈话的时候你是不是不敢看人眼睛

你在与别人交谈的时候,是不是不敢直视对方的眼睛,眼神飘忽不定,不知所措。在参加面试的时候,又或许因为不敢直视面试官,而显得神情紧张。其实看着别人的眼睛,可以洞察对方的心思,也能体现自己的自信,就算看不出来,也体现不了自己的自信,起码能看看面试官长得好看不好看对吧? 看着别人的眼睛说话,其实不难的,就拿我举例,我是个很腼腆的人,腼腆到什么程度,别人请教我问题,或者指出我的错误的时候,我就会脸红,小...

Caeser110的博客 1274

电气工程及其自动化就业方向及前景

电气毕业,工作10年,聊聊这几年的感悟。 全文约1800字,认真看完,相信还在迷茫的你一定茅塞顿开。 首先声明一下,我实习期间就自学转行进入嵌入式单片机开发了。 自己并没有从事过电气工作,也不是985/211毕业,好在运气好,也够努力,收入不比身边那些高材生差。 高材生的人生轨迹都是循规蹈矩的,初中想着考上好的高中就能上好的大学,高中时又想着考上985/211就能逆天改命。 运气好的,毕业进了体制,找了个铁饭碗,本以为很风光了,可以高枕无忧。 几年后随着通货膨胀、年龄增长,结婚生子各种问题,你以

无际单片机编程 7752

华为AI infra大模型面试,我跪了!!!

华为AI infra大模型岗面试复盘:硬核技术考察与应对策略 摘要:本文记录了作者参加华为AI基础设施大模型岗位的面试经历。技术面重点考察了模型微调(Qwen/QLoRA)、Agent架构(ReAct与CoT区别)、GPU底层计算(KV Cache原理)等核心知识,并包含手撕代码环节。综合面试则涉及岗位匹配度、价值观理解等软性评估。文章揭示了此类岗位对算法理解、工程落地和性能优化的高标准要求,同时分享了应对技术难题的策略(如分层次回答、诚实表达知识边界)。面试过程突显了大模型岗位既需要扎实的理论基础,又要求

2401_84494441的博客 1202

Unity主题系统设计:状态驱动的主题抽象与自动注入方案

在Unity UI开发中,主题管理本质上是运行时状态的一致性同步问题,而非简单的资源替换。其核心原理在于将颜色、字体、图标等视觉属性抽象为可订阅的类型化状态(ThemeState),通过静态注册与事件回调机制实现组件与主题的松耦合。这种状态契约设计天然支持深色模式切换、多主题继承与编辑器实时预览,显著提升可维护性与调试效率。技术价值体现在零GC的主题切换、构建期资源自动剥离、跨平台兼容性保障三大工程能力上。典型应用场景包括白天/夜间模式、节日皮肤、A/B测试样式分发及多地区品牌定制。Unity-Theme正

weixin_30907685的博客 288

人生無常

  儘管一再小心的行事,可是不可預料的事情還是發生了.頭疼了一個晚上,在想如何解決這個問題.下午硬著頭皮,帶著最後一絲希望去處理(頭都冒汗了)還好上帝是公平的,最後終於給搞定了.不然這回問題就大了..人啊...真TMD變化無常... 转载于:https://blog.51cto.com/levelive/13881...

weixin_34416649的博客 92
上一篇: 工具 | XMind 2020
下一篇: Spring事务失效的几种情况,这次清晰了
Hugh Pro
博客等级 码龄16年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值