1.包装类
1.基本类型包装类
定义: 这些类封装了一个相应的基本数据类型数值,并为其提供了一系列操作方法。例如Integer类包装一个int值,变成引用数据类型
作用:
将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据
常用的操作之一:用于基本数据类型与字符串之间的转换
基本数据类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
2.Integer类
包装一个对象中的原始类型 int 的值
构造方法:
方法名 | 说明 |
public Integer(int value) | 根据 int 值创建 Integer 对象(过时) |
public Integer(String s) | 根据 String 值创建 Integer 对象(过时) |
public static Integer valueOf(int i) | 返回表示指定的 int 值的 Integer 实例 |
public static Integer valueOf(String s) | 返回一个保存指定值的 Integer 对象 String |
public class IntegerDemo {
public static void main(String[] args) {
//public Integer(int value):根据 int 值创建 Integer 对象(过时)
Integer i1 = new Integer(100);
System.out.println(i1);
//public Integer(String s):根据 String 值创建 Integer 对象(过时)
Integer i2 = new Integer("100");
// Integer i2 = new Integer("abc"); //NumberFormatException
System.out.println(i2);
System.out.println("--------");
//public static Integer valueOf(int i):返回表示指定的 int 值的 Integer 实例
Integer i3 = Integer.valueOf(100);
System.out.println(i3);
//public static Integer valueOf(String s):返回一个保存指定值的Integer对象 String
Integer i4 = Integer.valueOf("100");
System.out.println(i4);
}
}
3.自动装箱与自动拆箱
- 自动装箱
把基本数据类型转换为对应的包装类类型
int a = 10;
Integer b = a;
// 也可直接写成 Integer b = 10;
我们将一个基本类型的值赋给了一个引用类型,但这样是可行的,这里java为我们把基本类型自动转换为了包装类型,也就是自动装箱(它默认调用了valueOf()方法来转换的)
Integer a = 10;
Integer b = 10;
System.out.println(a==b);//true
Integer c = new Integer(10);
Integer d = new Integer(10);
System.out.println(c==d);//fault
在比较两个引用类型的时候,我们比较的是这两个对象的地址,那么显而易见,底下的操作是去new了两个对象,那么这两个对象地址肯定是不同的,所以底下结果为false
- 自动拆箱
把包装类类型转换为对应的基本数据类型
Integer a = 10;
int b = a;
例:
Integer i = 100; // 自动装箱
i += 200; // i = i + 200; i + 200 自动拆箱;i = i + 200; 是自动装箱
4.int和String类型的相互转换
int转换为String
方式一:直接在数字后加一个空字符串
方式二:通过String类静态方法valueOf()
public class IntegerDemo {
public static void main(String[] args) {
//int --- String
int number = 100;
//方式1
String s1 = number + "";
System.out.println(s1);
//方式2
//public static String valueOf(int i)
String s2 = String.valueOf(number);
System.out.println(s2);
}
}
String转换为int
方式一:先将字符串数字转成Integer,再调用valueOf()方法
方式二:通过Integer静态方法parseInt()进行转换
public class IntegerDemo {
public static void main(String[] args) {
//String --- int
String s = "100";
//方式1:String --- Integer --- int
Integer i = Integer.valueOf(s);
//public int intValue()
int x = i.intValue();
System.out.println(x);
//方式2
//public static int parseInt(String s)
int y = Integer.parseInt(s);
System.out.println(y);
}
}
2.时间日期类
1.Data类
Date 代表了一个特定的时间,精确到毫秒
构造方法:
方法名 | 说明 |
public Date() | 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 |
public Date(long date) | 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 |
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//public Date():分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
Date d1 = new Date();
System.out.println(d1);//Thu Jun 22 17:45:17 CST 2023
//public Date(long date):分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
long date = 60;
Date d2 = new Date(date);
System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970
}
}
常用方法:
方法名 | 说明 |
public long getTime() | 获取日期对象从1970年1月1日00:00:00 到现在的毫秒值 |
public void setTime(long time) | 设置时间,给的是毫秒值 |
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//创建日期对象
Date d = new Date();
//public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
// System.out.println(d.getTime());
// System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//public void setTime(long time):设置时间,给的是毫秒值
// long time = 1000*60*60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
}
}
2. SimpleDateFormat类
可以对日期格式化和解析
日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从 ‘A’ 到 ‘Z’ 以及从 ‘a’ 到’z’ 引号的字母被解释为表示日期或时间字符串的组件的模式字母
常用的模式字母对应: y—年;M—月;d—日;H—时;m—分;s—秒;E—星期几;a—上午 / 下午
构造方法:
方法名 | 说明 |
public SimpleDateFormat() | 使用默认模式和日期模式 |
public SimpleDateFormat(String pattern) | 指定时间的格式创建简单日期格式化对象 |
格式化和解析日期方法
方法名 | 说明 |
public String format(Date date) | 将日期格式化为日期 / 时间字符串 |
public String format(Object time) | 将时间毫秒格式化为日期 / 时间字符串 |
public Date parse(String source) [pɑːz] | 从给定的字符串开始解析文本生成日期 |
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//格式化:从 Date 到 String
Date d = new Date();//无参构造
// SimpleDateFormat sdf = new SimpleDateFormat();//
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//带参构造
String s = sdf.format(d);
System.out.println(s);
System.out.println("--------");
//从 String 到 Date
String ss = "2048-08-09 11:11:11";
//ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);//parse报错了,选中按下Alt+enter,默认选第一个
System.out.println(dd);
}
}
3.Calendar日历类
Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。
该方法返回一个Calendar 对象。
其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
Calendar 是一个抽象类,不能直接创建对象
方法名 | 说明 |
public static Calendar getInstance() | 返回一个日历类的对象 |
public int get(int field) | 返回给定日历的值 |
public void set(int field,int value) | 修改日历的某个字段信息 |
public abstract void add(int field,int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日历字段 |
public final void set(int year,int month,int date) | 设置当前日历年月日 |
package ceshi;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//1、获取Calendar对象
Calendar c = Calendar.getInstance(); //多态形式
//2、public int get (int field) 根据给的日历字段返回值
/* int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1; //从0开始所以加个1
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日"); //2021年7月7日*/
//3、public void set(int field,int value) 修改日历的某个字段信息
//c.set(Calendar.YEAR,2099);
// System.out.println(rightNow.get(Calendar.YEAR)); //2099
//4、public abstract void add(int field,int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
//需求1:三年前
/* c.add(Calendar.YEAR,-3);
int year = c.get(Calendar.YEAR);
System.out.println(year); //2018,减了三年*/
//需求2:十年后,五天前
/*c.add(Calendar.YEAR,10);
c.add(Calendar.DATE,-5);
System.out.println();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日"); //2031年7月2日*/
//5、public final void set(int year,int month,int date):设置当前日历年月日
c.set(2022,1,1);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year+"年"+month+"月"+date+"日"); //2022年2月1日
}
}
4.案例
- 案例需求
获取任意一年的二月有多少天
import java.util.Calendar;
import java.util.Scanner;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
//键盘录入任意的年份
Scanner sc = new Scanner(System.in);
System.out.println("请输入年:");
int year = sc.nextInt();
//设置日历对象的年、月、日
Calendar c = Calendar.getInstance();
c.set(year, 2, 1);
//3月1日往前推一天,就是2月的最后一天
c.add(Calendar.DATE, -1);
//获取这一天输出即可
int date = c.get(Calendar.DATE);
System.out.println(year + "年的2月份有" + date + "天");
}
}