包装类和异常

包装类

定义:专门将简单数据类型的数据进行封装,形成对应的包装类

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
doubleDouble
floatFloat
charCharacter
booleanBoolean
装箱拆箱:
手动装箱

概念:由基本数据类型,完成向对应的包装类型进行转换

作用:为了更好的存储

方式1:

可以通过每一个包装类的构造方法来完成。在每一个包装类的构造方法中,都有一个与之对应的基本数据类型作为参数的重载方法。此时,直接将需要包装的基本数据类型,写到构造方法的参数中即可完成装箱

Byte b = new Byte((byte)1);
Short s = new Short((short)2);
Integer i = new Integer(3);
Long l = new Long((long)4);
Float f = new Float((float)5.0);
Double d = new Double(6.0);
Character c = new Character('a');
Boolean bool = new Boolean(false);

方式2:

Byte b = Byte.valueOf((byte)1);
Short s = Short.valueOf((short)2);
Integer i = Integer.valueOf(3);
Long l = Long.valueOf((long)4);
Float f = Float.valueOf((float)5.0);
Double d = Float.valueOf(6.0);
Character c = Character.valueOf('a');
Boolean bool = Boolean.valueOf(true);

手动拆箱:

概念:由包装类型,完成向对应的基本数据类型进行转换

作用:为了方便计算

方式:

Byte b = Byte.valueOf((byte)100);
byte newB = b.byteValue();

Short s = Short.valueOf((short)100);
short newS = s.shortValue();

Integer i = Integer.valueOf(100);
int newI = i.intValue();

Long l = Long.valueOf((long)100);
long newL = l.longValue();

Float f = Float.valueOf((float)100.0);
float newF = f.floatValue();

Double d = Double.valueOf(100.0);
double newD = b.doubleValue();

Character c = Character.valueOf('a');
char newC = c.charValue();

Boolean bool = Boolean.valueOf(true);
boolean newBool = bool.booleanValue();

备注:

某些包装类对象,除了可以拆箱成对应的基本数据类型的数据之外,还可以将包装起来的数组转成其他的基本数据类型的数据。例如:Integer,除了有intValue之外,还有byteValue等方法。其实,就是将包装类中包装起来的int数据,强转为byte类型返回结果。在使用的时候,找自己需要的方法去转型即可

自动装箱拆箱

概念:

所谓的自动装箱和自动拆箱,指的是在进行装箱和拆箱的时候,不再使用上面的方法完成装箱和拆箱的操作,在JDK1.5之后,装箱和拆箱是可以自动完成的!只需要一个赋值语句即可

方式:没有什么特殊语法,直接进去赋值即可

//自动拆箱:由一个基本数据类型,到对应的包装类型的转换,只需要一个赋值语句即可完成
Integer i = 10;
//自动拆箱:由一个包装类型,到对应的基本数据类型的转换。只需要一个赋值语句即可完成
int newI = i;

注意:虽然已经有了自动的装箱和拆箱,但是还需要掌握手动的装箱和拆箱,是因为有些情况下,自动的装箱和拆箱无法使用

/*
如果在一个类的重载方法中,有两个方法的参数类型,一个是基本数据类型,一个是对应的包装类型。此时,将无法使用自动装箱和拆箱,必须通过手动的装箱和拆箱完成对应的方法的调用
*/
public static void main(String[] args){
    //此时,10会最先匹配到int类型的参数
    show(10);
    show(Integer.valueOf(10));
}
public static void show(int a){
    System.out.println("我是int型")
    System.out.println(a);
}
public static void show(Integer a){
    System.out.println("我是Integer型")
    System.out.println(a);
}

享元原则:

概念:

享元原则是程序设计的一个基本原则。当我们需要在程序中频繁的使用到一些元数据的时候,此时,我们可以提前将这些元数据准备好,当需要的时候,可以直接拿过来使用,使用完成之后,也可以不进行销毁,以便下次继续使用

包装类中的享元:

将常用到的基本数据类型对应的包装类对象预先存储起来,当使用到这些基本数据类型对应的包装类对象的时候,可以直接拿过来使用,不需要再实例化新的对象

示例:Integer类中,将[-128,127]范围内的数字对应的包装类对象预先存储到了一个Integer.cache数组中,每当我们用到这个范围内的数字的时候,可以直接从这个数组中获取到元素。如果用到了不在这个范围内的数字,再去进行新的包装类对象的实例化,这样,不用频繁的开辟空间,销毁空间,节省了CPU资源

//此时,由于10在缓存范围内,因此可以直接从数组中获取包装类对象
Integer i1 = Integer.valueOf(10);
Integer i2 = Integer.valueOf(10);
System.out.println(i1 == i2);

//此时,由于200不在缓存范围中,因此这个方法会返回一个性的包装对象
Integer i3 = Integer.valueOf(200);
Integer i4 = Integer.valueOf(200);
System.out.println(i3 == i4);

字符串和基本数据类型转换

基本数据类型转型成字符串

概念:

基本数据类型,转成字符串,希望得到的结果是这个数值转成字符串的样式。其实,就是直接给个数字添加上双引号

方式1:

可以将字符串拼接运算符完成。当加号两端有任意一方是字符串的时候,此时都会自动的把另一方也转成字符串,完成字符串的拼接。所以,当需要把一个基本数据类型的书库转成字符串时,只需要在另一拼接上一个空字符串即可

int a = 10;
String str = a + "";

方式2(推荐):使用String包装类的valueOf完成

String str = String.valueOf(10);

方式三:借助包装类的实例方法toString方法

String str = Integer.valueOf(10).toString();

方式四:借助包装类的静态方法toString方法

String str = Integer.toString();

字符串类型转型基本数据类型

概念:

字符串类型转基本数据类型,其实就是解析出这个字符串中的内容,转型成对应的基本数据类型的表示

注意事项1:基本数据类型转字符串肯定是没有问题的,但是由字符串转到基本数据类型的时候,可能出现问题,字符串中的内容,不一定能够转成希望转成的基本数据类型,如果转换失败,会出现NumberFormatException异常

注意事项2:对于整数来说,字符串如果出现了其他的非数字的字符,都会导致转整数失败,即便是小数点,也不可以转,这里并没有转成浮点数字,再转整数的过程

方式1:使用包装类的静态方法valueOf方法

Integer num = Integer.valueOf("123");

方式二:使用包装类的静态方法parseXXX方法。这里的XXX就是要转换的基本数据类型

int num = Integer.parseInt("123");

备注:以上两种方式,都可以完成字符串类型到基本数据类型之间的转换。如果希望直接转成基本数据类型,推荐使用方式2;如果希望转成包装类型,推荐使用方式1

关于字符类型的特殊说明:

字符串类型,没有类似与上面的方式,可以直接转成字符类型,如果一个字符串,要转成字符,需要使用字符串的一个实例方法charAt()。使用这个方法,获取字符串中的指定下标位的字符

实现进制之间的转换:

把十进制转成其他进制

Integer.toHexString() //转十六进制

Integer.toOctalString() //转八进制

Integer.toBinaryString() //转二进制

把其他进制转成十进制

Integer.parseInt(数据,进制);

常用类

常用类Math

概念:是一个数学类,这个类中封装了很多用来做数学计算的方法,当我们需要使用到数学计算的时候,要能够想到这个类,这个类中有很多封装好的数学公式,而且都是静态方法,方便调用

常用静态常量

属性描述
PI圆周率3.14159265358979323846
E自然对数2.7182818284590452354

常用方法:

方法描述
abs计算一个数字的绝对值
max计算两个数字的最大值
min计算两个数字的最小值
round计算一个数字的四舍五入
floor计算一个数字的向下取整
ceil计算一个数字的向上取整
pow计算一个数字的指定次幂
sqrt计算一个数字的平方根
random获取一个[0,1)范围内的浮点型随机数

常用类Random

概念:是一个专门负责产生随机数的类,在java中,Random类在java.util包中,在使用之前需要导包

(其实,随机数的产生,是有一个固定的随机数算法,带入一个随机数种子,能够生成一个随机数列。但是由于算法时固定的,因此会出现一个BUG,如果随机数的种子相同,那么生成的随机数列也完全相同)

常用方法:

方法参数描述
Random通过将系统时间作为随机数种子,实例化一个Random对象
Randomint通过一个指定的随机数种子,实例化一个Random对象
nextIntint生成一个[0,bounds)范围内的整型随机数
nextInt生成一个int范围内的随机数
nextFloat生成一个[0,1)范围的float类型的随机数
nextDouble生成一个[0,1)范围的double类型的随机数
nextBoolean随机生成一个boolean数值

常用类BigInteger,BigDecimal

概念:

这两个类,都是用来表示数字的类,BigDecimal表示浮点型数字,BigInteger表示整型数字。这两个类,可以用来描述非常,非常,非常大的数字,例如整数,long时最大的白哦是范围,但即便是long型,也有它表示不了的情况,BigInteger就是可以表示任意大小的数字

BigInteger:表示整型数字,不限范围

BigDecimal:表示浮点型数字,不限范围,不限小数点后面的数位

常用方法:

方法参数描述
构造方法String通过一个数字字符串实例化一个对象
addBigInteger/BigDecimal
subtractBigInteger/BigDecimal
multipyBigInteger/BigDecimal
divideBigInteger/BigDecimal
divideAndRemainderBigInteger/BigDecimal除,保留商和余数,将商存到结果数组的第0位,将余数存到结果数组的第1位
xxxValue转成指定的基本数据类型的结果

常用类Date

概念:是一个用来描述时间,日期的类

比较Data和Date类

Date:日期类
Data:数据类,装的是二进制的数据

java.util.date和java,sql.date包

Java.util.date:对应的是java的日期类型,包括年月日,时分秒
java.sql.date:对应的是数据库的日期类型,只包括年月日
如果需要数据类型和在哪换,从java.sql.date转成java.util.date是自动类型转换,反之是强制类型转换

常用方法:

方法参数描述
Date实例化一个Date对象,来描述系统当前时间
Datelong通过一个指定的时间戳,实例化一个Date对象,描述指定的时间
getTime获取当前系统的时间(long型的毫秒数)
equalsDate判断两个时间是否相同

常用类SimpleDateFormat

概念:是一个用来格式化时间的类,使用这个类,一般两种操作

将一个Date对象,转成指定格式的时间字符串

将一个指定格式的时间字符串,转成Date对象

常用方法:

方法参数描述
SimpleDateFormatString通过一个指定的时间格式,实例化一个对象
formatDate将一个Date对象转成指定格式的字符串
parseString将一个指定格式的时间字符串,解析成Date对象

paser方法:

将一个字符串,按照指定格式的格式进行解析,如果字符串中的时间格式,和对象实例化的时间给定的格式不同,此时会出现异常

等等…

枚举

枚举的定义:定义枚举类型,需要使用关键字enum,枚举的名字是一个标识符,遵循大驼峰命名

public enum Gender{
    //将这个枚举对象所能取到的值,都列出来
    //枚举中的元素,也是标识符,遵循大驼峰命名法
    Male,Femal
}
public enmu Month{
    Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
}
public enmu Week{
    Mon,Tue,Wed,Thu,Fri,Sat,Sun
}

枚举的使用:

枚举是一种自定义的数据类型,可以声明变量,在使用的时候,直接使用枚举类型.枚举值这样的形式进行枚举值的获取

public class Test{
    public static void main(String[] args){
        //枚举的使用
        Gender gender1 = Gender.Male;
        Gender gender2 = Gender.Female;
        
        Month m1 = Month.Jan;
        Month m2 = Month.Nov;
        Week week1 = Week.Sat;
    }
}

枚举的理解:

枚举本质上属于Object的一个最终子类,枚举中的元素实际上是枚举(类)的一个静态的,当前类的对象。在枚举中可以添加,普通方法,以及属性

异常:

异常的结构:

在java当中,用Throwable类来买哦书所有的不正常的情况。Throwable有两个子类:

Exception和Error

Error:描述发生在JVM虚拟机级别的错误信息,这些错误信息无法被处理

StackOverflowError:栈溢出错误

Exception:描述程序遇到的异常,异常是可以被捕获处理的

未经处理的异常,会导致程序无法进行编译或者运行,因此在异常部分,重点内容是:异常该如何捕获处理

java中的异常的继承体系:
根类:Throwable
	错误:Error
	异常:Exception
		运行时异常:RunTimeException

异常的分类:

1.根据异常发生的位置

第一:普通的异常,会导致程序无法完成编译。这样的异常称之为编译时异常(NonRunTime Exception)

第二:Exception有一个子类:RunTimeException,在这个类中,对异常进行了自动的处理。这种异常不会影响程序的编译,但是在运行中如果遇到了这种异常,会导致程序执行强制停止,这样的异常称为:运行时异常(RunTimeException)

2.根据创建异常类的主体

第一:系统异常

第二:自定义异常

异常的工作原理:

不捕获就向上抛

异常的捕获处理:

程序一遇异常就终止,不会继续向下走

异常的捕获处理:

try-catch
try-多catch
try-catch-finally
try-finally

两个关键字:

throw:一个异常对象,被实例化完成后,没有任何意义,不影响程序的编译或者运行
throws:用在方法的声明部分,写在参数列表的后面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值