Java13(常用类)

包装类

概述

Java中为8种基本数据类型对应准备了8种包装类型,这8种包装类都属于引用类型。

public ststic void main(String[] args){
    doSome();
}
public static void doSome(Object obj){
    Systrm.out.print(obj);
}

当我们需求在调用doSome()方法的时候传递一个数字进去,但是数字属于基本数据类型,daSome()方法需要的是一个引用数据类型,很明显,是无法放进去的,此时,我们可以创建一个新的对象存储数字,然后把这个对象传递进去。

public class MyInt{
    int value;
    public MyInt(){
    }
    public MyInt(int value){
        this.value = value;
    } 
}

这样我们就可以实现传递数字进去,这就是我们自己写的int类型的包装类型。事实上,这8中基本数据类型对应的8种包装类,SUN公司都已经写好了,我们直接用即可。

8种包装类

Integer使用最多,重点学习这个,其他的依葫芦画瓢即可。

Number

8种包装类中前六个都是继承自Number类,可以通过研究这个类来研究包装类。
image.png
Number是一个抽象类,提供了将引用数据类型转换为基本数据类型的方法。

装箱拆箱

基本数据类型转换为引用数据类型被称为装箱,引用数据类型转换为基本数据类型被称为拆箱。

Integer

创建对象

这两种方法在JDK9就已经过时了,出现横线就表示已过时,但还是可以使用。

这里是不能将字符串创建为Integer类型的,会报错:NumberFormatException

常见报错:

  1. 空指针异常:_NullPointerException_
  2. 类型转换异常:_ClassCastException_
  3. 数组下标越界异常:_IndexOutOfBoundsException_
  4. 数字格式化异常:_NumberFormatException_

通过常量获取最大值最小值

包装类中提供了一些常量,我们可以利用这些常量求出该类型最大值和最小值。
image.png

public static void main(String[] args) {
    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);
    System.out.println(Byte.MAX_VALUE);
    System.out.println(Byte.MIN_VALUE);
}

这样子就可以在需要的时候直接调出来,不需要记忆这堆数字了~

自动拆箱与自动装箱

在JDK1.5之后,Java支持自动装箱和自动拆箱

public static void main(String[] args) {
	//自动装箱
    Integer x = 100;
	//自动拆箱
    int y = x;
}

这里并不是将100这个基本数据类型赋值给Integer,而是通过自动装箱机制将int类型转换为integer类型再进行赋值,自动拆箱同理。
这个对象是一个引用,是一个变量,保存了一个对象的内存地址。
System.out.println(x + 1);运算的时候会自动拆箱,转换为基本数据类型来进行计算。
在进行比较的时候,不会进行自动拆箱,是直接将地址进行比较。但是Java中为了提高效率,将[-128到127]的包装对象提前创建好,放到一个整数型常量池(在方法区)中,此时就不需要再创建对象,比较地址的时候是一样的。
这个整数型常量池会在调用Integer类的时候就完成对256个对象的初始化!

池:cache,缓存机制。效率高但是耗费内存。

Integer常用方法

Java的API文档中提供了很多Integer的方法,这里挑选其中两个比较重要的学习:

通过这两个方法,可以实现Integer,int,String三种类型的互换:
image.png

剩下的7个包装类与Integer大同小异,依葫芦画瓢并借助API文档即可。

日期类

日期格式化

Java.util.Date中提供了一些日期类帮助我们获取日期。

Date nowTime =new Date();
System.out.println(nowTime);

Fri Feb 03 10:41:03 CST 2023这是默认的Date方法提供的日期格式,很明显不适合我们中国人的观看格式,为此,Java也提供了日期格式化的方法`SimpleDateFormat()
image.png

在日期格式中,除了y M d H m s这些字符不能随便写之外,其他的都可以随意组织~

这样我们就能够自己创建我们自己想要的格式,再通过format()方法将格式赋给,实现将时间按照我们想要的格式输出。

Date nowTime =new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String NewTime = sdf.format(nowTime);
System.out.println(NewTime);

2023-02-03 10:50:32 036这样的格式看着也舒服~

日期字符串与日期类的转换

上面我们是将日期类转换为日期字符串输出,那么反过来,我们需要将日期字符串转换为日期类,需要先创建一个格式与日期字符串对应的格式,再利用parse()方法将字符串传给日期类即可。

String time = "2023-02-03 10:50:32 036";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date dateTime = sdf.parse(time)
System.out.println(dateTime);

Fri Feb 03 10:50:32 CST 2023这里就实现了日期类和日期字符串的转换。

如果这里日期的格式和字符串格式不一样,那么会出现异常:ParseException

统计方法执行时长

案例: 统计一个方法执行所耗费的时长。

想要统计一个方法的时长,我们可以在方法执行的开始记录一个时间,在结束的时候也调用一个时间,两个时间差就是我们这个方法执行的时间。
Java提供了一个currentTimeMillis()方法让我们的得知从1970年1月1日0时0分0秒0毫秒到现在的时间总毫秒数,这个方法是在java.lang.System包中。

 public static void main(String[] args) throws ParseException {
    long begin = System.currentTimeMillis();
    for (int i = 0; i < 1000; i++) {
        System.out.println("i = " + i); 
    }
    long end = System.currentTimeMillis();
    System.out.println("执行时长为:"+(end-begin)+"毫秒");
}

通过这个方法,我们可以算出很多时间,只需要通过加减就可以实现。

通过毫秒构造Date对象

除了无参构造Date对象,Java中有两种有参的构造方法,但是由于第一种已经荒废,我们主要了解第二个。image.png

public static void main(String[] args) throws ParseException {
    Date time = new Date(1);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
    String strTime = sdf.format(time);
    System.out.println(strTime);
}

此时的输出结果为:1970-01-01 08:00:00 001,从八点开始是因为我们处于东八区,时区导致它的开始时间不同。

数字类(了解)

数字的格式化

与日期的格式化类似,数字也有自己的格式来实现格式化:DecimalFormat()

数字的格式:

  1. #:表示任意数字。
  2. ,:表示千分位。
  3. .:代表小数点。
  4. 0:代表不够的时候补零。

例如:###,##.##

public static void main(String[] args) throws ParseException {
    DecimalFormat df = new DecimalFormat("#,###.####");
    String s = df.format(1234.56);
    System.out.println(s);
}

当精度需求很高的时候,我们可以使用BigDecimalFormat来实现格式化。

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值