包装类常见方法

八大类

java八大基本类型:

回顾一下知识点:

整型:

byte:

byte数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一; 例子:byte a = 100,byte b = -50。 

short:

short数据类型是16位、有符号的以二进制补码表示的整数 最小值是-32768(-2^15); 最大值是32767(2^15 - 1); Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一; 默认值是0; 例子:short s = 1000,short r = -20000。 

int:

int数据类型是32位、有符号的以二进制补码表示的整数;
最小值是-2,147,483,648(-2^31);
最大值是2,147,483,647(2^31 - 1);
一般地整型变量默认为int类型;
默认值是0;
例子:int a = 100000, int b = -200000。 

long:

long数据类型是64位、有符号的以二进制补码表示的整数;
最小值是-9,223,372,036,854,775,808(-2^63);
最大值是9,223,372,036,854,775,807(2^63 -1);
这种类型主要使用在需要比较大整数的系统上;
默认值是0L;
后面加L或者l,就表示是long长整型;
例子: long a = 100000L,Long b = -200000L。 

浮点型:

float:

float数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float在储存大型浮点数组的时候可节省内存空间;
默认值是0.0f;
后面加F或者f,表示float类型;
浮点数不能用来表示精确的值,如货币;
例子:float f1 = 234.5f。 

double:

double数据类型是双精度、64位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型同样不能表示精确的值,如货币;
默认值是0.0d;
后面加D或者d,表示double类型;
例子:double d1 = 123.4。 

布尔型:

boolean:

boolean数据类型表示一位的信息;
只有两个取值:true和false;
这种类型只作为一种标志来记录true/false情况;
默认值是false;
例子:boolean one = true。 

字符型:

char:

char类型是一个单一的16位Unicode字符;
最小值是’\u0000’(即为0);
最大值是’\uffff’(即为65,535);
char数据类型可以储存任何字符;
例子:char letter = ‘A’。

包装类

在Java5 中添加了两个新特性,那就是自动装箱和拆箱,因为基本类型的广泛使用,但是Java 又是面向对象的语言,所以提供了包装类型的支持

我们知道基本数据类型包括byte, short, int, long, float, double, char, boolean,对应的包装类分别是Byte, Short, Integer, Long, Float, Double, Character, Boolean。

总结

  1. 为什么需要包装类:JAVA是面向对象的语言,很多类和方法中的参数都需使用对象(例如集合),但基本数

    据类型却不是面向对象的,这就造成了很多不便

  2. 拆装箱的概念:将基本数据类型转为包装类的过程叫“装箱”,将包装类转为基本数据类型的过程叫“拆箱”

  3. 自动拆装箱:Java为了简便拆箱与装箱的操作,提供了自动拆装箱的功能,对于Integer, 拆箱的过程就是

  4. 通过Integer 实体调用intValue()方法;装箱的过程就是调用了 Integer.valueOf(int i) 方法,帮你直接new了一个Integer对象

  5. 建议使用valueOf() 方法创建一个包装类实例而不是直接使用构造方法,因为该方法可以走缓存提高性能


装箱和拆箱

  1. jdk 5 前的手动装箱和拆箱方式,基本类型--》包装类型,反之,拆箱

  2. jdk 5 以后的自动装箱和拆箱方式,自动装箱底层调用的是valueOf方法,比如Integar.valueOf()

--------------------5.0前-------------------
// 基本类型---------->包装类型[手动装箱]
int i=10;
//两种方式
Integar i1=new Integar(i);   (1)
Integar i2=Integar.valueOf(i); (2)
​
// 包装类型---------->基本类型[手动拆箱]
Integar j=new Integar(99);(1)
Integar j1=j.intValue();(2)
​
--------------------5.0后-------------------
int m=10;
Integar m2=m;   ----装箱
​
int n2=m2;      ----拆箱

包装类(Integar)------->String
​
Imtegar i=100;
​
// 方式(1)           String str1=i+"";
​
//方式(2)            Stirng str2=i.toString();
​
//方式(3)            String str3=String.valueOf(i);
String -----> 包装类(举例Integar)
String str4="12345";
(1)
Integar  i=new Integar(str4);
(2)
Integar  i1=Integar.valuOf(或 parseInt)(str4);

System类

系统类,是java,long 包,final 类,类中成员都是静态的,不能实例化

  • 属性:

  • in 标准的输入数据

  • out 标准的输出数据

  • err 标准的错误输出数据 (红色字体,且输出顺序不稳定)

方法

// 获取系统时间毫秒值(1s=1000ms)

System.out.currenTimeMillis(); [需要long类型来接收]

// 终止正在运行的程序(关闭虚拟机)

System.exit(start); [start 系统认为除0外的数字,都表示异常退出]

// 运行垃圾回收器

System.gc();

// 获取当前的系统属性信息

Properties p=System.getProperties();

//以列表的形式,输出属性信息

p.list(System.out));

//复制数组元素,比较适合底层调用

System.arraycopy(src,0,dest,0,?);

src  0   表示从原数组的哪个索引位[0]开始拷贝
dest 0  ?    表示要拷贝到的目标数组   0表示把拷贝到的数据,拷贝到目标数组的哪个索引     ?代表拷贝多少个    

BigIntegar&BigDecimal类

1.BigIntegar 适合保存比较大的整数

2.BigDecimal 适合保存精度更高的浮点型

(1).当我们编程时,需要处理很大的整数,long不够用,可以使用BigIntegar类来搞定

long i=560000000000000000000000000000000;
sout(i);  // 数据太大,long 装不下
​
BigIntegar bigIntegar=new BigIntegar("560000000000000000000000000000000");
sout(bigIntegar);    // 用""号转为BigIntegar对象即可
-----------------------------------------------
在对BigIntegar对象进行加减乘除的时候,需要使用对应的方法,不能直接进行+ — * /  
例:BigIntegar bigIntegar2=new BigIntegar("1");
   BigIntegar add= bigIntegar.add(bigIntegar2);
   sout(add);

(2).当我们编程时,需要处理精度很高的的小数,double不够用,可以使用BigDecimal类来搞定

同BigIntegar 同理   
区别在于 精度很高的小数,  【除于】  带小数点的数时,可能抛出异常[精度太高,可能无限循环]

四种运算方式

        1.add 加法

        2.subtrac 减法

        3.multiply 乘法

        4.divide 除法

运算方式 如上方例子同理。

Date类

第一代日期类

1.Date: 精确到毫秒,代表特定的瞬间

2.SimpleDateFormat: 格式和解析日期的类

SimpleDateFormat 格式化和解析日期的具体类,它允许进行格式化(日期--文本),解析(文本--日期)和规范化。

(1).

      Date d1=new Date();           // 获取当前系统时间
----Date 类是在java.util包   默认输出的日期格式是国外的方式,通常需要对格式进行转换-------------
      Date d2=new Date(896567872);  // 通过指定毫秒值得到时间

(2).

// 创建SimpleDateFormat 对象,可以指定相应的格式
// 这里的格式使用的字母是规定好的,不能乱写
SimpleDateFormat  sdf=new SipmleDateFormat("YYYY年MM月DD日 hh:mm:ss E");
String format=sdf.format(d1);
sout(format);   
// 将日期转换为指定格式的字符串
----------------------------------------------------------------------------------------------
// 可以把一个格式化的String 转成对应的Date
// 得到Date 输出时,仍然是默认的国外日期形式,需要转换
// 在把String --》Date ,使用的sdf格式需要和你提供的String 格式一样,否则会抛出异常
String s="1996年01月01日 10:20:30 星期一";
Date parse=sdf.parse(s);
sout(sdf.format(parse));

第二代日期类

Calendar 类 (日历)

Calendar 是一个抽象类,并且构造器是private ;可以通过getInstance()来获取实例:提供大量的方法和字段提供给程序员

Calendar c=Calendar.getInstance(); // 创建日历类对象
sout(c);
----------------------------------------------------------------------------------------------
//获取日历对象的某个日历字段
​
System.out.println("年: "+c.get(Calendar.YEAR));
// 返回月时,是按照从0开始,所有只有11个月  得加一
System.out.println("月: "+(c.get(Calendar.MONTH)+1));
System.out.println("日: "+c.get(Calendar.DAY_OF_MONTH));
System.out.println("时: "+c.get(Calendar.HOUR));
System.out.println("分: "+c.get(Calendar.MINUTE));
System.out.println("秒: "+c.get(Calendar.SECOND));

Calendar 没有专门的格式化方法,需要程序员自己来显示组合,相对自由

sout("年是-"+c.get(Calendar.YEAR)+"月等于-=="+??);   //可自由组合
--------------------------12-转换-24------------------------------------
[如果需要把小时改为24小时格式,将c.get(Calendar.HOUR_OF_DAY)即可]

第三代日期类

LocalDate (日期/ 年月日) LocalTime(时间/时分秒) LocalDateTime (日期时间/年月日时分秒)

sout(now.getYear()); // 获取 单独的年    同理 ,但要注意  LocalDate&LocalTime&LocalDateTime的获取范围
getMonth()和getMonthValue() 的区别在于   不加Value 是英文的月份   加上是数字的月份

DateTimeFormatter 格式化日期的方法

//类似 SimpleDateFormat
​
DateTimeFormat  dtf = DateTimeFormatter.ofPattern(格式);
String str = dtf.format(日期对象);
-----------------举例-----------------------------
LocalDateTime ldt = LocalDateTime.now();
​
DateTimeFormat dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日HH小时mm分钟ss秒");
String strDate = dtf.format(ldt);

时间戳

类似于Date 提供了一系列和Date 类转换的方式

Instant---->Date:        Date date=Date.from(instant);
​
Date---->Instant:        Instant instant=date.toInstant();
---------------------------------------------------------------举例-----------------------------------
// 通过静态方法 now()获取表示当前时间戳的对象
Instant now=Instant now();
sout(now);
//  通过from 把Instant 转换为Date
 Date date=Date.from(now);
//  通过date.toInstant() 把Date 转换为 Instant对象
 Instant instant=date.toInstant();
​

package com.Lindom.时间日期;
import java.util.Date;
public class DateDemo {
​
    public static void main(String[] args) {
​
        //java.util.Date的无参构造及两个方法的使用
        Date date = new Date();
        System.out.println("date = " + date.toString());    //Sat Jun 06 23:12:31 CST 2020
        System.out.println("date = " + date.getTime());    //1591455534797 //此方法跟System.currentTimeMillis()方法类似
        System.out.println("------------------------");
​
        //java.util.Date的有参构造及toString方法的使用
        Date date1 = new Date(1591455534797L);  //创建指定毫秒数的Date对象
        System.out.println("date1 = " + date1.toString());  //Sat Jun 06 22:58:54 CST 2020
        System.out.println("------------------------");
​
        //java.sql.Date的有参构造
        java.sql.Date date2 = new java.sql.Date(1591455534797L);
        System.out.println("date2 = " + date2);    //2020-06-06
​
​
        System.out.println("---------关于转换问题---------------");
​
//        以下这个转换方法肯定报错:因为java.util.Date是父类,java.sql.Date是子类,将父类直接强转为子类的前提是:多态
//        也就是说,父类的引用指向子类对象,这样的情况下才可以进行强转!
//        Date date3 = new Date();
//        java.sql.Date date4 = (java.sql.Date)date3;
//        System.out.println(date4);
​
        //如下就是父类引用指向子类对象的强转例子,也是java.util.Date转为java.sql.Date 的一个方法
        Date date3 = new java.sql.Date(1111254125632L);
        java.util.Date date4 = (java.sql.Date)date3;
        System.out.println("date3 = " + date3);
        System.out.println("date4 = " + date4);
        System.out.println("------------------------");
​
        //如下方法是将不涉及多态的data5,转为java.sql.Date的一种的方法
        Date date5 = new Date();
        java.sql.Date date6 = new java.sql.Date(date5.getTime());
        System.out.println("date5 = " + date5);
        System.out.println("date6 = " + date6);
        System.out.println("------------------------");
​
        //如下方法是将不涉及多态的data7,转为java.util.Date的一种的方法
        java.sql.Date date7 = new java.sql.Date(1232541256321L);
        Date date8 = new Date(date7.getTime());
        System.out.println("date7 = " + date7);
        System.out.println("date8 = " + date8);
        System.out.println("------------------------");
    }
}
​


时间的加减方法

提供了 plus 和 minus 方法可以对当前时间进行 加 或者 减

LocalDateTime localDateTime=ldt.plusDays(890);  // 890天后的日期  plus + 890Days  各种方法 Days表示天
​
sout(dateTimeFormatter.format(localDateTime)); //输出格式化的日期
[减  同理  将关键词plus 加换成minus 减法  ;  Days 天 换成其他代表年,月,日,时,分,秒的关键词]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮虾_凡夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值