JavaSE系列基础包装类及日历类详解

目录
  • 1. 基本类型包装类
    • 1.1 概述
    • 1.2 Integer类的概述与使用
    • 1.3 int和String的相互转换
    • 1.4 案例-字符串中数据排序
    • 1.5 自动装箱和拆箱
  • 2. Date类
    • 2.1 Date常用方法
  • 3. SimpleDateFormat类
    • 3.1 案例-日期工具类
  • 4. Calendar类-日历
    • 4.1 Calendar 的常用方法

1. 基本类型包装类

1.1 概述

它用于基本数据类型与字符串之间的转换

举例:

public class IntegerDemo {
    public static void main(String[] args) {
        //判断数据是否在int范围内
        System.out.println(Integer.MAX_VALUE);//最大范围
        System.out.println(Integer.MIN_VALUE);//最小范围
    }
}

1.2 Integer类的概述与使用

这里只介绍Integer,其他的可自行查看帮助文档。

那么我们重点看构造方法

它的构造方法,建议以后用Integer的方法,用valueOf()来使用

过时的方法当然也可以用,不过它会提示已经过时,如下图所示:

但是如果是字符串类型的字母,就会运行错误,它识别的是字符串类型的数字

Integer i3=new Integer("asd");//这里就会运行错误

不建议使用上面的两种形式,建议使用这种格式:Integer i1=Integer.valueOf();

public class IntegerDemo {
    public static void main(String[] args) {
        Integer i1=Integer.valueOf(123);//数字类型
        System.out.println(i1);
        Integer i2=Integer.valueOf("123");//字符串类型
    }
}

1.3 int和String的相互转换

简单的方式:“字符串”+数字,得出来的是拼接的字符串

int number=100;
String s1=""+number;

方式二官方版:

这里可以用官方文档给我们提示的进行,这里用的是valueOf进行转换

数字转换为字符串:String s1=String.valueOf(num);

字符串转换为数字:

方式一:先将String转换为Integer再转化为int

String—>Integer—>int

方式二:Integer.parseInt();

public class IntegerDemo {
    public static void main(String[] args) {
       int num=100;
       String s1=String.valueOf(num);
       //int转换为字符串类型
        System.out.println(s1);
        System.out.println("----------");
        //字符串转换为int
        String s2="100";
       // 方式一:
        //String--->Integer--->int
        Integer i1=Integer.valueOf(s2);
        //通过帮助文档发现,
        // intValue()用来返回Integer
        // 作为int的值,正好符合要求
        int x=i1.intValue();//返回值用int接收
        System.out.println(x);
        //方式二:使用parseInt静态方法
        int y=Integer.parseInt(s2);
        System.out.println(y);
    }
}

1.4 案例-字符串中数据排序

需求:有一个字符串:“91 27 46 38 50”,请写程序最终输出的结果是:“27,38,46,50,91”.

思路:

代码展示:

public class IntegerDemo {
    public static void main(String[] args) {
      //定义字符串
        String s="91 27 46 38 56";
        //将字符串中数据抽离出来,以空格作为分割点
        String[] s1 = s.split(" ");
        //定义一个int数组,用于存这些数据
        int []arr=new int[s1.length];//以s1的长度
        //转换为int类型
        for (int i = 0; i < s1.length; i++) {
            arr[i] = Integer.parseInt(s1[i]);
            //赋值
        }
        //进行排序
        Arrays.sort(arr);
        //字符串拼拼接
        StringBuilder sb=new StringBuilder();
        for(int i = 0; i < arr.length; i++){
            if(i==arr.length-1){
                sb.append(arr[i]);
            }else{
                sb.append(arr[i]).append(" ");
            }

        }
        String result = sb.toString();
        System.out.println("排序后的:"+ result);

    }
}

1.5 自动装箱和拆箱

装箱: 把基本数据类型转换为对应包装类型拆箱: 把包装类型转换为基本数据类型

先看装箱:通过定义我们可以看出,装箱把基本数据类型转化为对应包装类型,例如:

Inter i=Integer.valueOf(100);//这里先把100转化为Inter类型,赋值
Integer i1=100;//这里java5之后就在jdk内部
//已经潜移默化的为我们包装好了
//它等同于上步

拆箱:与装箱执行相反的步骤

Integer i1=100;
//拆箱:转换为int型,用intValue()这个方法
//然后进行基本类型的运算后再赋值给i1
//完成自动拆箱
i1=i1.intValue()+200;//最后赋值是自动装箱

自动拆箱:省去了转化为int类型的基本数据类型,直接进行运算

Integer i1=100;
i1+=200;//内部隐含了自动拆箱和自动装箱

注意

如果定义时,定义的Integer i=null;那么i进行运算时会运行错误,这里要注意,引用类型的最好要判断是否为null,只要是对象,就必须判断是否为空

2. Date类

要注意,Date类导包时要清楚自己导的哪个包

构造方法:

Date 代表了指定时间,精确到毫秒

举例:注意!在这里导入的util包下的

public class DateDemo {
    public static void main(String[] args) {
        Date d=new Date();
        //按道理输出的应该是地址,结果输出了时间,因为重写了toString方法
        System.out.println(d);
        //有参构造
        long data=1000*60*60;//毫秒*1000->秒->*60->分钟->*60->小时
        Date d2=new Date(data);
        System.out.println(d2);
    }
}

运行结果:

Wed Dec 15 17:51:04 CST 2021

Thu Jan 01 09:00:00 CST 1970//其中09:00:00是时区

2.1 Date常用方法

public long getTime() 获取的是日期对象,从1970年1月1日00:00:00到现在的毫秒

public void setTime(long time) 设置时间,给的是毫秒值

getTime:
public class DateDemo {
    public static void main(String[] args) {
        Date d=new Date();
        //获取时间
        System.out.println(d.getTime()*1.0/1000/60/60/24/365+"年");
    }
}

运行结果:

51.99024939979706年//从1970到现在

setTime
public class DateDemo {
    public static void main(String[] args) {
        Date d=new Date();
       long date=1000*60*60;
       d.setTime(date);
        System.out.println(d);
    }
}

运行结果:

Thu Jan 01 09:00:00 CST 1970

3. SimpleDateFormat类

概述

SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。重点学习日期格式化和解析化

日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中,从‘A'到‘Z'以及从‘a'到‘z'引号的字母被解释为表示日期或时间字符串的组件的模式字母

常用模式字母对应关系

  • y…年
  • M…月
  • d…天
  • H…时
  • m…分
  • s…秒

构造方法

SimpleDateFormat格式化与解析日期

格式化(从Date到String)public final String format(Date date):将日期格式化成日期/时间字符串

解析(从String到Date)public Date parse(String souce):从给定字符串的开始解析文本以生成日期

举例

格式化

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        //格式化
        Date d=new Date();
        //无参构造
        //先创建SimpleDateFormat类
        SimpleDateFormat sdf = new SimpleDateFormat();
        //通过对象调用方法
        String s = sdf.format(d);
        System.out.println(s);

    }
}

运行结果:

2021/12/15 下午7:11

为了看起来更加方便,可以自己设置模式:传递参数:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

运行结果

解析

要注意的点:字符串模式的格式要和传参一样

2021-12-15 12:00:00要和yyyy-MM-dd HH:mm:ss"格式对应,例如都需要-,在代码下面会提示异常,要抛出异常,快捷键Alt+Enter

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {//抛出异常
        //解析
        Date d=new Date();
        String s="2021-12-15 12:00:00";
        //先创建SimpleDateFormat类
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//这里格式要和模式的一样
        //通过对象调用方法
        Date ss = sdf.parse(s);
        //抛出异常Alt+Enter
        System.out.println(ss);

    }
}

3.1 案例-日期工具类

工具类:

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

/*
工具类:构造方法私有,成员静态
*/
public class DateUtils {
    private DateUtils() {}
    //方法,把日期转化为指定格式的字符串
    //返回类型:String
    //参数:Date date,String format
    public static String dateTostring(Date date,String format){
        SimpleDateFormat sdf=new SimpleDateFormat(format);
        String s = sdf.format(date);
        return s;
    }
    //方法,把字符串转化为指定格式的日期
    //返回类型:Date
    //参数:String s,String format
    public static Date stringTodate(String s1,String format) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat(format);
       Date p = sdf.parse(s1);
       return p;
    }
}

测试类:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatDemo {
    public static void main(String[] args) throws ParseException {//抛出异常
        //创建日期对象
        Date d=new Date();
        //调用方法
        String s = DateUtils.dateTostring(d, "yyyy年MM月dd日 HH:mm:ss");
        System.out.println(s);
        //也可以拿到部分
        String s1 = DateUtils.dateTostring(d, "yyyy年MM月dd日");
        System.out.println(s1);
        System.out.println("----以下是解析----");
        String s2="2021-12-15 00:00:00";
        Date date = DateUtils.stringTodate(s2, "yyyy-MM-dd HH:mm:ss");
        System.out.println(date);
    }
}

运行结果:

4. Calendar类-日历

概述

Calendar为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法

Calendar提供了一个类方法getlnstance用于获取Calendar对象,其日历字段已使用当前日期和时间

初始化: Calendar rightNow = Calendar.getInstance();


import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取对象
        Calendar c = Calendar.getInstance();//多态的形式
        int year = c.get(Calendar.YEAR);//因为字段是静态修饰的,所以通过对象调用字段
        //即Calendar.YEAR
        int month = c.get(Calendar.MONTH)+1;//一定要注意,月份是从0开始的,要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year+"年"+month+"月"+date+"日");
    }
}

注意:这里的月份是从0开始的,所以在使用时要+1

运行结果:

2021年12月15日

4.1 Calendar 的常用方法

add()方法,由于在默认类中重写了方法,所以这里可以直接使用

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取对象
        Calendar c = Calendar.getInstance();//多态的形式
        c.add(Calendar.YEAR,10);//在现在的基础上增加十年
        c.add(Calendar.DATE,-5);//在原来的基础上-5天
        int year = c.get(Calendar.YEAR);//因为字段是静态修饰的,所以通过对象调用字段
        //即Calendar.YEAR
        int month = c.get(Calendar.MONTH)+1;//一定要注意,月份是从0开始的,要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year+"年"+month+"月"+date+"日");
    }
}

运行结果:

set()方法

import java.util.Calendar;

public class CalendarDemo {
    public static void main(String[] args) {
        //获取对象
        Calendar c = Calendar.getInstance();//多态的形式
        c.set(2022,11,05);//这里11出来的结果会是12
        int year = c.get(Calendar.YEAR);//因为字段是静态修饰的,所以通过对象调用字段
        //即Calendar.YEAR
        int month = c.get(Calendar.MONTH)+1;//一定要注意,月份是从0开始的,要+1
        int date = c.get(Calendar.DATE);
        System.out.println(year+"年"+month+"月"+date+"日");
    }
}

运行结果:

以上就是JavaSE系列基础包装类及日历类详解的详细内容,更多关于JavaSE 基础包装类 日历类的资料请关注我们其它相关文章!

(0)

相关推荐

  • JavaSE学习之内部类及常用API

    目录 1.内部类 1.1 内部类概述 1.2 成员内部类 1.3 局部内部类 1.4 匿名内部类 1.5 匿名内部类在开发中的使用 2.常用API 2.1Math 2.2 System 2.3 Object 2.4 Array的排序 1.内部类 1.1 内部类概述 内部类:就是在一个类中定义一个类.例如:在一个类A内部定义一个类B,类B就被称为内部类 格式:public class 类名{修饰符 class 类名{}} 范例 public class Outer{ public class In

  • Java Calendar日历类原理及使用方法

    这篇文章主要介绍了Java Calendar日历类原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 java.util.Calendar 是日历类,在Date后出现,替换掉了许多Date的方法.该类将所有可能用到的时间信息封装为静态成员变量,方便获取.日历类就是方便获取各个时间属性的.Calendar类无法直接创建对象使用,里边有一个静态方法getInstance(),该方法返回了Calendar类的子类对象.Calendar类中提

  • Java基础之包装类

    一.java的包装类 什么是包装类 对于基本数据类型来讲,其实就是一个数字,但是当给基本数据类型添加一些属性 方法和构造器,将基本数据类型对应进行一个封装,就产生了一个新的类,这个类被称为是包装类. 那么基本数据类型在前面中讲过有byte short int long float double char boolean,也就是将这些进行封装,基本数据类型和包装类的对应关系是怎样的呢? 基本数据类型 对应的包装类 byte Byte short Short int Integer long Lon

  • Java基础之匿名内部类、包装类

    目录 1.匿名内部类 2.Object类简介 2.1 取得对象信息toString() 2.2 对象的比较equals() 2.3 Object接口引用数据类型 3.包装类 3.1 装箱与拆箱 3.2 字符串与基本数据类型的转换 3.3 包的定义 3.4 包的导入 4.访问控制权限 5.jar命令 1.匿名内部类 内部类:在一个类的内部定义了另外的类,称为内部类,匿名内部类指的是没有名字的内部类.为了清楚内部类的主要作用,下面首先观察一个代码. interface IMessage{ publi

  • java基础之包装类的介绍及使用

    1. 包装类的介绍 针对八种基本数据类型定义相应的引用类型--包装类(封装类),有了类的热点后,就可以调用类中的方法 2. 基本数据类型 --> 包装类:调用包装类的构造器,如in1.toString() 使用场景:如果形参是一个object类类型的,必须要把基本类型转换成包装类才能传入到形参用 3. 包装类 --> 基本数据类型:调用包装类的xxxValue() 使用场景:包装类作为一个对象,不能做加减乘除运算的,必须转换成基本类型后才可以 但jdk5已经支持自动装箱和自动拆箱,所以不需要再

  • JavaSE系列基础包装类及日历类详解

    目录 1. 基本类型包装类 1.1 概述 1.2 Integer类的概述与使用 1.3 int和String的相互转换 1.4 案例-字符串中数据排序 1.5 自动装箱和拆箱 2. Date类 2.1 Date常用方法 3. SimpleDateFormat类 3.1 案例-日期工具类 4. Calendar类-日历 4.1 Calendar 的常用方法 1. 基本类型包装类 1.1 概述 它用于基本数据类型与字符串之间的转换 举例: public class IntegerDemo { pub

  • Python基础之元类详解

    1.python 中一切皆是对象,类本身也是一个对象,当使用关键字 class 的时候,python 解释器在加载 class 的时候会创建一个对象(这里的对象指的是类而非类的实例) class Student: pass s = Student() print(type(s)) # <class '__main__.Student'> print(type(Student)) # <class 'type'> 2.什么是元类 元类是类的类,是类的模板 元类是用来控制如何创建类的,

  • Java基础之Object类详解

    object类的介绍 object是所有类的直接父类或者是间接父类,为什么这么说呢? 可以查询java8的API帮助文档: 可见在这样的一个类树中,所有的类的根还是Object类 在IDEA中新建一个类,系统会默认继承Object类 public class Pet extends Object{ } 那么Dog继承了Pet类的属性和行为方法,还会继承Object类的属性和行为方法了吗?这一点是肯定的,Pet类作为Object类的子类,Dog类作为Pet类的子类,所以说Object是Dog类的间

  • Go语言基础go接口用法示例详解

    目录 概述 语法 定义接口 实现接口 空接口 接口的组合 总结 概述 Go 语言中的接口就是方法签名的集合,接口只有声明,没有实现,不包含变量. 语法 定义接口 type [接口名] interface { 方法名1(参数列表) 返回值列表 方法名2(参数列表) 返回值列表 ... } 例子 type Isay interface{ sayHi() } 实现接口 例子 //定义接口的实现类 type Chinese struct{} //实现接口 func (_ *Chinese) sayHi(

  • C++基础教程之指针拷贝详解

    C++基础教程之指针拷贝详解 指针是编程人员的梦魇,对C语言的开发者是如此,对C++的开发者也是如此.特别是在C++中,如果不注意处理类中的指针,非常容易出问题.如果朋友们不相信可以看看下面的代码: class data { int* value; public: data(int num){ if(num > 0) value = (int*)malloc(sizeof(int)* num); } ~data(){ if(value) free(value); } }; void proces

  • BootStrap智能表单实战系列(八)表单配置json详解

    本章属于该系列的高级部分,将介绍表单中一些列的配置 1.config列的配置: 主要用于控制布局 :config:{autoLayout:true|'1,2,2,4'} true:根据配置项最里层的数量来自动使用不同的栅格, '1,2,2,4':使用指定的栅格来布局,如果配置的列数不足的情况将使用第一项(n,n 为一项) 2.hides的配置项 hides:[{id:'xxx',value:''}] 此项是可选的,主要用于编辑时存放一些不可见的列(如主键ID的值) 3.eles 表单元素的配置(

  • Java基础之Filter的实例详解

    Java基础之Filter的实例详解 定义: Filter,是Servlet的一种,接口类为javax.servlet.Filter,以一种模块化或者可重用的方法封装公共行为,本质是可复用的代码片段. 职责:在请求到达Servlet之前对请求头作预处理,或者在服务器响应完成之后对响应内容作后处理.分界线为chain.doFilter的调用.该调用是将请求处理权交给其Filter列表链上的其它Filter. 生命周期:  Filter在Web容器启动时被容器实例化,并调用其init方法完成初始化,

  • Java集合基础知识 List/Set/Map详解

    一.List Set 区别 List 有序,可重复: Set 无序,不重复: 二.List Set 实现类间区别及原理 Arraylist 底层实现使用Object[],数组查询效率高 扩容机制 1.6采用(capacity * 3)/ 2 + 1,默认容量为10: 1.7采用(capacity >> 2 + capacity)实现,位移动效率高于数学运算,右移一位等于乘以2倍: 读取速度快,写入会涉及到扩容,所以相对较慢. LinkedList底层采用双向链表,只记录 first 和 las

  • Java基础之垃圾回收机制详解

    一.GC的作用 进行内存管理 C语言中的内存,申请内存之后需要手动释放:一旦忘记释放,就会发生内存泄漏! 而Java语言中,申请内存后会由GC来释放内存空间,无需手动释放 GC虽然代替了手动释放的操作,但是它也有局限性: 需要消耗更多的资源: 没有手动释放那么及时: STW(Stop The World)会影响程序的执行效率 二.GC主要回收哪些内存 (1)堆:主要回收堆中的内存 (2)方法区:需要回收 (3)栈(包括本地方法栈和JVM虚拟机栈):不需要回收,栈上的内存什么时候释放是明确的(线程

  • Java基础之动态代理Cglib详解

    一.前言 经测试,jdk创建对象的速度远大于cglib,这是由于cglib创建对象时需要操作字节码.cglib执行速度略大于jdk,所以比较适合单例模式.另外由于CGLIB的大部分类是直接对Java字节码进行操作,这样生成的类会在Java的永久堆中.如果动态代理操作过多,容易造成永久堆满,触发OutOfMemory异常.spring默认使用jdk动态代理,如果类没有接口,则使用cglib. 二.服务 package proxy.cglib; /** * @Description: <br/>

随机推荐