包装类
包装类(Wrapper Class):
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。基本类型的数据不具备"对象"的特性(没有成员变量和成员方法可以调用),因此,java为每种数据类型分别设计了对应的类,即包装类。
创建对象
Integer(int value)
构造一个新分配的 Integer 对象,它表示指定的 int 值。
方法:
int intValue()
以 int 类型返回该 Integer 的值。
static int parseInt(String s)
将字符串参数作为有符号的十进制整数进行解析。
Integer.parseInt("");
static Integer valueOf(String s)
返回保存指定的 String 的值的 Integer 对象。
package day02;
/**
* @author wangpl
*/
public class IntegerDemo {
public static void main(String[] args) {
//byte的最大值和最小值
byte a=Byte.MAX_VALUE;
byte b=Byte.MIN_VALUE;
int c=Integer.MAX_VALUE;
System.out.println(a);
System.out.println(b);
System.out.println(c);
//1.创建Integer对象 把基本类型的5 变成包装类型的in--用包装类in提供的各种方法
Integer in=new Integer(5);
//2.常用方法
int x=in.intValue();//把in这个对象包裹的数值取出来
System.out.println(x);//5
int y=Integer.parseInt("123");//将字符串类型的整数 解析成int类型
System.out.println(y);//123
Double d=new Double(9.9);
Double d2=Double.valueOf(9.9);//不高效 底层也是通过new创建的
//Double valueOf(String s)
//返回保存用参数字符串 s 表示的 double 值的 Double 对象
Double d3=Double.valueOf("9.9");
System.out.println(d2);
System.out.println(d3);
double m=d.doubleValue();
System.out.println(m);
double n=Double.parseDouble("9.9");
System.out.println(n);
//1. 什么是包装类,为什么要有包装类
//java分为基本类型和引用类型,但是基本类型是无法调用方法和属性的,为了解决这个问题
//我们将对应的基本类型转化为引用类型,并提供了一系列的方法,这样的类被称之为包装类
//因为我们java是面向对象的语言,对象里面有属性和行为,转换为包装类之后我们才可以访问
//对象对应的属性和方法,进行转型String转int或者double
// Integer in2=new Integer(500);
// Integer in3=new Integer(500);
// System.out.println(in2==in3);//false
Integer in4=127;
Integer in5=127;
System.out.println(in4==in5);//true
Integer in6=128;
Integer in7=128;
System.out.println(in6==in7);//false
/*
在Integer类装载进内存中时,会把-128 127范围内的整数数据包装成Integer类
并且将其对应的引用放入一个cache数组中
valueof(i)在返回之前,会进行判断,判断当前i的值是否在-128到127之间
如果在范围中,则直接返回引用,不再开辟内存空间
如果不在范围中,则创建一个新的对象
利用缓存,这样即能提高程序执行效率又能节约内存
Integer in4=127 Integer in5=127 因为IntegerCache中已经存在了此对象
直接返回引用,引用相等并且都指向缓存中的数据所以in4==in5 为true
Integer in6=128 Integer in7=128因为in6和in7不在范围内,虚拟机会重新new一个
Integer对象来存放128,创建两个对象就会产生两个不同的内存空间,两个空间的
地址不同,返回到栈中的引用值也就不同,所以in6==in7 为false
*/
}
}
日期类Date
概述:
存在于java.util.Date包
用来封装一个毫秒值,表示一个精确的时间点
从1970-1-1 0点开始的一个毫秒值
创建对象
new Date(); 封装的是系统当前时间的毫秒值
new Date(9000000000000000L)封装指定的时间点
package day02;
import java.util.Date;
/**
* @author wangpl
*/
//测试 日期工具类 Date
public class DateDemo {
public static void main(String[] args) {
//1.创建对象
Date d=new Date();
System.out.println(d);//默认是当前系统时间
//2.调用方法
System.out.println(d.getTime());//从1970-1-1 0到现在的毫秒值
System.out.println(d.getDate());//今天是几号
System.out.println(d.getDay());//今天星期几
System.out.println(d.getHours());//现在是几点
System.out.println(d.getMinutes());//现在是哪分钟
System.out.println(d.getYear());//从1900年到现在是多少年了
System.out.println(d.getSeconds());//现在是多少秒
}
}
时间格式转换 SimpleDateFormat
概述:
日期格式化工具,可以把date对象格式化成字符串,也可以将日期字符串解析成date对象
new SimpleDateFormat(格式)
格式:yyyy-MM-dd HH:mm:ss
常用的方法
format(Date date)
package day02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/**
* @author wangpl
*/
public class SimpleDemo {
public static void main(String[] args) throws ParseException {
// method();
method2();//接收用户输入的出生日期,计算存活天数 1969-01-24
}
public static void method2() throws ParseException {
//接收用户输入的出生日期
String str=new Scanner(System.in).nextLine();
//创建日期格式化对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=sdf.parse(str);
long birth=date.getTime();//出生时的毫秒值
long now=System.currentTimeMillis();//当前的毫秒值
System.out.println((now-birth)/1000/60/60/24);
}
//日期数据互转
public static void method() throws ParseException {
String date="2021-7-30";
//创建SimpleDateFormat对象 参数是日期格式
//y表示年 M表示月 d表示日 -是分隔符
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date d=sdf.parse(date);//parse 将String转成Date
System.out.println(d);
System.out.println(d.getYear());
System.out.println(d.getMonth());
System.out.println(d.getDate());
System.out.println(d.getDay());
Date da=new Date();
String str=sdf.format(da);//将date转为String
System.out.println(str);//2021-07-30
System.out.println(sdf.format(new Date()));
}
}
自动拆装箱
自动装箱:把基本类型包装成包装类对象
Integer a=Integer.valueOf(5);
自动拆箱:从包装类对象中,自动取出基本类型值
int i=a.intValue();
包装类的默认值都是null