常用类和自动封装

Math

  • 概述
    math是一个封装了一系列数学运算和三角函数相关的类,执行基本数学运算的方法。数学类是一个最终类,不可以重写。
    注意:都是static修饰的
  • 功能:
    1. Math.PI
    2. Math.E
    3. Math.abs(num),求绝对值
    4. Math.ceil(num)向上取整
    5. Math.floor(num) 向下取整
    6. Math.max(a,b)求最大值
    7. Math.min(a,b)求最小值
    8. Math.pow(a,b)求a的b次方
    9. Math.sqrt() 开根号
    10. Math.random()随机生成(0,1)
    11. Math.toRadians() 角度->弧度
    12. Math.toDegrees() 弧度->角度

Data

  • 概述:表示特定的瞬间,是一个毫秒值

  • 构造函数

    1. new Date() 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
    2. new Date(long)
  • 常用方法:

    1. getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
    2. compareTo(date) 比较两个日期的顺序。
    3. after()测试此日期是否在指定日期之后。
    4. before(date)测试此日期是否在指定日期之前
  • SimpleDateFormat

    1. 概念:它是DataFormat的子类,专门用于对Date进行格式化和解析

    2. 常见的时间模式
      y 年 M月 d 日 H 小时 m分钟 s秒

    3. 格式化:将Date日期以指定的格式按字符串输出format(Date)

    4. 解析:将已经格式化后的日期字符串解析成一个Date对象,parse(String)
      注意:要解析的日期字符串的格式必须与SimpleDateFormat指定的格式,否则会发生ParseException

        需求:时间以XXX年XX月XX日XX时XX分XX秒输出
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
        String time= sdf.format(new Date());
        syso(time);//2019年08月05日07时15分18秒
      
        需求:解析
        String sj="2008年8月8号8时8分8秒";
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd号hh时mm分ss秒");
        Date date=sdf.parse(sj);
        syso(date);//Fri Aug 08 08:08:08 CST 2008
      
        需求是:查看你活到现在的天数
        public static void f1() throws ParseException {
      		Scanner sc = new Scanner(System.in);
      		System.out.println("请输入你的出生年月:2000年1月1日");
      		String birthday = sc.next();
      		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
      		Date birthDate = sdf.parse(birthday);//将输入的日期解析
      		Date nowDate = new Date();//获取当前的日期对象
      		long birthTime = birthDate.getTime();
      		long nowTime = nowDate.getTime();
      		System.out.println((nowTime - birthTime) / 1000.0 / 3600 / 24);
      	}
        ```
      
        //计算距离国庆还有几天
         String happyDay="2019年10月1日";
         SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
         Date happyDate=sdf.parse(happyDay);
         Date dates= new Date();//获取当前时间
         long nowTime=dates.getTime();
         long happyDateTime=happyDate.getTime();
         System.out.println((happyDateTime-nowTime)/1000/3600/24);
      
      
      

Calendar

  • 概念:一个操作日历字段的抽象类
    对象的获取:getInstance()
    Calendar类是一个抽象类,Calendar提供了一个类方法getInstance,以获得此类型的一个通用的 对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
    Calendar rightNow = Calendar.getInstance();
  Calendar c=Calendar.getInstance();
   	System.out.println(c.get(Calendar.DAY_OF_YEAR));
   	//设置时间,底层是0-11月
   	c.set(Calendar.MONTH, 5);
   	System.out.println(c);
  • 常用方法
    1. getTime():获取Date对象
    2. getTimeInMillis():获取毫秒值,同Date的gettime(),同System.currentTimeMillis()
    3. set(field,value):对指定的时间域设置值
    4. set(year,month,date,hour,minute,second);
    5. get(filed):获取指定时间域上的值
    6. add(filed,amount):为指定的时间域设置偏移值
      需求是:查看你活到现在的天数
      private static void t1_2() {
       	Scanner sc = new  Scanner(System.in);
       	System.out.println("请输入年份");
       	int year = sc.nextInt();
       	System.out.println("请输入月份");
       	int month = sc.nextInt();
       	System.out.println("请输入日子");
       	int date = sc.nextInt();
       	Calendar c = Calendar.getInstance();
       	c.set(year, month, date);
       	long birthTime = c.getTimeInMillis();
       	long nowTime = System.currentTimeMillis();
       	System.out.println((nowTime-birthTime) / 1000/ 3600 / 24);
       }
      
      //需求:求当前时间到国庆节的天数
       	Scanner sc =new Scanner(System.in);
       	System.out.println("请输入年份");
       	int year =sc.nextInt();
       	System.out.println("请输入月份");
       	int month =sc.nextInt();
       	System.out.println("请输入日");
       	int day =sc.nextInt();
       	//获取日历对象
       	Calendar calendar= Calendar.getInstance();
       	calendar.set(year, month, day);
       	long scTime=calendar.getTimeInMillis();
       	long nowTime=System.currentTimeMillis();
       	System.out.println((scTime-nowTime)/3600/1000/24);
      

**基本数据类型的包装类

  • 概述:
    基本数据类型的创建和使用非常方法,但是我们无法通过基础数据类型调用一些功能来操作这些数据。
    现在将这些基本数据类型封装成一个类,就可以在这个类中定义一些专门操作这些数据的功能
    这种类就是基本数据类型的包装类

  • 基本类型与包装类的对应关系
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    char Character
    boolean Boolean

  • +装箱和拆箱
    装箱:基本类型->包装类

    1. 使用包装类的构造函数
      new Integer(int)
      new Integer(string):当字符串不是整数形式的字符串时会发生NumberFormatException异常
         int i = 3;
         Integer i1 = new Integer(i);
         System.out.println(i1+1);//4
            
         Integer i2=new Integer("333");
         System.out.println(i2);//333
         
         Integer i2=new Integer("bbb");
         System.out.println(i2);//NumberFormatException
      
      
    2. 使用包装类的静态方法
      valueOf(int)
      valueOf(String)
      int j = 4;
      Integer i3 = Integer.valueOf(j);
      System.out.println(i3);//4
      Integer i4 = Integer.valueOf("444");
      System.out.println(i4);///4
      

    拆箱:包装类->基本类型

    1. 使用包装类的成员方法
      intValue(Integer);当字符串不是整数形式的字符串时会发生NumberFormatException异常
        System.out.println("===========拆箱===========");
        Integer i5 = new Integer(999);
        int k = i5.intValue();
        System.out.println(k*k);//998001
      
  • 自动装箱和自动拆箱
    jdk1.5之后,基本类型和包装类可以实现自动转换
    自动装箱:它隐含了new Integer(t);
    int t=3; Integer i=t;
    自动拆箱:它隐含了i.intValue();
    Integer i=new Integer(666); int k=i;

  • 包装类的功能

    1. 获取指定类型的最大、最小值
      Integer.MAX_VALUE
    2. toBinaryString(int)
    3. toOctalString(int)
    4. toHexString(int)
  • 基本类型/包装类与字符串的转换

    1. 空串的连接
    2. 包装类的静态tostring(数据)方法
    3. string的静态valueOf(数据)方法
  • string->基本类型/包装类

    1. 包装类的构造方法
    2. 包装类的静态valueOf(string)方法
    3. 包装类的静态parseXXX(string)方法
       String s1 = Integer.toString(333);
     	String s2 = 333 + "";
     	String s3 = String.valueOf(444);
     	
     	System.out.println("------------------------");
     	
     	Integer i1 = new Integer("666");
     	int i2 = new Integer("666");
     	Integer i3 = Integer.valueOf("555");
     	int i4 = Integer.parseInt("999");
     	System.out.println(i4 + 1);
     	
    

注意点:在面试的的时候有点恶心的,

 System.out.println("-----------恶心心-----------");
 Integer i = Integer.valueOf("-5");
 System.out.println(i+5);//0

Integer i = Integer.valueOf("+5");
 System.out.println(i+5);//10

Integer i = Integer.valueOf("1-5");
 System.out.println(i+5);//这个是报错的

 Integer i = Integer.valueOf("-5");
 System.out.println(i+5);//0

Integer i = Integer.valueOf("+5");
 System.out.println(i+5);//10

Integer i = Integer.valueOf("1-5");
 System.out.println(i+5);//这个是报错的

自动装拆箱案例
ArrayList list= new ArrayList<>();
//ArrayList集合无法存储基本数据类型,可以存储Integer包装类
list.add(1);//自动装箱 list.add(new Integer(1));
int j=list.git(i);//自动拆箱,list.get(i).intValue()

你可能感兴趣的:(常用类和自动封装)