字符串相关
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");
字符串相关,可变长字符串,异常
最新推荐文章于 2022-07-29 11:21:57 发布