异常Exception 有分为自定义异常和系统默认定义的异常。在每个项目中都会有异常的自定义模块。自定义的异常错误,返回的json 数据格式。异常有异常调用链,处理异常和对外抛出异常。
编译时异常和运行异常又是有区分。项目组有的时候需要程序员自定义异常,注解也是需要手动开发。异常EXCEPTION和错误ERROR有差距。异常是说明这里某处有错误,可以进行预防处理操作。错误是不能修复的重大失误,级别不一样。不同的定义级别,有info, debug,
Warning, exception, error. 程序输出信息不同的错误级别,会有不同的日志输出。线上和线下的程序日志信息输出,操作方式不一样。
线上的日志信息处理经验随着不同的工作开发级别不同。测试有测试的错误日志信息异常,开发的控制台主要是使用集成开发环境输出异常信息。编程开发离不开算法的调试,调试debug 是在每一行的运行代码的逻辑处理方面查找程序开发漏洞。异常调用链在分为编译时调用处理方式和运行的异常调用链处理方式。
调用链异常抛出可以把异常抛出到上一级程序的代码的调用方。程序抛出是throws, 还有一种异常的处理方式是把异常交付给虚拟机进行托管。虚拟机是Java特有的程序运行平台,Java 开发伴随生长的jvm 功能强大,可以管理 异常 exception 的运行生命周期。编译时异常是系统自定义的异常处理类。
约定大于配置。程序大佬打磨出来的自定义的程序组件是有很多的默认自定义的参数信息。有些默认的异常是可以使用集成开发环境自动检测处理。IOECEPTION, FILENOTFONDEXCEPTION, 等等。文件处理类处理文件读写的时候会发生文件的读写异常,或者是文件的非找到异常。程序的一些静态异常是可以预知处理,称之为编译时异常。Ide集成开发环境,或者是eclipse 配置jdk,jre 之后都是可以自动提供类似的编译时间异常类库。
异常的调用链不宜过长。变量对象的作用域限制在最小的作用域之内。最顶层的异常调用方是主线程,系统默认会自动处理。异常的调用链过程是增加系统代码的复杂度。使用虚拟机托管的方式,比如运行时间异常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; } }