记录生活中的点点滴滴

0%

进阶6

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中引入了一个“整型常量池”,在方法区中
该整型常量池只容乃-127
128的数据

获取自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();