Stringbuilder 与 StringBuffer
String:不可变的字符序列
StringBuffer:可变字符序列,线程安全|同步的。 单线程使用
StringBuilder:可变字符序列,线程不安全|不同步。
执行效率:stringbuilder>stringbuffer>string
使用频率:string>stringbuilder>stringbuffer
String:String类表示字符串,java程序中所有的字符串文字,例如“abc”。都是作为此类的实例实现的。
String底层结构:
来自于父类的AbstractStringBuilder
Jdk8及之前的版本:private final char[] value;
Jdk8之后:private final byte[] value;
注意 :
1.如果某个类型的底层结构涉及到数组的使用,需要关注数组的初始容量+扩容机制
2.扩容机制 : stringbuilder和stringbuffer每次扩容原容量的2倍+2 int newLength = oldLength + oldLength + 2
String的对象的表示方式 :
1.字符串文字 "...." -->在字符串常量池中
String s1 = "xxx";
2.new 创建String类型对象-->在堆内存中
String s2 = new String("xxx");
GBK:1个汉字2个字节 UTF-8:1个汉字3个字节
异常:
Throwable(throwable类是java语言中所有错误和异常的超类)
/ \
ERROR Exception
| / \
由虚拟机脱出 编译时异常(检查时) 运行时异常
1.编译时异常:需要使用Try-catch语句进行捕获和处理,或者在方法的声明中使用throws关键字将异常声明抛出。
2.运行时异常:运行时异常是指在运行时才能够被检测到的异常,他们不需要在代码中进行强制性的处理或声明抛出。运行时异常通常表示程序的逻辑错误或者是错误的使用方式。
(运行时异常可以被捕获和处理,也可以用if等健壮性代码避免运行时异常。但这不是强制要求。如果对运行时异常进行显示处理,程序会在排除异常后终止执行。)
注意:
多个catch,异常类型小的在上面,类型大的在下面。
Finally中一般定义资源的关闭等相关代码。
常见的5中运行时异常:
- 空指针异常:java.lang.NullPionterException
- 类型转换异常:.ClassCastException
- 数组索引越界异常:.ArrayIndexOutOfBoundsException
- 数学异常:ArthmeticException
- 数组长度负数异常:NegativeArraySizeException
Data:
基本数据类型与包装类之间相互转换 :
jdk5新特性 : 自动拆装箱
基本数据类型与包装类数据比较问题 :
在数据值相等的前提下 :
1.两个int类型比较,值相等就相等
2.两个new Integer,只要是new就是新的地址,肯定不相等
3.int与Integer比较,包装类会先发生自动拆箱,然后两个基本数据类型比较值相等就相等
4.Integer与 new Integer比较,new参与肯定不相等
5.两个Integer比较,如果值在[-128,127]之间,返回缓冲区对象相等,如果不再返回之内,返回new Integer不相等。
注意 : Short,Integer,Long类型的valueOf方法内部存在[-128,127]返回缓冲区对象。所以先判断是否返回缓冲区对象。
Date:时间日期类型:
SimpleDateFormat:允许格式化(日期->文本)、解析(文本->日期)
- 创建simpledateformat的对象:使用默认的模式|模板,指定模式|模板。
- 解析(文本->日期)
(data中大部分构造器弃用)-->可以使用LocalDate存放年月日信息。
Math:数学相关类型:
Math类包含用于执行基本数值运算的方法,例如初等指数、对数、平方根和三角函数。
static double random() 返回一个double带正号的值,大于或等于0.0且小于1.0
[min,max] (int)(Math.random()*(max-min+1)+min)
枚举Enum:
枚举也是类。
一种事物的所有情况|所有可能,一个类的所有实例
枚举类的实例是由枚举类型内部提供,不允许外部构建
java中所有的枚举类型都默认隐式的继承自java.lang.Enum
枚举类中可以定义 : 字段,属性,功能,构造器....
枚举类中的字段,默认为当前枚举类型的实例 ,默认被public static final修饰。
枚举类型的字段根据枚举类名.字段名获取使用
枚举类的构造器默认私有化。
File:
文件和目录路径名的抽象表示。
注意:Java中路径分隔符可以使用 / // \\
Java中使用相对路径是,默认根路径是当前所在项目的根目录。
IO流:
读写文件内部的内容,上传下载、拷贝文件、拷贝文件夹。
流:就是管道,以先入先出的方式进行流动。管道中的数据时一次性读写。
流的分类:
流向:输入流、输出流;
操作单元:字节流 、字符流;
功能:节点流、处理(功能)流。
所有分类都是相辅相成。
字节输出流:outputstream这个抽象类是代表字节输出流的所有类的超类。
根据目的地选择节点流:
当目的地为字节数组:ByteArrayOutPutStream 字节数组输出流
目的地为文件:FileOutPutStream 文件字节输出流
注意:如果目的地文件不存在,系统会自动创建目的地文件,但是目的地文件所在路径(文件夹)不会自动创建。
Try-with-resources:对try中创建的资源在使用完毕之后进行关闭,要求资源的类型必须实现了AutoCloseable接口。