Java-常用类,异常类,容器
常用类
- 字符串相关:String, StringBuffer, StringBuilder;
- 日期时间:Date, Calendar, SimpleDateFormat;
- 包装类:Byte,Bollean,Short,Character,Integer,Long,Float,Double;
- 其他:Math,Random,Runtime,System;
字符串相关-String
String-创建:String str = "Java"; String str = new String("Java");
String(str[ ] bytes, String Charset); // bytes--数组字节数;Charset--字符编码格式;
String str = String(char[ ]) // 通过字符数组创建字符串;
常用方法:
- 字符串比较:(str1 == str2); str1.equals(str2); equalsIgnoreCase(str); startsWith(str); endsWith(str); compareTo(str);
- 去字符串两端空格: tirm( );
- 字符串长度:.length( );
- 转换成大/小写:.toLowerCase(); .toUpperCase();
- 查找子字符出现的位置:.index(Str, ch); //下标从0开始,未找到返回值为-1;
- 字符串替换:replace(str1,str2);
- 字符串拆分成数组:.rplit(str);
- 字符串截取:.subString(int start, int end);
字符串相关-StringBuilder(以下简称SB)
和String相比,SB所创建的字符串是可以随时修改的,不会像String一样随着使用不断创建新的对象,从而起到节省内存的作用。定义时,会分配一定的空间,若空间不足,则再追加50%,继续在空内存里进行操作。
SB的创建:StringBuilder str = new StringBuilder("str//创建时,此处可以为空");
SB的常用方法:
- insert(int start, String str); // start位处,插入str;
- spprnd(String str); // 把str接到字符串末;
- delet(int start, int end); // 删除字符串从start 到 end位的字符;
- reverse(); // 字符串逆序;
- toString(); // 转化为String形式;
- length(); // 取字符串的长度;
- setChar(int weizhi, char ch); 将字符 ch 设置到字符串的 weizhi 位上;
字符串相关-StringBuffer
StringBuffer创建时会默认分配一定长度的内存,使用时就是不断往内存里添加。如果,内存不够,则再扩充一倍的空间。不过,StringBuffer的安全性要高一些(线程安全),但是效率相较StringBuilder低。
创建,常用方法(参考StringBuilder)
时间日期-Date
Date 类表示日期和时间,里面封装了操作日期和时间的方法。Date 类经常用来获取系统当前时间。
Date创建方法:Date date = new Date(); // 用于获得当前的时间;
Date date = new Date(long); // 算从1970.01.01到当前时间的毫秒数;
Date常用方法:
- getYear(),getMonth(),getDate(),getHuors(),getMinutes(),getSeconds(); // 获得年,月,日,时,分,秒;
- setYear()...; // 设置年...;
时间日期-Calendar
Calender创建:Calendar calendar = Calendar.getInstance();
Calender常用方法:
- get(); // 获得日期的一部分;
- set(); // 设置日期的某个部分;
- add(); // 追溯时间的某个部分;
时间日期-SimpleDateFormat(以下简称SDF)
SDF创建:SimpleDateFormat sdf = new SimpleDateFormat("格式");
格式(yyyy-MM-dd hh/HH-mm-ss)
yyyy-MM-dd(年-月-日) hh/HH-mm-ss(时12/24制-分-秒)
包装类
即为基本数据类型对应的类
数据类型 | 对应包装类 |
byte | Byte |
boolean | Bollean |
short | Short |
character | Character |
integer | Integer |
long | Long |
float | Float |
double | Double |
Math类
Math类即相当于是基本数学运算
基本方法:
方法 | 返回值类型 | 作用 |
abs( ); | int | 求绝对值(但是也可以接收,浮点类型数) |
round( ); | long / int | 四舍五入取整(double返回类型为long,float返回类型为 int) |
max( ); | int | 返回两数字的大值(但是也可以接收,浮点类型数) |
min( ); | int | 返回两数字的小值(但是也可以接收,浮点类型数) |
sin( ); | double | 计算正弦值 |
cos( ); | double | 计算余弦值 |
asin( ); | double | 计算反正弦 |
acos( ); | double | 计算反余弦 |
atan( ); | double | 计算反正切 |
pow( a, b); | double | 计算a的b次方 |
sqrt( ); | double | 开平方 |
ceil( n ); | double | 返回 >= n的最小整数 |
floor( n ); | double | 返回 <= n的最大整数 |
rint( n ); | double | 返回最接近n的整数 |
Random类
Random类主要是生成随机数,但是,随机也是按着一定规则随。(即是伪随机)
Random创建:Random random = new Random();
Random常用方法:
- nextInt(n,m); // 生成n到m范围内的整数;
- nextlong( ); // 类比nextInt;
- nextFloat(); // 生成0-1.0范围内的float型小数;
- nextDouble(); // 生成0-1.0范围内的double型小数;
System类
- 标准输入,输出以及错误输出流(in,out,err)并且都是静态方法。
- 访问外部定义的属性和环境变量;
- 加载文件和库的方法;
- 以及用于快速复制数组的实用方法。
Runtime类
系统运行时,获得和系统有关的信息.
Runtime创建: Runtime rt = Runtime.getRuntime();
异常类
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException 的异常。
异常发生的原因:
- 用户输入了非法数据。
- 要打开的文件不存在。
- 网络通信时连接中断,或者JVM内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。
主要的三种类型的异常:
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
Exception类的层次
异常类都是从Java.lang.Exception继承来的。异常类主要有两个字类IOException和RuntimeException。这里的Exception是从Throwable继承来的,Throwable还有一个子类Error。Error是不被处理的,就相当于是完全的错误。
Java 内置异常类
Java 语言定义了一些异常类在 java.lang 标准包中。
标准运行时异常类的子类是最常见的异常类。由于 java.lang 包是默认加载到所有的 Java 程序的,所以大部分从运行时异常类继承而来的异常都可以直接使用。
Java 根据各个类库也定义了一些其他的异常,下面的表中列出了 Java 的非检查性异常。
异常 描述 ArithmeticException 当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。 ArrayIndexOutOfBoundsException 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。 ArrayStoreException 试图将错误类型的对象存储到一个对象数组时抛出的异常。 ClassCastException 当试图将对象强制转换为不是实例的子类时,抛出该异常。 IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。 IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 IllegalStateException 在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 IllegalThreadStateException 线程没有处于请求操作所要求的适当状态时抛出的异常。 IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 NegativeArraySizeException 如果应用程序试图创建大小为负的数组,则抛出该异常。 NullPointerException 当应用程序试图在需要对象的地方使用 null
时,抛出该异常NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。 StringIndexOutOfBoundsException 此异常由 String
方法抛出,指示索引或者为负,或者超出字符串的大小。UnsupportedOperationException 当不支持请求的操作时,抛出该异常。 下面的表中列出了 Java 定义在 java.lang 包中的检查性异常类。
异常 描述 ClassNotFoundException 应用程序试图加载类时,找不到相应的类,抛出该异常。 CloneNotSupportedException 当调用 Object
类中的clone
方法克隆对象,但该对象的类无法实现Cloneable
接口时,抛出该异常。IllegalAccessException 拒绝访问一个类的时候,抛出该异常。 InstantiationException 当试图使用 Class
类中的newInstance
方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。InterruptedException 一个线程被另一个线程中断,抛出该异常。 NoSuchFieldException 请求的变量不存在 NoSuchMethodException 请求的方法不存在
异常方法
下面的列表是 Throwable 类的主要方法:
序号 方法及说明 1 public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。2 public Throwable getCause()
返回一个Throwable 对象代表异常原因。3 public String toString()
使用getMessage()的结果返回类的串级名字。4 public void printStackTrace()
打印toString()结果和栈层次到System.err,即错误输出流。5 public StackTraceElement [] getStackTrace()
返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。6 public Throwable fillInStackTrace()
用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。
捕获异常(可比喻为事故多发路段)
try-catch块,try本身不能单独使用,其必须和catch(不可脱离try),fianlly(可有可无)中至少一者共同使用。我的理解就是try出现异常了,后面的catch/finally就上。异常就相当于是到了后面。多重捕获就是try后面跟了多个catch,主要是起到捕获不同种类异常的作用(顺带就可以理解一个catch就只专于一类异常)。finally,作用于最后。
主要关键字
try(驶入事故多发路段的提示):try就相当于用于标记可能出现异常的区域的标志,当出现异常时,后面跟着的catch就对异常进行处理。没有异常了就从finally出去,结束这一块代码的工作。
catch(处理事故的,交警,医护人员等):catch的作用对象就是异常类,try后面的每一个catch都可以看作专负责一类异常。就时相当于,每种异常都只能进入到与之相对应的那个catch里。
finally(出口):finally就是一个出口,从try进入,没有错误,catch不起作用就相当于是平安无事从出口出去。但是又不单纯是一个出口,finally也会进行现场的修复(清理处理异常过程中产生的垃圾文件等)。
throws/throw 关键字:如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明。throws 关键字放在方法签名的尾部。也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
自定义异常
异常均是Throwable的子类,检查性异常extends Exception、运行时异常 extends RuntimeException。
容器
概念
Java容器,顾名思义就是用于存装对象。在实际使用中,众多的数据,彼此之间总会存在着联系。数据之间的联系就是由存储结构中的数据结构所实现的。这里的容器就是相当于是,存储系统中的各个区域,每个区域有着不同的逻辑(即相当于不同的容器)。不过容器之间也存在着联系,从而将不同的容器装入同一个体系中去,继而形成了容器的继承体系。容器最大优点是,在使用过程中,节省了在程序运行时,不断进行对象创建的工作。
常见容器的继承关系图:
List列表
List由LinkedList和ArrayList来实现。
ArrayList:由数组实现,主要的优点就是随机访问,使得访问效率搞。但是也是由此插入和删除数据较慢。ArrayList虽然基本数据类型是数组但是,和基本的数组有着较大的区别,即是ArrayList长度可变,初始化时会给分配一个空间,当空间不足时就会进行扩容50%。
LinkedList:双向链表,主要优点是,删改效率高,缺点是查询效率低,与ArrayList形成互补。
Set集合
HashSet:存储的元素都是随机的,优点是查询速度快,但是线程不安全。
TreeSet:将元素存储在红-黑树结构中,存储结果是有顺序的。
LinkedHashSet:由hashcode确定元素的存储位置,便于维护元素的次序。
Map映射
HashMap:允许空的键值对出现,效率高,非线程安全。
HashTable:不允许空的键值对出现,效率低,线程安全。
TreeMap:HashMap继承的是AbstractMap,而TreeMap则继承的SortedMap,因此当希望获得存储的数据是被排序的时候,使用TreeMap。
Queue队列
Queue是队列,元素先进先出,且元素放入容器的顺序和取出的顺序是相同的。LinkedList提供了对Queue的实现,LinkedList向上转型为Queue。其中Queue有offer、peek、element、pool、remove等方法(offer是将元素插入队尾,返回false表示添加失败。peek和element都将在不移除的情况下返回对头,但是peek在对头为null的时候返回null,而element会抛出NoSuchElementException异常。poll和remove方法将移除并返回对头,但是poll在队列为null,而remove会抛出)