程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。
异常的作用?程序发生异常事件之后,为我们输出详细的信息,
程序员通过这个信息,可以对程序进行一些处理
异常和错误区别 异常的使用分为两种
一种是负责任的表现try catch finally
另一种是throw抛出给上级
自定义异常 基础类基础类就是八大基本数据类型
在基础库部分,Sun公司提供了极其丰富的功能类,为了便于区分,根据类的功能大致把这些类放在了不同的包内,例如.lang包、.util包、.io包、.sql包、.text包等等。
对于初学者来说,最为常用的工具类有封装类、String、StringBuffer、Random、Date、Calendar、SimpleDateFormat及Math静态类等等
包装类| 基本数据类型 | 对应包装类 |
|---|---|
| boolean | Boolean |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| char | Character |
| float | Float |
| double | Double |
包装类把基本数据类型的数据封装为引用类型的对象,而且提供了很多有用的方法
对于基本数据类型,Sun公司均提供了对应的包装类
所有的包装类均位于.lang包下,而这个包会由JVM编译器在编译时自动导入我们的程序,可以不用手工导入该包下的类而直接使用
包装类的方法
包装类主要是两种方法
一种是本类型和其它类型之间进行转换,另一种是字符串和本类型以及基本类型之间的转换
拆箱一种是自动拆箱,自动拆箱就是将包装类对象直接赋值给其对应的基本数据类型,另一种是手动拆箱,手动拆箱就是使用包装类中的方法
拿Integer类举例,如果想要把Integer类型的对象转换为int类型的数据,那么就可以使用intValue方法
装箱装箱分为自动装箱和手动装箱,自动装箱就是直接将基本数据类型赋值给包装类的对象引用,手动装箱就是使用包装类的构造方法,让基本数据类型作为构造方法的参数
Integer整数类,Character字符类,等等包装类
这些包装类都提供了很多种种方法,详细可以看jdk教程
Java String类String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
String类位于java.lang包下,是Java语言的核心类,提供了字符串的比较、查找、截取、大小写转换等操作;Java语言为“+”连接符(字符串连接符)以及对象转换为字符串提供了特殊的支持,字符串对象可以使用“+”连接其他对象。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
String 中常用的方法| 构造器 | 描述 |
|---|---|
| String() | 构造一个空字符串对象 |
| String(byte[] bytes) | 通过byte数组构造字符串对象 |
| String(char[] chars) | 通过字符数组构造字符串对象 |
| String(String original) | 构造一个original的副本,即拷贝一个original |
| String(StringBuffer buffer) | 通过StringBuffer数组构造字符串对象 |
| charAt(int index) | 取字符串中的某一个字符,其中的参数index指的是字符串中序数,字符串的序数从0开始到length()-1 |
| compareTo(String a) | 当前String对象与A比较。相等关系返回0,不相等时,从两个字符串第0个字符开始比较,返回第一个不相等字符差,另一种情况,较长字符串的前面部分恰巧是较短的字符串,返回它们的长度差。 |
| concat(String str) | 将该String对象与str连接在一起 |
| copyValueOf(char[] date,int offset,int count) | 两个方法将char数组转换成String与其中一个构造函数类似 |
| endsWith(String suffix) | 该String对象是否以suffix结尾 |
| getBytes() | 将Sting对象转换成byte数组. |
| getChars(int a,int b,char[] dst,int c) | 将字符串拷贝到字符串数组中。其中a为拷贝的起始位置、b为拷贝的结束位置、字符串数值dst为目标字符数组、c为目标字符数组的拷贝起始位置。 |
| indexOf(int ch) | 找第一个匹配字符位置 |
| length() | 当前字符串的长度 |
| replace(char oldchar, char newchar) | 将字符串中第一个oldchar替换成newchar。 |
| subString(int beginindex) | 取从beginindex位置开始到结束的子字符串 |
| toCharArray() | 该String对象转换成char数组 |
| toLowerCase() | 将字符串转换成小写 |
| toUpperCase() | 将字符串转换成大写 |
字符串大量用于我们的程序中,所以程序专门提供了字符串类,内有大量实用的方法
创建字符串对象两种方式的区别 直接赋值方式创建对象直接赋值方式创建对象是在方法区的常量池
String str="hello";//直接赋值的方式通过构造方法创建字符串对象
通过构造方法创建字符串对象是在堆内存
String str=new String("hello");//实例化的方式
String 为什么不可变
String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
String 类源码中有一个char数组,并且这个 char 数组是被final修饰的。因为数组一旦创建长度不可变。并且被final修饰的引用一旦指向某个对象之后,不可在指向其它对象,所以String是不可变的!
源码开头如下:
public final class String
implements java.io.Serializable, Comparable, CharSequence {
private final char value[];
三种有关字符串的类引用:面试题:String为什么不可变?StringBuffer/StringBuilder为什么是可变的?
java.lang.String:一般作为简单字符串类型
java.lang.StringBuffer:字符串缓冲区
java.lang.StringBuider:字符串缓存区
StringBuffer 字符串缓冲类在实际应用中,经常会遇到对字符串进行动态修改。这时候,String类的功能受到限制,而StringBuffer类可以完成字符串的动态添加、插入和替换等操作
对StringBuffer的修改,是直接的,不会创建多余的对象
1、这三个类的区别有两个方法,运行速度和线程安全。
首先说运行速度也就是执行速度,在这方面的快慢为 StringBuilder > StringBuffer >String.
String 最慢的原因是:String 为字符串的常量而 StringBuilder 和 StringBuffer 是字符串的变量,String 一旦创建之后是不可更改的,而 StringBuilder 和 StringBuffer 是变量是可以更改的。
Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。
而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
参考:Java常用类(二)String类详解
Random随机类相关推荐阅读:
- Java—String,StringBuffer,StringBuilde区别和操作
| 构造器 | 描述 |
|---|---|
| Random() | 创建一个新的随机数发生器 |
| Random(long seed) | 用一个种子(长整型)创建一个随机数发生器 |
此类用来产生随机数,位于.util包中,所以需要手工导包
Date时间类日期类中封装了有关日期和时间的信息,类 Date 表示特定的瞬间,精确到毫秒。用户可以通过调用相应的方法来获取系统时间或设置日期和时间



