S课堂笔记
1.StringBuffer 和 StringBuilder
什么是StringBuffer
字符串缓冲区 是一个容器
可以对字符串内容进行增删改查操作
StringBuffer是可变长度的
特点:
1.长度可变的
2.可以直接操作多个数据类型
3.最终会通过toString()方法变成字符串
常用方法:
1.存储
将指定的数据作为参数 追加到已有数据的末尾
StringBuffer append(String str)
在指定位置 添加数据
StringBuffer insert(int offset,String str)
2.删除
删除指定区间的数据 包含头 不包含尾
StringBuffer delete(int start,int end)
删除指定位置的字符
StringBuffer deleteCharAt(int index)
3.获取
获取某一个位置上的字符
char charAt(int index)
获取指定字符串第一次出现的位置
int indexOf(String str)
获取指定字符串最后一次出现的位置
int lastIndexOf(String str)
获取长度
int length()
截取
String substring(int start)
4.修改
将指定区间内的字符串 修改为 传入的新的字符串 包含头 不包含尾
StringBuffer replace(int start,int end,String str)
替换指定位置的字符
void setCharAt(int index, char ch)
5.反转
StringBuffer reverse()
String 和 StringBuffer的区别****
转换
String --> StringBuffer
1.通过构造方法
2.通过append()方法
StringBuffer --> String
1.通过toString()方法
2.通过substring()方法
3.通过String的构造方法
区别
相同点:都是操作字符串的
不同点:
1.从生成字符串的角度而言
在拼接多个字符串情况下
StringBuffer 效率 > String效率
StringBuffer是在原有基础上的追加
String 每一次拼接 都会创建一个新的字符串
2.值传递和址传递
String类型虽然是引用数据类型
但是在它作为方法的参数传递的时候 传的是值
和基本数据类型/基本数据类型包装类 一样
StringBuffer作为参数传递的时候 传的是址
StringBuilder
StringBuffer 和 StringBuilder的区别:
一样的 Buffer怎么用 Builder就怎么用
区别:
相同点:
都是操作字符串的 都是容器
不同点:
StringBuffer是jdk1.0版本出现的
是线程同步的 线程安全的 效率低
StringBuilder是jdk1.5版本出现的
是线程不同步的 线程不安全的 效率高
按照操作字符串的效率来排序:
StringBuilder > Stringbuffer > String
2.常用类
2.1 System
System 类包含一些有用的类字段和方法。它不能被实例化。
属性:
static InputStream in “标准”输入流。
static PrintStream out “标准”输出流。
方法:
static void gc()
运行垃圾回收器。
调用Object类中的 protected void finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
当垃圾回收机制启动时调用该方法
当垃圾回收器确定该对象为垃圾时(没有引用的时候) 由对象的垃圾回收器不定时自动回收
static void exit(int status)
终止当前正在运行的 Java 虚拟机。
非0状态 表示异常终止
static long currentTimeMillis()
返回以毫秒为单位的当前时间。
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
Object src, 要复制的数组
int srcPos, 是从要复制的数组的第几个开始
Object dest, 复制到哪儿
int destPos, 是复制到数组的第几个开始
int length 复制的长度
2.2 Runtime
每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
可以通过 getRuntime 方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。
2.3 Math
lang包
Math 类包含用于执行基本数学运算的方法,
static double random() 伪随机数
返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
static int max(int a, int b)
返回两个 int 值中较大的一个。
static int min(int a, int b)
返回两个 int 值中较小的一个。
static int abs(int a)
返回 int 值的绝对值。
static double sqrt(double a)
返回正确舍入的 double 值的正平方根。
static double ceil(double a)
向上取整 返回的是大于等于该参数的整数
static double floor(double a)
向下取整 返回的是小于等于该参数的整数
static long round(double a)
四舍五入
2.4 Random
java.util
此类的实例用于生成伪随机数流
int nextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
Math.random()方法 和 Random类 创建随机数区别:
1.Math 不用导包 Random得导包
2.Math调用静态方法 不用创建对象
Random类需要创建对象 才能掉方法
3.random()方法返回值是double类型
Random类 随着方法调用不同 可以返回不同类型的随机数
2.5 Date
java.util
类 Date 表示特定的瞬间,精确到毫秒。
构造方法
Date()
分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
Date(long date)
分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
成员方法
long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
SimpleDateFormat
java.text
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
构造方法
SimpleDateFormat()
用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
成员方法
String format(Date d) 将Date类型按照格式 转换成String 格式化
Date parse(String str) 将String类型按照格式 转换成Date 解析
这个方法 会有一个隐藏的异常
2.6 Calendar
java.util
Calendar 类是一个抽象类,
Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
3.异常
异常就是java程序在运行的过程中 出现的错误
程序在运行时出现的不正常情况
其实异常本身也是一个类类型
java对不正常的情况进行了描述
异常的分类:
Throwable 是所有异常的 根类
Error 错误
当程序发生不可控制的错误时
通常做法是通知用户 终止程序
服务器宕机
内存溢出 OutOfMemoryError
数据库崩溃
Exception 异常
Checked 受检异常(编译时异常)
只有java提供了受检异常
ClassNotFoundException
NoSuchMethodException
RuntimeException 运行时异常
NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 角标越界异常
NumberFormatException 数据格式转换异常
ClassCastException 强制类型转换异常
instanceof
异常的处理机制 捕获 和 抛出
JVM默认是如何处理异常呢?
main函数收到一个问题 有两种解决方法
1.自己解决
2.自己解决不了 交给jvm解决
jvm有一个默认的异常处理机制 就是将该异常显示出来
包括 异常名称 信息 出现的位置
异常的两种处理方式:
1.try...catch...finally 捕获并处理 自己解决
格式:
try{
需要被检测的代码(就是可能出现异常的代码)
}catch(异常类型 变量名){
处理该异常的代码
}
//可省略
finally{
一定会执行的语句
}
Throwable中的常用方法:
String getMessage() 返回此 throwable 的详细消息字符串。
void printStackTrace() 将此 throwable 及其追踪输出至标准错误流。
String toString() 返回此 throwable 的简短描述。
2.throws 抛出
格式:
[访问权限修饰符] 返回值类型 方法名(参数列表)throws 异常1,异常2,异常3....{
方法体
}
区别:
try...catch 自己处理 程序可以继续运行
throws 谁调用我 谁处理我 程序会被终止 不会继续运行
try...catch方式处理异常的特殊情况 ---> 多异常的时候
1.catch 异常时 建议catch更具体的异常 这样可以更有针对性的处理问题
2.try后面可以有多个catch 小的异常放前面 大的异常放后面
在jdk1.7之后 出现一个catch同时可以捕获多个异常的情况
每个异常类名之间用 | 分割
finally的作用:
用来释放内存 io流 和 数据库连接 会用上
注意:
1.finally不能单独存在 需要和try联合使用
2.try...catch..finally中出现return的情况
1.当catch中有return的时候 同时有finally语句块
先将catch中的return的值保存到一个临时区域 然后执行finally里的内容 再进行最终的返回
2.当try中有return的时候 同时有finally语句块
先将try中的return的值保存到一个临时区域 然后执行finally里的内容 再进行最终的返回
3.当finally中有return 的时候 就返回finally中的值
finally最好不要写return 因为碰到return程序会提前退出 也就无法返回try或者catch中的值了
final finalize() finally的区别
final 最终的 是修饰符
修饰的类 不能被继承
修饰的方法 不能被重写
修饰的变量 是常量
finalize() 是一个方法 当垃圾回收器确定对象为垃圾的时候
由对象的垃圾回收器gc() 自动调用该方法
finally 是try语句中的一个语句体 不能单独使用
主要作用是释放资源