让Java程序谨慎的出错

ThreadLocal 的缺点? 的缺点,是面试中非常常见的问题。回答时需要清晰地列出主要的缺点,并解释其原因和潜在的影响。的主要缺点是内存泄漏和脏数据问题,尤其是在线程池中使用时需要特别注意。理解这些问题之间的联系可以帮助你更全面地掌握 Java 并发编程的知识。 阅读详情

在实现Java某个函数时,首先要做的工作是对函数参数的检查。这一步工作主要是找出参数对该函数来说潜在的错误。尤其是对于引用类型参数来说,如果它指向的内存空间无任何对象,则函数接下来所有对参数的操作都是无效的。因此检查理论上是必须的。检查通常是抛异常类。

但是也有例外的情况(不抛异常的情况)。如果我们并不希望程序就此被中断,以错误的形式输出的控制台。我们希望以更加友好、“自满”的形式输出到控制台,我们该怎么做呢?

很简单,做判空的操作,如果参数为空,则参数级联的所有操纵开关都关闭。

就像这个例子:

package facvisual;

import java.io.*;
import java.nio.file.*;
import java.util.*;

/**
 * The tool class: the encapsulation of common functions.
 * @author Long weibing
 * @since 2018.04.29
 */
public class Utils {

    public static void main(String[] args) {
        String curPath = "E:\\";
        List<String> namesResult = Utils.allFiles(curPath);
        System.out.println("The numbers of all files: " + namesResult.size());
        for (String name : namesResult) {
            System.out.println(name);
        }
    }

    /**
     * Collecting all files absolute pathname under 'path' path
     * <font color="red">(No directories are included)</font>.
     * @param path Search path
     * @return List<String> A collection of String type
     */
    public static List<String> allFiles(String path) {
        // The collection of all files absolute pathname.
        List<String> output = new LinkedList<String>();
        // Collect temporary files and directories.
        Stack<File> stack = new Stack<File>();
        stack.push(Arrays.asList(new File(path).listFiles()));
        while (!stack.isEmpty()) {
            File curFile = stack.pop();
            String curEleAbsPath = curFile.toString();
            // It's a directory
            boolean isDir = Files.isDirectory(Paths.get(curEleAbsPath));
            if (isDir) {
                List<File> temp = null;
                if (curFile.listFiles() != null) {
                    temp = Arrays.asList(curFile.listFiles());
                }
                if (temp != null) {
                    stack.push(temp);
                }                
            } else {
                // Collect a file.
                output.add(curEleAbsPath);
            }
        }
        return output;
    }
}

该程序需要另外一个类Stack

package facvisual;

import java.util.*;

/**
 * stack: A data structure
 * @author Weibing Long
 * @since 2018.04.16
 * @param <Item> 
 */
public class Stack<Item> {
    private Node root;
    private int n;

    /**
     * push a element
     * @param item element
     */
    public void push(Item item) {
        if (item == null)
            throw new NullPointerException("item mush be not null!");
        if (root == null) {
            root = new Node();
            root.item = item;
            root.next = root;
        } else {
            Node temp = root;
            root = new Node();
            root.item = item;
            root.next = temp;
        }
        n++;
    }

    /**
     * push all elements in List.
     * @param items elements
     */
    public void push(List<Item> items) {
        for (Item item : items) {
            this.push(item);
        }
    }

    /**
     * 
     * @return pop a element
     */
    public Item pop() {
        if (n == 0)
            throw new NullPointerException("The stack not any element!");
        Item item = root.item;
        root = root.next;
        n--;
        return item;
    }

    /**
     * 
     * @return The numbers of element
     */
    public int size() {
        return n;
    }

    public boolean isEmpty() {
        return n == 0;
    }

    private class Node {
        private Item item;
        private Node next;  
    }

    /**
     * According to pop stack order.
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        Node tempRoot = root;
        for (int i = 0; i < size(); i++) {
            sb.append(tempRoot.item);
            if (i < size() - 1) {
                sb.append(", ");
            }
            tempRoot = tempRoot.next;
        }
        sb.append("]");
        return sb.toString();
    }
}

这个例子输出当前路径下(代码体现在 String curPath = "E:\\";)的所有文件的绝对路径名(不包括文件夹)。在执行Arrays.asList(curFile.listFiles())代码时,可能由于curFile.listFiles()为空(当File对象代表某个文件,而不是目录时),而导致其出错,所以应该改为

List<File> temp = null;
if (curFile.listFiles() != null) {
    temp = Arrays.asList(curFile.listFiles());
}

保证了代码正常执行。

java程序调试错误收集 本人在开发过程中总结了很多常见的错误及解决的办法,总结出来和大家分享 立即下载

相关推荐

Comsol单层焊缝焊接数值模拟:温度场与应力场全流程解析

在工程制造领域,有限元模拟是研究焊接热-力行为、优化工艺参数的重要工具。焊接过程涉及强烈的局部加热和快速冷却,材料经历复杂的非线性和相变,必须通过瞬态分析和热-力顺序耦合,才能准确捕捉移动热源作用下的温度演化与应力塑性积累。这一技术广泛应用于压力容器、船舶结构、车辆制造等场景,用以预测残余应力与变形、评估冷裂纹风险,并为工艺设计提供定量支撑。焊接数值模拟能否真正指导实践,关键在于热源校核、随温度变化的材料参数、合理的边界条件与网格策略。单层焊缝作为焊接模拟的基础模型,涵盖了移动热源加载、熔池形成、高温软化与

weixin_30444111的博客 221

/http.ser.gz (设备上没有空间) java.io.IOException: No space left on device,磁盘空间不足

原文: https://blog.youkuaiyun.com/blogzlh/article/details/24312963 2018-04-03 09:44:46.690 [javamelody community_cms] WARN net.bull.javamelody exception while collecting da...

tianshideemo的博客 3538

时序基础模型Timer-S1:十亿参数如何革新时间序列预测

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势。其原理在于捕捉数据中的趋势、周期性和季节性等时序依赖关系。这项技术的价值在于赋能业务决策,广泛应用于金融风控、能源管理、物联网监控和供应链优化等关键场景。传统方法依赖针对特定任务的专用模型,面临泛化能力弱和开发成本高的挑战。本文聚焦的时序基础模型,通过在海量跨领域数据上进行预训练,学习时序通用模式,并结合十亿级参数带来的强大容量,实现了性能的显著突破。这种范式转变,使得模型能够像“全科医生”一样,通过少量数据微调即可快速适应新任务,

weixin_29164843的博客 269

Java基础(八)异常处理

Java中把不同的异常用不同的类表示,一旦发生某种异常,就`创建该异常类型的对象`,并且抛出(throw)。然后程序员可以捕获(catch)到这个异常对象,并处理;如果没有捕获(catch)这个异常对象,那么这个异常对象将会导致程序终止。

zhufei463738313的博客 768

AltiumDesigner 09安装过程破解问题 .

首先分享一下破解文件,网上总是下载不到,好不容易下载到了,放在网盘上,有需要的自取。AltiumDesigner 09破解文件。链接:https://pan.baidu.com/s/1ZGvbR_6T51hpcaFbQiMX5w 密码:qwvaAltiumDesigner 09安装安装文件,比较大,包含破解文件:链接:https://pan.baidu.com/s/1mfgragB519jpGfR...

xiaoxiao_rabbit的博客 3万+

使用阿里天池平台训练YOLO目标检测模型

YOLO算法是一种单阶段目标检测算法,由Joseph Redmon等人于2015年提出。与传统的两阶段检测算法相比,YOLO将目标检测问题转化为回归问题,直接预测边界框的位置和类别概率,大大提高了检测速度。YOLOv1: 首次提出YOLO的核心思想,将图像分割成网格,每个网格预测边界框和类别概率。YOLOv2: 引入了批量归一化、锚框等改进,提高了检测精度。YOLOv3: 采用多尺度预测,增强了对小目标的检测能力。

步子哥的博客 1090

java程序报错后的排错思路

很多人用尝试代替学习,一遇到问题就借助搜索引擎,尝试几种方法后蒙对一次就算解决了,下次遇到类似问题,依然像第一次解决这类问题一样来回尝试。所以总结排错方法很重要,下次面对相似错误的变形,我们依然可以通过上面那套思路锁定问题,大大节省效率。

devops 1357

Python与.NET革命性互操作:PythonNet实现零门槛双向调用——深度解析与实战案例

跨语言调用实战指南:Python与.NET深度集成 摘要:本文详解Python与.NET双向互调技术,通过PythonNet和Python.Runtime实现高效跨语言协作。核心优势包括:无缝集成Python机器学习模块(如PaddleOCR)与.NET UI框架,内存直传提升90%数据效率,减少80%重复代码。内容涵盖:1)Python调用.NET类库的完整流程;2)C#动态加载Python脚本及环境配置要点;3)反射机制实现私有方法调用与泛型处理;4)性能优化技巧(类型缓存、NumPy数组转换);5)异

墨夶的博客 611

程序请求报错java.lang.NoSuchMethodError

原因:非匹配版本打包 AuditLogController.getAuditLogList(int start,int limit,HashMap map);B模块 -> AuditLogService.getAuditLogList(int start,int limit,Map map);测试人员打包A模块的时候未选择对应版本的B模块,选择了高版本的B模块,但是发布版本使用的是低版本的B模块。查看非匹配版本A模块调用时HashMap有强转Map的动作 如下图。记录当时排查了如下方面。

qq_38130280的博客 706

组合预测 | Python实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树股票价格预测

组合预测 | Python实现LSTM-XGBoost长短期记忆网络和极限梯度提升树股票价格预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2353

激光雷达点云异常现象详解:鬼影、高反膨胀与拖点

现象核心外观主要成因核心硬件对策核心算法对策鬼影位置错误,出现"复制"的物体镜面反射/光学元件间杂散光物理光阑、抗反射涂层多帧时序一致性检验、反射率逻辑判断膨胀尺寸变大,轮廓呈毛刺状信号饱和、像素/通道串扰可变增益控制、随机编码序列强度阈值滤波、几何轮廓拟合(剪裁)拖点边缘粘连,出现"阶梯"或"连线"光斑跨立边缘、双回波融合小光斑光学设计、多回波支持邻域深度突变检测、波形脉宽分析这些异常现象是当前激光雷达感知中的核心难点,通常需要硬件物理特性优化与上层感知算法。

Fun_LiDAR的博客 303

Java语言基础-如何让程序优雅的报错-异常处理

异常概述 在使用计算机语言进行项目开发的过程中,即使程序员把代码写的尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是考代码就能避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等。 异常:在Java语言中,将程序执行中发生的不正常的情况称为“异常”(开发过程中的语法错误与逻辑错误不叫异常)。 Java程序在执行中出现的异常分两类: Error:Java虚拟机无法解决的严重问题,例如:JVM内部错误,资源耗尽等严重情况。一般不编写针对性的代码进行修复 举两个例子

寒暄的博客 1891

智能运营模型的建设与运用实践

一项运营活动的全流程,主要包含客群挖掘与筛选、产品与权益选择、触点与活动选择、运营策略调优等关键环节,涉及客群管理、活动管理、权益管理、触达管理、智能调控等系统支撑需求,如今工商银行已开展与其相对应的推荐模型、分析模型等的研发与实践。自2023年9月该模型被知客运营平台吸收并上线以来,已累计有远程银行中心、吉林分行、重庆分行等30余家分行或机构使用,赋能融e借、积存金、结售汇、基金、理财、存款等12种场景,产生营销客户清单达千万人次,有力促进了保守型理财、天天盈、添益快线、寿险等产品的销售。

银行信息系统应用架构详解 849

java怎么杀死线程,Java中如何终止线程

除了以上方法外,Java中还有其他一些终止线程的方法,无论使用哪种方法,我们都需要谨慎处理线程的终止问题,因为线程的终止涉及到资源的清理和数据的完整性等问题,如果处理不当,可能会导致程序出现错误或异常,在Java中终止线程时,我们应该尽可能采用安全、可靠的方法,并遵循Java的并发编程规范。接口,我们可以等待一个计算完成,或者取消一个计算,如果计算被取消,那么相关的线程将会停止执行,需要注意的是,如果计算已经完成或无法被取消,那么。方法会中断一个线程的执行,当线程被中断时,它会接收到一个。

qq_28514075的博客 645

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

所有代码都不报错,运行报错“非法的Unicode转义”

注释中的Unicode引起报错 错误范例 错误代码 public static void main(String[] args) { char c='\u0061';//\u××××是Uniccode码,表示数字5 System.out.println(c); char d='\u2713'; System.out.println(d); } 代码意义是分别给字符型变量c和d赋值并打印出来 报错结果 运行之后...

qq_43236059的博客 1548

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java+如何不使用+volatile+和锁实现共享变量的同步操作

熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before(简称 hb)规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结果的影响。当一个变量被多个线程读取并且至少被一个线程写入时,如果读操作和写操作没有 HB 关系,则会产生数据竞争问题。要想保证操作 B 的线程看到操作 A 的结果(无论 A 和 B 是否在一个线程),那么在 A 和 B 之间必须满足 HB 原则,如果没有,将有可能导致重排序。

hyun134340的博客 144

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

为什么阿里巴巴不建议使用Arrays.asList、ArrayList的subList?

点击上方 "编程技术圈"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!每日英文Be patient and tough; someday this pain wi...

程序员小乐 380

第51项:谨慎设计方法签名

  本项是若干API设计技巧的总结,它们还不足以单独开设一个项。总的来说,这些设计技巧将有助于使你的API更易于学习和使用,并且比较不容易出错。   谨慎地选择方法的名称。 方法的名称应该始终遵循标准的命名习惯(第68项)。首要目标应该是选择易于理解的,并且与同一个包中的其他名称风格一致的名称。第二个目标应该是选择广泛认可的名称(如果存在的话)相一致的名称。避免使用长的方法名称。如果还有疑问,请参...

Coloured_Glaze的博客 294

Java 获取小程序码的两种方式

通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面。

程序员徐师兄的博客 2743

50道Java面试常问的基础知识,虽是基础但是避坑之路可得小心谨慎

分布式技术专题+面试解析+相关的手写和学习的笔记pdf网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2301_82243626的博客 999

谨慎重置equals方法

谨慎重置equals方法在Java中equals方法是一个很重要的方法,也是一个相对容易出错的地方。本片文章主要以实例来重点讲述如何实现,已经在实现中所要注意的几个问题。希望能够读者带来一些启发,减小出错的概率。在介绍equals方法实现之前,我们有所必要了解一些基本的概念。Equals方法顾名思义,就是比较两个对象是否是等价。它必须遵守五个条件。1)反身性(reflexive)。简单

燕青专栏 1205

第五十五条:谨慎返回Optional

包含自动装箱的基本类型的optional跟返回基本类型的optional相比,【返回自动装箱的基本类型】的成本是非常昂贵的,因为optional有两个级别的装箱操作,而不是零个没有【意思是optional有自己的装箱操作?使用流进行编程时,发现自己使用Stream并要求包含非空选项中的所有元素的Stream可以继续执行【代码】【也就是说当你要求返回的所有Stream里面,如果Optional里面是有值的,那就继续执行代码,没有值的话就忽略】,这种情况是很常见的。

weixin_56542271的博客 873

java一定要谨慎的操作!

当现在不适合这个操作,或是没有必要进行这个操作时就直接放弃这个操作而回去。这个就是Balking模式例如王某在餐厅吃饭,当王某需要点餐时喊服务员需要点餐。当服务员A和B都注意到了王某点餐的示意,这时服务员B看到服务员A已经去响应了王某的点餐请求,所以服务员B就不会再过去响应王某的点餐请求。   程序示例:程序的需求是模拟一个自动保存的功能。自动保存是为了预防计算机忽然断电或则软件突然出错的危险,

u013430183的专栏 462

JAVA 获取 微信小程序码的两种方式 和 微信小程序二维码的一种方式

目前小程序推出了自己的识别码,小程序码,圆形的码看起来比二维码好看。 本文总结微信小程序的获取小程序二维码的接口开发。官方地址 主要内容摘抄自微信小程序的API文档,java接口开发是自己总结开发。 一、简介 通过后台接口可以获取小程序任意页面的二维码,扫描该二维码可以直接进入小程序对应的页面。目前微信支持两种二维码,小程序码(左),小程序二维码(右),如下所示: 微信小程序获取...

Architect_优快云的博客 9563

谨慎使用rm -rf

日常开发中,使用linux的过程中,避免不了要使用linux命令进行文件的删除,但有时往往因为操作不当而导致文件删除错误,以至于服务出错,更有可能导致linux服务器崩溃,故谨慎使用rm -rf命令 下面是一些经常要使用的删除命令,可以避免直接强制删除文件或者文件夹导致严重后果: 创建文件夹命令:mkdir 文件夹名称 ; mkdir 路径/{文件夹1,文件夹2} 创建文件命令:touch...

qq_21875331的博客 1502

Java通用程序设计技巧

第一条:将局部变量的作用域最小化 本条目跟「使类和类成员的可访问性最小化」的本质上是类似的。将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。 使局部变量作用域最小化最有效的方法就是第一次使用它的地方进行声明。如果变量在使用之前进行声明,只会造成混乱。过早地声明局部变量会使它的作用域过早扩展,而且结束过晚。所以局部变量要在用到的时候进行声明,也便于声明周期的控制。 ...

java03_15的博客 743
上一篇: Java虚拟机的内部体系结构
下一篇: 获取指定文件夹下的所有文件的绝对路径名
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值