标签:
异常简介
在Java中,所有的异常都有一个共同的祖先Throwable(可抛出)。Throwable指定代码中可用异常传播机制通过Java应用程序传输任何问题的共性。
在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
try {
// 可能会发生异常的程序代码
} catch (Type1 id1){
// 捕获并处置try抛出的异常类型Type1
}
catch (Type2 id2){
//捕获并处置try抛出的异常类型Type2
}
关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域。Java方法在运行过程中出现异常,则创建异常对象。将异常跑出监控区域之外,由Java运行时系统试图寻找匹配的catch字句以捕获异常。若有匹配的catch字句,则运行其异常处理代码,try-catch语句结束。
匹配的原则是:如果抛出的异常对象属于catch字句的异常类,或者属于该异常的子类,则认为生成的异常对象与catch块不活的异常类型相匹配。
try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
catch 块:用于处理try捕获到的异常。
finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。在以下4种特殊情况下,finally块不会被执行:
a)在finally语句块中发生了异常。
b)在前面的代码中用了System.exit()退出程序。
c)程序所在的线程死亡。
d)关闭CPU。
如果一个方法可能会出现异常,但没有能力处理这种异常,可以再方法声明处用throws字句来声明抛出异常。
throws语句用在方法定义时声明该方法要抛出的异常类型,如果抛出的是Exception异常类型,则该方法被声明为抛出所有的异常。多个异常可使用逗号分割。
throws语句的语法格式为:
methodname throws Exception1,Exception2,..,ExceptionN
{
throw new Exception("异常说明");
}
方法名后的throws Exception1,Exception2,...,ExceptionN 为声明要抛出的异常列表。当方法抛出异常列表的异常时,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由他去处理。
使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。
在程序中使用自定义异常类,大体可分为以下几个步骤。
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常。
在try-catch做具体处理的时候,在catch部分不做具体处理而仅仅是用throw这个关键字将异常主动抛出来。然后在通过关键字throws
继续抛出该方法异常。常常会再捕获一个异常后跑出另外一个异常,并且希望把异常原始信息保存下来,这被称为异常链。
在Java中,字符串被作为String类型的对象处理。String类位于java.lang包中。默认情况下,该包被自动导入所有的程序。
1、Java字符串的不变性。String对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。(每次new一个字符串就是产生一个新的对象,即便两个字符串的内容相同。使用"=="比较为false,如果只比较内容是否相同,应使用"equals"方法)。如果是多次出现的字符常量,Java编译程序只创建一个。
使用indexOf()进行字符或字符串查找时,如果匹配返回位置索引,否则返回-1;
使用substring(beginInsex, endIndex)进行字符串截取时,包括beginIndex位置的字符,不包括endIndex位置的字符。
"=="和equals()方法的区别:"=="判断两个字符在内存中的首地址是否相同,及判断是否为同一个字符串对象,equals()方法比较尊处在两个字符串对象中的内容是否一致。
在Java中,除了可以使用String类来存储字符串,还可以使用StringBuilder类存储字符串。当频繁操作字符串时,就会额外产生很多临时变量。使用StringBuilder或者StringBuffer就可以避免这个问题。
StringBuilder和StringBuffer区别:StringBuffer是线程安全的,而StringBuilder则没有实现线程安全的功能,所以性能略高。
StringBuilder类的常用方法:
Java语言是一种面向对象的语言,但是Java中的基本数据类型不是面向对象的。Java为每个基本数据类型都提供了一个包装类,这样就可以像操作对象那样来操作基本数据类型。
基本类型和包装类之间的对应关系:
包装类主要提供了两大类方法:
将字符串赫本类型及包装类互相转换的方法。
Inter包装类的特性:
构造方法:
常用方法:
Java基本类型和包装类之间的转换
基本类型和包装类型之间经常需要互相转换。在JDK1.5引入自动装箱和拆箱机制后,包装类和基本类型之间的转换更加轻松便利了。
装箱:把基本类型转换为包装类,使其具有对象的性质,又可分为手动装箱和自动装箱。
拆箱:把包装类对象转换成基本类型的值,又分为手动拆箱和自动拆箱。
基本类型转换为字符串有三种方法:
使用String类的valueOf()方法;
用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串。
将字符串转换为基本类型:
在java.util包中的Date类最主要的作用就是获取当前时间(使用Date类的默认无参构造方法创建的对象就代表当前时间)。
在java.text包中的SimpleDateFormat类来对日期进行格式化。
使用parse()方法将文本转换为日期。
注意:
Date类的最主要作用就是获得当前的时间,,Calendar类进行时间和日期的处理。Java.util.Calendar类是一个抽象类,可以通过getInstance()静态方法获取一个Calendar对象,此对象已由当前日期时间初始化,即默认代表当前时间,如Calendar c = Calendar.getInstance();调用Calendar类的getInstance()方法获取一个实例,然后通过调用get()方法获取日期时间信息,参数为需要或得的字段的值,Calendar.Year等为Calendar类定义的静态常量。
Calendar类提供了getTime()方法,用来获取Date对象,完成Calendar和Date的转换,还可以通过getTimeMillis()方法获取此Calendar的时间值,以毫秒为单位。
Math类位于java.lang包中,包含用于执行基本数学运算的方法,Math类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如Math.round();常用的方法:
在类的内部,对数据进行组织;
简单而快速的搜索大数量的条目;
有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素;
有的集合接口提供了映射关系,可以通过关键字(key)去快速查找对应的唯一对象,而这个关键字可以是任意类型查找所映射的具体对象。
数组的长度固定,集合的长度可变;
数组只能通过下表访问元素,类型固定,而有的集合可以通过任意。
Java集合架构支持三种类型的集合:规则集(Set),现行表(List),和图(Map),分别定义在Set,List,Map中。Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素(表),Map存储医嘱对象-关键值的映射。
Collection接口:
Set接口:
HashSet具体类
LinkedHashSet具体类
TreeSet具体类
List接口:
ArrayList具体类
LinkedList具体类
向量类Vector具体类
Stack具体类
Map接口:
HashMap类
LinkedHashMap类
TreeMap类
具体框架如下图所示:
List是元素有序并且可以重复的集合,被称为序列
List可以精确地控制每个元素的插入位置,或删除某个位置的元素
ArrayList—数组序列,是List的一个重要实现类
ArrayList底层是数组实现的。
标签:
原文地址:http://www.cnblogs.com/willhunting/p/5053278.html