异常和异常调用链

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 程序大佬打磨出来的自定义的程序组件是有很多的默认自定义的参数信息。文件处理类处理文件读写的时候会发生文件的读写异常,或者是文件的非找到异常。使用虚拟机托管的方式,比如运行时间异常 runtimeexception. 异常提供自定义的异常错误信息最好,友善的异常提示有利于代码的调试调优。虚拟机是Java特有的程序运行平台,Java 开发伴随生长的jvm 功能强大,可以管理 异常 exception 的运行生命周期。测试有测试的错误日志信息异常,开发的控制台主要是使用集成开发环境输出异常信息。


 

异常Exception 有分为自定义异常和系统默认定义的异常。在每个项目中都会有异常的自定义模块。自定义的异常错误,返回的json 数据格式。异常有异常调用链,处理异常和对外抛出异常。

 

编译时异常和运行异常又是有区分。项目组有的时候需要程序员自定义异常,注解也是需要手动开发。异常EXCEPTION和错误ERROR有差距。异常是说明这里某处有错误,可以进行预防处理操作。错误是不能修复的重大失误,级别不一样。不同的定义级别,有info, debug,

Warning, exception, error. 程序输出信息不同的错误级别,会有不同的日志输出。线上和线下的程序日志信息输出,操作方式不一样。

 

线上的日志信息处理经验随着不同的工作开发级别不同。测试有测试的错误日志信息异常,开发的控制台主要是使用集成开发环境输出异常信息。编程开发离不开算法的调试,调试debug 是在每一行的运行代码的逻辑处理方面查找程序开发漏洞。异常调用链在分为编译时调用处理方式和运行的异常调用链处理方式。

 

调用链异常抛出可以把异常抛出到上一级程序的代码的调用方。程序抛出是throws, 还有一种异常的处理方式是把异常交付给虚拟机进行托管。虚拟机是Java特有的程序运行平台,Java 开发伴随生长的jvm 功能强大,可以管理 异常 exception 的运行生命周期。编译时异常是系统自定义的异常处理类。

 

约定大于配置。程序大佬打磨出来的自定义的程序组件是有很多的默认自定义的参数信息。有些默认的异常是可以使用集成开发环境自动检测处理。IOECEPTION, FILENOTFONDEXCEPTION, 等等。文件处理类处理文件读写的时候会发生文件的读写异常,或者是文件的非找到异常。程序的一些静态异常是可以预知处理,称之为编译时异常。Ide集成开发环境,或者是eclipse 配置jdkjre 之后都是可以自动提供类似的编译时间异常类库。

 

异常的调用链不宜过长。变量对象的作用域限制在最小的作用域之内。最顶层的异常调用方是主线程,系统默认会自动处理。异常的调用链过程是增加系统代码的复杂度。使用虚拟机托管的方式,比如运行时间异常runtimeexception. 异常提供自定义的异常错误信息最好,友善的异常提示有利于代码的调试调优。程序员喜欢可读性好的代码。


上周六编程的一些,是美国加利福尼亚周的大学的 hackerRanker team 算法结果

import java.util.HashMap;
import java.util.Map;
/**
 * Created by Lenovo on 2023/5/7.
 */
public class HackerRankTestCamelCase {
    public static void main(String[] args){
        System.out.println("Hello World!");
        String srcStr="  h3elloWorldCvvv ntTestRet";
        Integer wordCntFroCamelStr = getWordCntFroCamelStr(srcStr);
        System.out.println(wordCntFroCamelStr);
    }
    /**
     * here is a sequence of words in CamelCase as a string of letters, , having the following properties:
         It is a concatenation of one or more words consisting of English letters.
         All letters in the first word are lowercase.
         For each of the subsequent words, the first letter is uppercase and rest of the letters are lowercase.
     * Given s, determine the number of words in s.
     * constriants
     *  camelcase string
     *  str len 1<=strLen<=10to5
     * @param s
     * @return
     */
    public static int getWordCntFroCamelStr(String s){
        String trimStr = s.trim();
        if(trimStr==null){
            return 0;
        }
        if(trimStr.isEmpty()){
            return 0;
        }
        int retVal=1;
        for (int i = 0; i < 5; i++) {
            retVal*=10;
        }
        if (trimStr.length()<1 || trimStr.length()>retVal){
            return 0;
        }
        char charAt = trimStr.charAt(0);
        if (!Character.isLowerCase(charAt)){
            return 0;
        }
        if (Character.isDigit(charAt)){
            return 0;
        }
        int count=0;
        for (int i = 0; i < trimStr.length(); i++) {
            char charAt1 = trimStr.charAt(i);
            if (Character.isDigit(charAt1)){
                count++;
                continue;
            }
            if (charAt1=='_'){
                count++;
                continue;
            }
            if (charAt1>='A' && charAt1 <= 'z'){
                count++;
                continue;
            }
            if (count!=trimStr.length()){
                return 0;
            }
        }
        int length = trimStr.length();
        HashMap<Character, Integer> stringIntegerHashMap = new HashMap<>();
        for (int i = 0; i < length; i++) {
            char charAt1 = trimStr.charAt(i);
            if (Character.isUpperCase(charAt1)){
                if (stringIntegerHashMap.containsKey(charAt1)){
                    stringIntegerHashMap.put(charAt1,stringIntegerHashMap.get(charAt1)+1);
                }else {
                    stringIntegerHashMap.put(charAt1,1);
                }
            }
        }
        int wordCntRet=0;
        for(Map.Entry<Character,Integer> entry: stringIntegerHashMap.entrySet()){
            Character key = entry.getKey();
            Integer value = entry.getValue();
            wordCntRet+=value;
        }
        wordCntRet+=1; // add frist lower camel case str cnt
        return wordCntRet;
    }
}
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
Java C++ Spring
解决NoUniqueBeanDefinitionException异常的方法
了解Spring框架中`NoUniqueBeanDefinitionException`异常的原因和解决方案。此异常发生在容器内有多个相同类型的bean时,Spring无法决定注入哪个bean。解决方法包括:使用`@Primary`注解标记首选bean,利用`@Qualifier`注解配合`@Autowired`、`@Resource`、`@Inject`或`@Value`指定bean名称。选择哪种方法取决于业务需求和具体场景,预防措施是避免创建多个同类型bean或使用`@Primary`注解。
244 0
|
3月前
|
运维 算法 Java
异常和异常调用链
【9月更文挑战第6天】在软件开发中,“异常”指程序运行时发生的错误事件,包括语法、逻辑和运行时错误。异常可通过try-catch捕获、throw抛出或自定义异常类处理。“异常调用链”则记录了异常发生时的方法调用路径,有助于调试、理解程序流程及生成错误报告。开发中正确处理异常可提升程序稳定性,调用链则加速问题定位与解决。
|
2月前
|
监控 Java
捕获线程执行异常的多种方法
【10月更文挑战第15天】捕获线程执行异常的方法多种多样,每种方法都有其特点和适用场景。在实际开发中,需要根据具体情况选择合适的方法或结合多种方法来实现全面有效的线程异常捕获。这有助于提高程序的健壮性和稳定性,减少因线程异常带来的潜在风险。
27 1
|
5月前
|
文字识别 Java
文本,文字识别12,接口返回值和异常封装,一个好的接口,应该包括,错误码,提示信息,返回的数据,应该知道出错,错在哪里,抛出业务异常应该怎样解决?出现业务异常的时候,抛出业务异常,全局异常处理
文本,文字识别12,接口返回值和异常封装,一个好的接口,应该包括,错误码,提示信息,返回的数据,应该知道出错,错在哪里,抛出业务异常应该怎样解决?出现业务异常的时候,抛出业务异常,全局异常处理
|
7月前
|
Java
Java一分钟之——异常链:追踪错误源头
【5月更文挑战第20天】Java异常处理中的异常链机制有助于追踪错误源头。通过`initCause()`和`getCause()`方法,新异常与原始异常关联,提供丰富调试信息。常见问题包括忽略原始异常、过度包装和不正确调用`initCause()`。避免策略包括始终记录原始异常、适度创建自定义异常和正确使用`initCause()`。代码示例展示了如何在异常实例化时自动链接原始异常。异常链能改善错误追踪,加速问题解决。
121 3
|
前端开发 rax Linux
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
【CSAPP】异常控制流 | 异常表 | 异常类别 | 同步异常 | 异步异常
137 0
|
7月前
|
C++
C++处理的异常的机制
C++处理的异常的机制
获取包装异常中真实异常
获取包装异常中真实异常
56 0
|
存储 Java
高并发编程-捕获线程运行时的异常 + 获取调用链
高并发编程-捕获线程运行时的异常 + 获取调用链
101 0