Java 异常类和常用类、容器、泛型

目录

一、异常类

1.异常类简介

检查型异常:检查型异常需要程序员提供处理方式,如捕获或者抛出。除了Error和RuntimeException及其子类,其他的异常都是检查型异常。

错误:错误是由程序以外的因素引起的,通常不需要程序员关心。Error及其所有子类都是错误。

运行时异常:运行时异常是由程序员失误引起的,这些异常信息都可以避免。RuntimeException及其所有子类都是运行时异常

2.异常类修正

try-catch语句

3.自定义异常类

二、常用类

1.String类

构造方法:

成员方法:

2、StringBuffer和StringBuilder类

StringBuffer:多线程数据量多使用,线程安全StringBuilder:单线程数据量较多使用,线程不安全效率都比String高且节省内存

3.Object类

概况

Objects类的定义

4.Scanner类

Scanner类的简介

Scanner类的常用方法:n

5.Calendar类

三、容器

1.简介

2.Collection

3.Map

四、泛型

 1.定义

2.泛型的便利


一、异常类

1.异常类简介

所谓异常就是程序运行时可能出现的一些错误。异常类又分为三类:检查型异常、错误、运行时异常。如下:

检查型异常:检查型异常需要程序员提供处理方式,如捕获或者抛出。除了Error和RuntimeException及其子类,其他的异常都是检查型异常。

错误:错误是由程序以外的因素引起的,通常不需要程序员关心。Error及其所有子类都是错误。

运行时异常:运行时异常是由程序员失误引起的,这些异常信息都可以避免。RuntimeException及其所有子类都是运行时异常

2.异常类修正

try-catch语句

将可能出现的异常操作放在try-catch语句的try部分,一旦try部分抛出异常对象,或调用某个可能抛出异常对象的方法,并且该方法抛出了异常对象,那么try部分将立刻结束执行,转向执行相应的catch部分。所以程序可以将发生异常后的处理放在catch部分。

注:try-catch语句可以由几个catch组成,分别处理发生的相应异常。各个catch参数中的异常类都是Exception的某个子类,表明try部分可能发生的异常,这些子类之间不能有父子关系,否则保留一个含有父类参数的catch即可。

 

3.自定义异常类

在编写程序时可以扩展Exception类定义自己的异常类,然后根据程序的需求来规定哪些方法产生这样的异常。一个方法在声明时可以使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,即用相应的异常类创建对象,并使用throw关键字抛出该异常对象,导致该方法结束执行。

注:1.程序必须在try-catch块语句中调用可能发生异常的方法,其中catch的作用就是捕获throw关键字的异常对象。

2.throw是Java的关键字,该关键字的作用就是抛出。throw和throws是两个不同的关键字。

二、常用类

1.String类

注:Java把String类定义为final类,因此用户不能扩展String类,即String类不可以有子类。

构造方法:

String():创建一个空的字符串
String(byte[] bys):通过字节数组创建字符串
String(char[] chs):通过字符数组创建字符串
String(byte[] bys,int offset,int length):通过字节数组一部分创建字符串
String(char[] chs,int offset,int length):通过字符数组一部分创建字符串
String(String original):通过字符串常量值创建字符串

成员方法:

 判断功能

equals(Object obj):比较两个字符串是否相等
equalsIngnoreCase(Object obj):忽略大小写比较两个字符串是否相等
contains(String str):是否包含指定字符串
startsWith(String str):是否以指定的字符串开头
endWith(String str):是否以指定的字符串结尾
isEmpty():是否为空
matches(String regex):判断字符串是否匹配给定的正则表达式。
获取功能

length():获取长度
charAt(int index): 获取指定索引位置处的字符
indexOf(int ch):获取指定字符第一次出现的索引值(从0开始)
indexOf(int ch,int fromIndex):获取从指定索引位置开始,获取指定字符第一次出现的索引值
indexOf(String s):获取指定字符串第一次出现的索引值
indexOf(String s,int fromIndex):获取从指定索引位置开始,获取指定字符串第一次出现的索引值
lastIndexOf(int ch):获取指定字符最后一次出现的索引值
substring(int start):从指定位置开始一直截取到末尾
substring(int start,int end):截取[start,end-1]范围
转换功能

byte[] getBytes():将字符串转成字节数组
char[] toCharArray():将字符串转成字符数组
static valueOf(char[] chs):将char[]转成字符串
static valueOf(int num):将int类型转成字符串
static valueOf(Object obj):将任意类型转成字符串
toLowerCase():转成小写
toUpcase():转成大写
concat(String str):字符连接
其他功能

replace(char old,char new):将old字符替换成new字符
replace(String old,String new):将old字符串替换成new字符串
trim():去除两边空格
int compareTo(String s):字典比较,如果前面值小于后面值返回负数,否则返回正数,先比较第一个元素,如果相等再比较第二个元素…返回元素之间的差值;如果比较字符串有包含关系,返回的值是它们长度的差值
int compareToIgnoreCase(String s):忽略大小写字典比较
String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
String[] split(String regex): 根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit): 根据匹配给定的正则表达式来拆分此字符串。

2、StringBuffer和StringBuilder类


StringBuffer:多线程数据量多使用,线程安全
StringBuilder:单线程数据量较多使用,线程不安全
效率都比String高且节省内存

构造方法
StringBuilder():以默认容量创建空的StringBuilder对象
StringBuilder(int capacity):以指定容量创建空的StringBuilder对象
StringBuilder(String str):以指定的字符串创建StringBuilder对象
成员方法
获取功能
int capacity():获取容量
int length():获取长度
添加功能
append(int value):追加。可以追加多种类型
insert(int offset,String s):在指定的位置插入指定数据
删除功能
deleteCharAt(int index):删除指定索引处的元素
delete(int start,int end):删除[start,start-1]范围内的元素
替换功能
replace(int start,int end,String s):将[start,end-1]范围内的元素替换成指定字符串
反转功能
reverse():元素反转
截取功能
String subString(int start):截取指定位置一直到末尾
String subString(int start,int end):截取[start,end-1]范围
 

「StringBuffer和StringBuilder类:」

【相似点】

两者用法一模一样,可以认为是一个类

「String类的缺点:」

String 是一个不可变的数据类型,每每拼接都会产生一个新的字符串,那么内存迟早会被这些拼接的字符串塞满。

「String类和StringBuilder和StringBuffer类的区别:」

StringBuilder和StringBuffer:「可变的字符串,不产生新对象,比较省内存」 ,当进行大量的字符串拼接时建议使用StringBuffer和StringBuilder,但它们两个一些方法的实现几乎跟String一样。

【区别】

  1. StringBuffer线程安全,StringBuilder非线程安全。
  2. StringBuilder相比于StringBuffer有速度优势,「多数情况下建议使用StringBuilder类,但当被要求线程安全时必须使用StringBuilder类」

3.Object类

概况

Object是Java类库中的一个特殊类,也是所有类的父类。也就是说Java允许把任何类型的对象赋给Object类型的变量。当一个类被定义后,如果没有指定继承的父类,那么默认父类就是Object类。Objects包含Object类的静态实用程序方法,是JDK1.7版本添加的一个工具类,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。
 

Objects类的定义

public final class Objects {...}

未标注继承与实现,但是默认继承Object类。

4.Scanner类

Scanner类的简介

Scanner类主要用于扫描用户从控制台输入的文本。

Scanner类的常用方法:n


(1)、next()

获取输入的字符串;
不仅接受键盘输入的内容,还进行分割;
默认的分隔符为空格,以回车Enter为结束符,回车enter后的内容则放入缓冲区。
(2)、nextLine()

获取输入的字符串;
可以加空格,以回车Enter为结束符;
可以获得空白。

5.Calendar类
 

Calendar类在Java.util包中。使用Calendar类的static方法getInstance()可以初始化一个日历对象,例如:

Calendar calendar = Calendar.getInstance();

然后,calendar对象可以调用方法:

public final void set(int year,int month,int date)
public final void set(int year,int month,int date,int hour,int minute)
public final void set(int year,int month,int date,int hour,int minute,int second)

将日历翻到任何一个时间,当参数year取负数时表示公元前(实际世界中的公元前)

 calendar对象调用方法public int get(int field)可以获取有关年份、月份、小时、星期等信息,参数field的有效值由Calendar的静态常量指定。

三、容器

1.简介

容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。

容器主要分为两大类:Map和Collection。

  • Collection
    • List
      • ArrayList
      • LinkedList
      • Vector
      • Stack
    • Set
      • HashSet
      • LinkedHashSet
      • TreeSet
  • Map
    • HashMap
      • LinkedHashMap
    • TreeMap
    • ConcurrentHashMap
    • Hashtable

2.Collection

Arraylist: Object数组

Vector: Object数组

LinkedList: 双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环)

stack:一种先进先出的数据结构,被称为栈,它只有一端可以出入。
           栈中进入数据称为——入栈(push)
           栈中弹出数据称为——出栈(pop)

HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素

LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。

TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树。)

3.Map

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

HashMap: JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间

LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。

Hashtable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。

TreeMap: 红黑树(自平衡的排序二叉树)
 


四、泛型

 1.定义

 泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法

2.泛型的便利

(1)保证了类型的安全性。

在没有泛型之前,从集合中读取到的每一个对象都必须进行类型转换,如果不小心插入了错误的类型对象,在运行时的转换处理就会出错。

(2) 消除强制转换

泛型的一个附带好处是,消除源代码中的许多强制类型转换,这使得代码更加可读,并且减少了出错机会。

(3)避免了不必要的装箱、拆箱操作,提高程序的性能

在非泛型编程中,将筒单类型作为Object传递时会引起Boxing(装箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,就不必进行Boxing和Unboxing操作了,所以运行效率相对较高,特别在对集合操作非常频繁的系统中,这个特点带来的性能提升更加明显。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值