1.异常是什么?
第一,异常模拟的是现实世界中的不正常“事件”
第二,java中采用“类”去模拟异常
第三,类是可以创建对象的
NullPointerExeption e = 0x1234;
e是引用类型,e中保存的内存地址指向堆中的“对象”
这个对象一定是NullPointerException类型
这个对象就表示真实存在的异常事件
NullPointerException是一类异常
“抢劫”就是一类异常
“张三被抢劫”就是一个异常事件
2.异常机制的作用?
java语言为我们提供一种完善的异常处理机制,
作用是:程序发生异常事件之后,为我们输出详细的信息
程序员通过这个信息,可以对程序进行一些处理,使程序
更加健壮。
本质:程序执行过程中发生了算术异常这个事件,JVM为我们创建了ArithmeticException类型的对象
并且这个对象中包含了异常的详细信息,并且JVM将这个对象中的信息输出到控制台。
所有Exception的直接子类都是编译型异常(发生的概率比较高)
所有编译时异常,要求程序员在编写程序阶段,必须对它进行处理,如果不处理的话
编译不通过。处理异常有两种方式,捕捉和声明抛出。捕捉:try…catch…,声明抛出
就是在方法声明的位置上使用throws关键字抛出异常。
所有RuntimeException的子类都是运行时异常,运行时异常程序员在编写阶段(发生的概率比较低)
不需要对它进行处理
处理异常有两种方式:
1.声明抛出 throws
2.捕捉 try ..catch..
数组:
- 数组是一种引用类型
- 数组是一种简单的数据结构,线性结构
- 数组是一个容器,可以用来存储其他元素
- 数组可以存储任意类型数据结构的元素
- 数组分为:一维数组,二维数组,三维数组,多维数组
- 数组中存储的元素类型是统一的
- 数组长度不可变,数组一旦创建长度不可变的,固定的
数组拿首元素的内存地址作为数组对象的内存地址
数组中存储元素的类型是统一的,每一个元素在内存中所占的空间大小是相同的,
知道数组的首元素内存地址,要查找的元素只要知道下标就可以快速的计算出偏移量
通过首元素内存地址+偏移量,快速计算出要查找元素的内存地址,通过内存地址快速
定位该元素,所以数组查找元素的效率较高
随机的对数组进行增删元素,当增加元素的时候,为了保证数组中元素在空间存储上是有序的,
所以被添加元素位置后面的所有元素都要向后移动。删除元素也是,后面所有的元素要向前移动
所以数组的增删元素的效率很低
初始化一维数组
1.静态初始化
2.动态初始化
动态初始化一维数组,会先在堆内存中分配这个数组,并且数组中每一个元素都采用默认值
关于main方法中的参数俩表String[] args
1.String[] args是专门用来接收命令行参数的
2.列如:java ArrayTest abc def aaa
JVM在调用ArrayTest 的main方法之前先将”abc def aaa”这个字符串以空格的方式分割,然后存储在
String数组中
关于数组的拷贝
System.arraycopy
二维数组的特点:
1.二维数组是一个特殊的一维数组
2.特殊的一维数组,特殊在一维数组的每一个元素都是“一维数组”
二分法查找:
1.建立在已经排序的基础上的
数组中没有重复元素
java.lang.String
1.字符串一旦创建不可再改变。“abc”字符串一旦创建,不可变成“abcd”
2.提升字符串的访问效率,在程序中使用了“缓存”技术,所以在java中所有使用双引号括起来的字符串都会在”字符串常量池”中创建一份
字符串常量池在方法区中
3.在程序执行过程中,如果程序用到某个字符串,例如“abc”,那抹程序会在字符串常量池中搜索字符串,如果没有找到则在字符串常量池中新建一个“abc”字符串,如果找到就直接拿过来用 [字符串常量池是个缓冲区,为了提高字符串的访问效率]
使用String需要注意的问题:尽量不要做字符串频繁拼接的操作
因为字符串一旦创建不可改变,只要频繁拼接,就会在字符串常
量池中创建大量的字符串对象,给垃圾回收带来问题.
关于字符串常用方法
- char charAt(int index)
- boolean endsWith(String endStr)
- boolean equalsIgnoreCase(String anotherString) 判断字符串是否相等,忽略大小写
- getBytes
- indexOf / indexOf(String str,int fromIndex)
- lastIndexOf(String str) / lastIndexOf(Sting fromIndex) 反向搜索
- length
- String replaceAll(String s1,String s2)
- split
- boolean startsWith(String s)
- String substring(int begin) / String substring(int beginIndex,int endIndex)
- char[] toCharArray
- toUpperCase
- toLowerCase
- trim
- String valueOf(Object obj)
正则表达式
1.正则表达式是一门独立的学科
2.正则表达式是一种字符模型,专门做字符串格式匹配的
3.正则表达式是通用的
java.lang.StringBuffer
java.lang.StringBuilder
1.StringBuffer和StringBuilder是什么?
是一个字符串缓冲区
2.工作原理
预先在内存中申请一块空间,以容乃字符序列
如果预留的空间不够用,则进行自动扩容,以容纳更
多字符序列。
3.StringBuffer,StringBuilder和String的最大区别?
String是不可变字符序列,存储字符串常量池中
StringBuffer底层是一个char数组,但是该char数组是可变的
并且可以自动扩容
4.StringBuffer和StringBuilder的默认初始化容量是16
5.如何优化StringBuffer和StringBuilder
最好在创建StringBuffer之前,预测StringBuffer的存储字符数量
然后再创建StringBuffer的时候采用指定容量的方式创建StringBuffer
为了减少底层数组的拷贝,提交效率
6.StringBuffer线程安全
StringBuilder线程不安全
Java中八种数据类型对应的包装类型:
基本数据类型 包装类
byte java.lang.Byte
short java.lang.Short
int Java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
boolean java.lang.Boolean
char java.lang.Charactor
Integer中的常用方法:
int –> Integer 基本数据类型–>引用数据类型
Integer i1 = new Integer(10);
Integer – > int 引用数据类型 –> 基本数据类型
int i2 = i1.intValue();
String –> int 字符串转数字
int i3 = Integer.parseInt(“25”);
toBinaryString 十进制转成2进制
toHexString 十进制转成16进制
toOctalString 十进制转成8进制
int –> Integer
Integer i4 = Integer.valueOf(10);
String –> Integer
Integer i5 = Integer.valueOf(“10”);
Integet
int
String
三种类型互相转换
1.int–>Integer
Integer i1 = Integer.valueOf(10);
2.Integer–>int
int i2 = i1.intValue();
3.String–>Integr
Integer i3 = Integer.valueOf(“10”);
4.Integer –> String
String s1 = i3.toString();
5.string –> int
int i4 = Integer.parseInt(“123”);
6.int –> String
String s5 = 10 + “”;
JDK5.0新特性:
以下的特性适合JDK1.5版本之后的。包括1.5
JDK1.4,包括1.4在内之前的所有版本不能使用以下特性
自动装箱(auto_boxing)和自动拆箱(auto_unboxing)
深入自动装箱和自动拆箱
1.自动装箱和自动拆箱是程序编译阶段的一个概念
和程序运行无关
2.自动装箱和自动拆箱主要目的是为方便程序员编码
Integer重写了equals方法
如果数据是在-128 127之间,java中引入了一个“整型常量池”,在方法区中
该整型常量池只容乃-127128的数据
获取自1970/1/1 00/00/00/000到当前的毫秒数(时间戳)
System.currentTimeMillis();
获取系统当前时间对应的毫秒数
Date类
格式化日期
java.util.Date –> String
sdf.format()
解析日期
String –> java.util.Date
sdf.parse()
解析格式应该和字符串相同
日期格式
y 年
M 月
d 日
H 小时
m 分
s 秒
S 毫秒
Date t1 = new Date(1000);
1000是自1970-1-1 00:00:00 000的毫秒数
java.math.BigDecimal
该类型精确度极高,适合做财务软件
财务软件double类型精确度太低
生成随机数
创建随机数生成器
Random random = new Random();