Java编程常见问题汇总五

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、捕获不可能出现的异常
  • 二、transient的误用
  • 三、不必要的初始化
  • 四、最好用静态final定义Log变量
  • 五、选择错误的类加载器


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


一、捕获不可能出现的异常

错误的写法:

try {   
... do risky stuff ...   
} catch(SomeException e) {   
// never happens   
}   
... do some more ...

正确的写法:

try {   
... do risky stuff ...   
} catch(SomeException e) {   
// never happens hopefully   
throw new IllegalStateException(e.getMessage(), e); // crash early, passing all information   
}   
... do some more ...

二、transient的误用

错误的写法:

public class A implements Serializable {   
private String someState;   
private transient Log log = LogFactory.getLog(getClass());   public void f() {   
log.debug("enter f");   
...   
}   
}

这里的本意是不希望Log对象被序列化. 不过这里在反序列化时, 会因为log未初始化, 导致f()方法抛空指针, 正确的做法是将log定义为静态变量或者定位为具备变量。

正确的写法:

public class A implements Serializable {   
private String someState;   
private static final Log log = LogFactory.getLog(A.class);   public void f() {   
log.debug("enter f");   
...   
}   
}   
public class A implements Serializable {   
private String someState;   public void f() {   
Log log = LogFactory.getLog(getClass());   
log.debug("enter f");   
...   
}   
}

三、不必要的初始化

错误的写法:

public class B {   
private int count = 0;   
private String name = null;   
private boolean important = false;   
}

这里的变量会在初始化时使用默认值:0, null, false, 因此上面的写法有些多此一举。

正确的写法:

public class B {   
private int count;   
private String name;   
private boolean important;   
}

四、最好用静态final定义Log变量

private static final Log log = LogFactory.getLog(MyClass.class);

这样做的好处有三:

可以保证线程安全
静态或非静态代码都可用
不会影响对象序列化

五、选择错误的类加载器

错误的代码:

Class clazz = Class.forName(name);   
Class clazz = getClass().getClassLoader().loadClass(name);

这里本意是希望用当前类来加载希望的对象, 但是这里的getClass()可能抛出异常, 特别在一些受管理的环境中, 比如应用服务器, web容器, Java WebStart环境中, 最好的做法是使用当前应用上下文的类加载器来加载。

正确的写法:

ClassLoader cl = Thread.currentThread().getContextClassLoader();   
if (cl == null) cl = MyClass.class.getClassLoader(); // fallback   
Class clazz = cl.loadClass(name);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker create rm export exec命令详解

容器生命周期管理命令教程-3 1. 创建容器 docker create:创建一个新的容器但不启动它。 docker create -it --name mycontainer ubuntu bash通常使用 docker run(详细可看上一篇关于run命令的详细介绍) 2. 删除容器 docker rm:删除一个或多个容器。 d…

【ArrayList】不推荐使用Vector来实现线程安全的原因

在Java中,不推荐使用Vector来实现线程安全的ArrayList,主要原因有以下几点: 同步机制效率低下: Vector的所有方法都被同步(synchronized)了,这意味着每次对Vector的操作都会获取并释放锁。这种方…

嵌入式C与C语言

简介 嵌入式 C"这个概念更多地是指 C 语言在嵌入式系统中的应用,而不是 C 语言本身的语法和特性。 语言标准 无论是普通 C 还是嵌入式 C,它们都遵循相同的 C 语言标准,如 C89、C99 或 C11 等。 从语言规范的角度来看,两者没有本质的区别。 编程模型 嵌入式 C 更多地关…

【python】 ModuleNotFoundError: No module named datasets

成功解决“ModuleNotFoundError: No module named datasets”错误的全面指南 在Python编程中,遇到ModuleNotFoundError: No module named datasets这样的错误通常意味着Python解释器无法找到名为datasets的模块。datasets是一个流行的Python库,常用于加载…

spring 事务失效的几种场景

一、背景 在 springBoot 开发过程中,我们一般都是在业务方法上添加 Transactional 注解来让 spring 替我们管理事务,但在某些特定的场景下,添加完注解之后,事务是不生效的,接下来详细介绍下。 二、方法不是 public 2…

[leetcode hot 150]第一百三十六题,只出现一次的数字

题目: 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 根据题目关于空间、…

心链9----组队功能开发以及请求参数包装类和包装类实现

心链 — 伙伴匹配系统 组队功能开发 需求分析 理想的应用场景 我要跟别人一起参加竞赛或者做项目,可以发起队伍或者加入别人的队伍 用户可以 创建 一个队伍,设置队伍的人数、队伍名称(标题)、描述、超时时间 P0 队长、剩余的人数…

漏电保护器的工作原理

漏电保护器上的每月按一次按钮,如果按下后开关立即跳闸,则证明漏保功能良好该按钮的工作原理是模拟线路漏电,在漏保内部存在一个零序互感器,零序互感器分别测量零线和火线的电流值,如果二者数值不相等,零火…

【WEB系列】过滤器Filter

Filter,过滤器,属于Servlet规范,并不是Spring独有的。其作用从命名上也可以看出一二,拦截一个请求,做一些业务逻辑操作,然后可以决定请求是否可以继续往下分发,落到其他的Filter或者对应的Servl…

海报在线制作系统

文章转载自:FastAdmin海报在线制作系统 - 源码1688 应用介绍 介绍 新机构海报是一款基于FastAdminThinkPHP开发的一款新机构海报。 采用JavaScript vue canvas技术,实现在线一键制作海报,生成海报。 功能特性 1、自由创作 2、一键制作…

Django使用正则表达式

本书1-7章样章及配套资源下载链接: https://pan.baidu.com/s/1OGmhHxEMf2ZdozkUnDkAkA?pwdnanc 源码、PPT课件、教学视频等,可以从前言给出的下载信息下载,大家可以评估一下。 在Django框架的新版本(v2.0 )中,URLc…

文件读取技巧

在CTF(Capture The Flag)比赛中,PHP文件读取是一种常见的挑战类型,通常涉及利用PHP中的文件包含功能或者一些不安全的文件操作来读取服务器上的敏感文件。这些敏感文件可能包含源代码、配置文件、密码甚至是FLAG(比赛的…

ECharts 图形化看板 模板(简单实用)

目录 一、官网 二、模板 ①定义请求​编辑 ② 将请求统一管理,别的页面引用多个请求时更便于导入。​编辑 ③最终模板 三、执行效果 四、后端代码 4.1 controller 4.2 xml 4.3 测试接口 一、官网 获取 ECharts - 入门篇 - 使用手册 - Apache ECharts 二、…

ARM32开发——串口库封装(初级)

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程分组创建 接口定义完整代码 开发流程 在文件系统中,创建库目录Library在keil工程中,创建分组管理…

Vue3-组件通信详解

文章目录 组件通信的含义Vue3组件通信和Vue2的区别组件通信的具体实现props(父子组件通信)自定义事件(子传父)mitt(任意组件间通信)v-model$attrs (非props的父子组件通信) r e f s …

知识图谱应用---智慧金融

文章目录 智慧金融典型应用 智慧金融 智慧金融作为一个有机整体,知识图谱提供了金融领域知识提取、融合、分析、推断、决策等功能,如下图所示。在场景方面,智慧金融涵盖智慧支付、智慧财富管理、智慧银行、智慧证券、智慧保险、智慧风控等诸多…

智能分析设备助力废固运输车辆信息采集

进出车辆信息采集,这一环节可谓是整个废固生产及处理企业监管体系中的基石。前端摄像机以其敏锐的感知能力,精准捕捉废固运输车辆的车牌、车头、车尾以及车厢的细致画面,同时记录下对应的视频流信息。这些信息的采集不仅为后续的监管提供了详…

Git存储库的推送保护

Git存储库的推送保护 昨天有一个提交一直提示:Push rejected Push rejected Push master to origin/master was rejected by remote起初在网络上找各种解决办法,先列举以下找到的各类方法 提交用户的用户名和邮箱与Git不一致,这个只需要通…

Warning:成交前,永远相信意外即将发生

作为一名首次次创业者,随着创业进入深层次阶段,越来越感觉到:创业是一条不归路,因为路上不止有惊喜,还有风尘。创业之前我认为世界是“天圆地方”的, 创业后你猜我怎么看这个世界的? 创业前我一…

【C/C++】C语言实现std::move

C语言中的模拟 std::move 在C中&#xff0c;std::move 用于将一个对象转换为右值引用&#xff0c;以便可以使用移动语义。在C语言中&#xff0c;我们可以通过传递指针来模拟这种行为。 #include <stdio.h> #include <stdlib.h>typedef struct {int *data; } Arra…