字符串相关
    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");

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

  1. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类

    1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...

  2. redis基础数据结构(一)可变长字符串sds

    redis中的字符串是二进制安全的,传统C字符串以'\0'为结尾,只能用于保存纯文本,不能用于保存音频.视频等二进制文件,因为只要在中间遇到'\0'就被截断了.redis的sds模块所有api都使用二 ...

  3. php字符串相关操作,PHP字符串常用操作

    常用操作有: PHP中有两个内建的函数:count() 和sizeof(),可以实现得到数组的长度 count($sttr);数组长度 字符串长度:strlen(string $a); 判断是否相同, ...

  4. java可变长字符串类型,Java 常用类——StringBufferamp;StringBuilder【可变字符序列】_IT技术_软件云...

    一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: 1 public class StringDemo { 2 pub ...

  5. java可变长字符串_具有可变长度的scala字符串插值

    scala> def format(n: Int)(i: Int) = | f"A%%0${n}d" format i format: (n: Int)(i: Int)Str ...

  6. java字符串不可变_Java字符串真的是不可变的吗?

    Java字符串真的是不可变的吗? 我们都知道StringJava 中是不可变的,但请检查以下代码: String s1 = "Hello World"; String s2 = & ...

  7. c语言输入任意长度字符串,读取不定长字符串输入

    C语言通常使用scanf处理输入,如果要读取字符串,那么就需要定义一个字符数组(char[]).可是,如果数组定义长度不足,就可能发生溢出. 在C语言里有个可以用来读取字符的函数(getchar),我 ...

  8. 字符串 mysql索引,长字符串的MySQL索引

    I have MySQL InnoDb table where I want to store long (limit is 20k symbols) strings. Is there any wa ...

  9. c# 拼接字符串换行_C#长字符串换行输入

    加入@符号 private static string sql = @"SELECT Sysobjects.name AS TABLE_NAME, syscolumns.Id, syscol ...

最新文章

  1. python导入pods的时候出现错误:FileNotFoundError: [Errno 2] No such file or directory: ‘D:\\tmp\\sods.log‘
  2. 桂林机场春运期间新增多条航线航班 实现接力承运无缝衔接
  3. java的算法库_java – 如何实现算法库?
  4. springboot+jps+druid项目搭建
  5. java服务器测试_正确的方法来测试服务器是否在Java中运行?
  6. 正则表达式获取一个文本域中每一行的值并且去掉前后空格
  7. linux+守护进程+php,【转载】Linux 守护进程的编程方法
  8. MySQL字符集LATIN1转UTF8
  9. TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码
  10. c语言lnk1104无法打开exe,error LNK1104: 无法打开文件“C:\Users\Administrator\Desktop\....\\xxxx.exe”...
  11. 编译原理教程_6 LR分析法
  12. (2016弱校联盟十一专场10.2) E.Coins
  13. 2019数据安装勾选_Origin2019下载和安装教程
  14. roundcube db.inc.php,Roundcube Webmail 安装配置篇
  15. 计算机无法添加网络位置,win10系统无法设置网络位置的操作办法
  16. Python爬取《扫黑风暴》腾讯视频弹幕
  17. 如何删除复制文字产生的word回车换行符
  18. C#【必备技能篇】两个程序(进程间)通信,传递消息给其它窗口
  19. 【python小课堂专栏】python小课堂11 - 变量篇
  20. 调制 Modulation

热门文章

  1. 打造「可盈利个人品牌」终极指南,8个步骤开始建立你的个人品牌吧!
  2. SpringBoot整合Swagger
  3. 大疆技术总监:如何用六年成为一个全能的机器人工程师(转载)
  4. 迪克斯特拉算法——算法图解
  5. idea插件开发(5)-Swing图形化设计
  6. Oracle(甲骨文)这个庞然大物至今未倒之谜
  7. 阿里OCR扫描字识别demo
  8. JAVA实现扫雷游戏
  9. mac远程链接windows桌面
  10. 金蝶K3数据库优化/备份操作指南