字符串相关,可变长字符串,异常

字符串相关
    String  字符串常量  本质char[]
    String str1="abc"
    String str2="abc";
    System.out.prrintln(str1==str2);
    
    同时也会带来这样的问题:
    String a="a";
    a=a+"b";//"ab"
    a=a+"c";//"abc"
    以变量的形式进行字符串拼接时,会产生大量的新的字符串,会开辟大量的空间
    
    可变长度的字符串
    AbstractStringBuilder  本质char[]
    length()
    append(String str) 往末尾追加
    insert(int offset, String str)
    char charAt(int index)
    delete(int start, int end)
    deleteCharAt(int index)
    replace(int start, int end, String str) 
    String substring(int start)
    int indexOf(String str)
    int lastIndexOf(String str)
    reverse()
        没有equals(),toUpperCase(),startWith(),contains(),compareTo(),split(),trim()
        valueOf()
        
    AbstractStringBuilder 和String类型之间转换
    StringBuilder、StringBuffer-->String  toString();    
    String-->StringBuilder、StringBuffer  构造
    
    StringBuilder 本质char[]          线程不安全   效率高
    StringBuffer  本质char[]   线程安全  所有的方法都synchronized 效率低
    
异常
    程序在编译或运行过程中出现的不正常的情况    
    
    Exception in thread "main" java.lang.ArithmeticException: / by zero
    at exp.Test1.main(Test1.java:8)
    异常类型:ArithmeticException
    出现的原因:/ by zero
    出现的位置:从上往下找,找第一行是自己代码地方
    
    解决方案:
        方式一:添加判断
            缺点:过多的判断语句,淹没了业务。程序一直在补漏洞,也不一定能补全
                可读性不强,维护性不强
        方式二:异常处理机制
            预制一些异常处理程序,如果异常出现,则执行,如果不出现,则走正常程序
            try catch finally throw throws
            
    try{
        //正常的业务程序
    }catch(异常类型  对象){
        异常处理程序
    }catch(异常类型  对象){
        异常处理程序
    }finally{
        //不管是否出现异常,都会执行的代码
        关闭资源,收尾收场等
    }
    try块必须有,finally和catch二选一
    
    //后续
    先执行try中的语句
        如果正常执行,则不执行异常处理程序,直接执行后续代码
        如果有异常出现,才走异常处理程序,执行完之后,执行后续代码
            异常出现时,JVM会产生异常对象,此对象会和catch块中的异常类型匹配
            如果匹配上,则执行相应的异常处理程序
            如果匹配不上,则报错
            
            匹配操作其实执行instanceOf 所以catch块中只有是产生异常对象的类型或父类都会被捕获
            为了捕获更多的异常,可以写多个catch字句,按照从小到大的顺序来写
            产生异常时,会从上往下去依次匹配异常类型,和哪种异常匹配则执行相应的程序
            如果和某一种异常匹配上,则不再往下继续匹配
            
            多个异常的处理程序一致,可以合并在一起InputMismatchException|ArithmeticException
            
    finally   
        不管是否出现异常,都会执行的代码
        return 语句 阻拦不了finally的执行
        System.exit(0);----0  正常结束  非0 异常结束   直接停掉JVM
            阻拦不了finally的执行
    
    异常体系
    Throwable 所有错误或异常的超类
    String getMessage() 
    void printStackTrace()  打印堆栈信息
        Error用于指示合理的应用程序不应该试图捕获的严重问题
            OutOfMemoryError 内存溢出
                int[] nums=new int[1024*1024*1024];
            StackOverflowError 栈溢出
                递归 可能会引发
        Exception 指出了合理的应用程序想要捕获的条件    一般的问题
            RuntimeException  运行时异常
                都无需在 throws 子句中进行声明,意思是不强制程序处理
                NullPointerException
                ArithmeticException
                ClassCastException
                ArrayIndexOutOfBoundsException
                StringIndexOutOfBoundsException
                InputMismatchException 
            除了RuntimeException之外,其它都属于编译时异常
                多是外界条件,程序并不能通过逻辑判断来处理,强制通过异常处理机制处理
                SQLException
                IOException
                ClassNotFoundException
        
    程序的处理
        1、try-catch-finally
        2、throws 在方法的定义处 ,声明异常
            方法内部不能或者不想处理这个异常,则声明
                    
            并没有真正的处理异常。而是交由调用来处理。调用者依然可以选择try-catch
            或者继续throws,如此一层一层往上递交,直到交给jvm,jvm直接报错。
            
            编译时异常,强制要求处理
            运行时异常,可以处理也可以不处理
            
            方法重写:
                继承,子类拥有和父类一样的方法
                方法名相同
                参数列表相同
                返回值类型可以缩小
                访问控制权限可以放大
                声明的异常可以缩小,缩小到没有
        
        如何选择这两种方式?
            1、方法内部try-catch,所有调用者都无需再处理
                    所有情况下,处理程序是一致的,就可以放在方法内处理
                    如果处理程序不一致,应该交给调用者来(throws)
            2、异常处理程序也是分层来的。
        
    throw 抛出异常
        throw 异常对象;
        自定义异常--可读性强
    
    综合案例
        模拟老师上课,需要笔记本上课
        上课:打开电脑,上课,关电脑
        
        
日志记录 (以文件的形式长时间存储)
    1、错误日志---改善程序
    2、业务日志---个性化推送--商业价值
    3、sql日志
    
    第三方apache 插件  log4j--log for java
    使用步骤
        1、下载jar包  jar--java class文件的压缩包
        2、添加到项目中
        3、添加配置文件
            xml(存储数据) properties(java 键值对   key=value)
            最简单方式:properties文件放到类目录(src/或者source folder根目录)下
                    默认名:log4j.properties
                    可以自动读取
        4、项目中可以引入使用
            static Logger logger=Logger.getLogger(Test12.class);
            logger.error("除数不能为0");
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值