• JavaSE| 包装类| 时间


     包装类

    * 因为Java是面向对象的语言,所以很多API或新特性都是针对“对象”来设计的,但是Java设计之初时,是C语言很盛行的时候,所以Java保留了C语言中的8种基本数据类型,
    保留它们有好处,速度快,计算方便,每一种数据类型都有固定的大小... * 如果我们的数据使用了8种基本数据类型的变量来保存,后面有想使用Java中只针对“对象”来设计的很多API或新特性时,Java就为8种基本数据类型设计它们的包装类。 * * 只针对“对象”来设计的很多API或新特性 * 例如:集合,泛型只针对引用数据类型 * * 包装类:为了包装基本数据类型的数据为“对象”。 * byte->Byte * short->Short * int->Integer * long->Long * float->Float * double->Double * char->Character * boolean->Boolean
    装箱:把基本数据类型的数据“包装”为对象,称为装箱 装的目的是为了使用只针对“对象”来设计的很多API或新特性     手动装箱:Integer i = new Integer(num);     自动装箱: Integer j = int的值或变量; JDK1.5之后是自动装箱、拆箱;
      Double d = (double) 10; 左边的d是Double包装类型,右边10如果是int类型是无法自动装箱的,要先转成double类型;
    拆箱:把包装类的对象“拆开”为基本数据类型的数据,称为拆箱        拆的目的是为了计算简便,高效
          手动拆箱: int num = Integer的对象.intValue();
          自动拆箱: 
     * 说明:不管是拆箱还是装箱都是对应类型之间的,即 int -> Integer;  double -> Double
    * java中数据类型的转换: * 1、基本数据类型之间的转换:自动类型转换与强制类型转换 * 2、父子类之间转换:向上转型与向下转型 * 3、包装类与基本数据类型之间:装箱与拆箱

    以Integer为例

    java.lang包下:
     * 
     * 以:Integer为例
     * 1、常量
     * Integer.MAX_VALUE
     * Integer.MIN_VALUE
     * 
     * 2、方法
     * (1)比较包装类对象的大小
     * int compareTo(xx) 必须是相同类型之间进行; 如:   i.compareTo(i2);  即i比i2大多少?  做减法运算,i与i2都是包装类对象的相同类型
     * 
     * (2)和String类型的转换
       A:从String的对象 -> 包装类的对象
         "123" ->Integer.valueOf(字符串)
              new Integer( str );

       B:从String的对象 -> 基本数据类型      "123" -> 123 如: int i = Integer.parseInt(str);      int Integer.parseInt(字符串)       C:把包装类的对象->字符串 in1.toString();      toString()       D:把基本数据类型 -》字符串      + "" 字符串的拼接;      (3)转成各种进制的形式

        System.out.println("二进制:" + Integer.toBinaryString(num));
        System.out.println("八进制:" + Integer.toOctalString(num));
        System.out.println("十六进制:" + Integer.toHexString(num));



     * 基本数据类型之间的比较: ==  比较的是数据值
     * 包装类之间的比较: ==  比较的是地址值,但推荐使用 equals
     * 
     * 原因是包装类对象,有一部分是缓存对象,(常量对象) ;在缓存对象范围内比较,两个包装类对象的地址值都是相同的;超过这个范围或者没有范围的,地址值就不一样了
     * Byte:-128~127
     * Short:-128~127
     * Integer:-128~127
     * Long:-128~127
     * 
     * 没有缓存对象:
     * Float
     * Double
     * 
     * Character:0~127  最早ASCII码的范围128个字符
     * Boolean:true,false
                    Double d1 = 20.1;
            Double d2 = 20.1;
            System.out.println(d1==d2);//false
            
            Integer i11 = 20;
            Integer i12 = 20;
            System.out.println(i11==i12); //true
            System.out.println(i11.equals(i12));//true
    View Code

     Object类、 Arrays类、scanner类、Math类

    java.lang.Object类:
     * (1)Class getClass():获取当前对象的运行时类型
     * (2void finalize():当对象要被垃圾回收器回收时,垃圾回收器负责调用,每个对象只调用一次
     * (3)boolean equals(Object o):用来比较当前对象和指定对象是否“相等”,默认情况下,和==一样比较对象的地址,子类可以重写。
     *         重写时注意:
     *         (1)和hashCode()一起重写,选择的属性一样
     *         (2)遵循:自反性、传递性、一致性、对称性,非空对象与空对象比较返回false
     * (4int hashCode():每个对象都会通过散列函数计算出一个int 整数值,支持此方法是为了提高哈希表等的性能。
     *         特点:两个对象如果相等,他们的hashCode值一定相等。
     *             如果两个对象的hashCode值相等,这两个对象不一定相等。
     *             如果两个对象的hashCode值不相等,那么这两个对象一定不相等。
     * (5)String toString():把对象用字符串形式返回,默认返回“类型@对象的hash码的十六进制值”,子类建议重写。
     * 
    java.util.Arrays类:
     * (1static int binarySearch(Object[] a, Object key) :在a数组中找key,如果存在返回下标,不存在返回“负数”,
     *     用于二分查找的数组一定是有序。
     * 
     * (2static Object[] copyOf(Object[] original, int newLength) :从original数组复制出一个新数组,新数组的长度是newLength。
     *     这个newLength可以<=original.length,也可以newLength>original.length,如果大于newLength>original.length,那么剩下的元素用默认值。
     *       默认值:
     *         byte,short,int,long0
     *         float,double:0.0
     *         char:u0000
     *         boolean:false
     *         引用数据类型:null
     * (3static void sort(Object[] a) :对a数组进行排序,默认按照元素的“自然顺序”进行“升序”排序。     
     *        static void sort(Object[] a, Comparator c) :对数组a进行排序,按照定制比较器c,对元素进行“升序"排序。
     * 
     * 自然排序:要求元素实现java.lang.Comparable接口,重写int compareTo(Object obj)
     * 定制排序:要求单独写个类实现java.util.Comparator接口,重写int compare(Object o1, Object o2)
     * 
     * (4static String toString(Object[] a) :把元素拼接为一个字符串:"[元素1,元素2....]"
     * 
     * 
    java.util.Scanner:
     * (1)构造器
     *     Scanner input = new Scanner(System.in);
     * (2)其他方法
     * 输入一个int的整数:int nextInt();
     * 输入一个double的小数:double nextDouble()
     * 输入一个boolean的值:boolean nextBoolean()
     * 输入一个字符串:String next()
     * 输入一个字符:没有现成的:从字符串中取出第一个字符
     *             input.next().charAt(0)
    
    java.lang.Math:
     * (1static final double PI=...;
     * (2static double random():产生[0,1)范围的小数
     * (3static double sqrt(x):返回x的平方根
     
    java.math包:
      BigDecimal:大小数,精度要求特别长 
      BigInteger:大整数
    
    java.lang.Math:
       ceil:天花板
       floor:地板
       round:舍入模式
       
       max(x,y)
       min(x,y)
    
    
    public class TestMath {
        @Test
        public void test1(){
            System.out.println(Math.ceil(2.5));//3
            System.out.println(Math.floor(2.5));//2
            System.out.println(Math.round(2.5));//3
            System.out.println("--------------------");
            System.out.println(Math.ceil(-2.5));//-2
            System.out.println(Math.floor(-2.5));//-3
            System.out.println(Math.round(-2.5));//-2  round = floor(值+0.5)
            System.out.println("--------------------");
            System.out.println(Math.ceil(-2.6));//-2
            System.out.println(Math.floor(-2.6));//-3
            System.out.println(Math.round(-2.6));//-2  round = floor(值+0.5)
        }
    }

    System类

    系统类java.lang.System:
     常量对象有三个
     * (1)System.out:打印普通信息  PrintStream
     * (2)System.err:打印错误信息  PrintStream
     * (3)System.in:默认情况下,代表键盘输入 InputStream
    其他的方法:
     * (1)System.currentTimeMillis():当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
             --->> 1545061369999
     * (2)System.arraycopy(src, srcPos, dest, destPos, length):
     *         如果src和dest是不同的数组,表示复制,从srt的[srcPos]开始,一共复制length个到dest的[destPos]开始存。
     *         如果src和dest是同一个数组,表示移动元素:
     *             如果srcPos > destPos:左移              一般用于删除
     *             如果srcPos < destPos:右移        一般用于插入
     * 
     * (3)System.gc():表示通知垃圾回收器来回收垃圾,但不是立马响应,但是只要调用了,一定会来。
     *     开发是不建议手动调用gc()方法,因为垃圾回收算法已经很好了。
     * (4)System.exit(0):0表示正常退出
     *   System.exit(1):1表示异常退出
     * (5)Properties getProperties():  System.getProperties(); 获取系统属性  
     

    时间API

    * JDK1.8之前:
    java.util.Date:  类 Date 表示特定的瞬间,精确到毫秒。
    
     * (1)new Date():获取系统时间
     * (2)new Date( 毫秒值 ):把毫秒转时间,Date类型的
     * (3)long getTime():把时间转毫秒
    
         Date date = new Date();
            System.out.println(date); //Wed Dec 05 19:55:08 GMT+08:00 2018
            
            long time = date.getTime();
            long millis = System.currentTimeMillis();
            System.out.println(time); //1544011060925
            System.out.println(millis);//1544011235808
            
            System.out.println(new Date(Long.MAX_VALUE)); //Sun Aug 17 15:12:55 GMT+08:00 292278994
            
    
    java.util.Calendar:日历类型; 它的子类:GregorianCalendar
    
     方法:
    (1) Calendar getInstance()
    (2) get(常量名)
    
    
        Calendar c = Calendar.getInstance();//使用默认时区和语言环境获得一个日历
            
            int year = c.get(YEAR);
            int month = c.get(MONTH) + 1; //12
            int day = c.get(DAY_OF_MONTH); //5
            System.out.println(day); 
            
            int daysOfYear = c.get(DAY_OF_YEAR);
            System.out.println(year+"年" + month +"月" +day + "日是这一年的第" + daysOfYear);
            
            int hour1 = c.get(HOUR);//12小时制
            int hour2 = c.get(HOUR_OF_DAY);//24小时值
            
            System.out.println(hour2); 
            
            c.add(DAY_OF_MONTH, -50);//正数是往后推算日期,负数是往前推断日期
    
    
    时区:了解
        String[] all = TimeZone.getAvailableIDs();
        TimeZone t = TimeZone.getDefault();
        TimeZone t1 = TimeZone.getTimeZone("America/New_York");
        Calendar c2 = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));


     日期时间的格式化:
      1、把指定格式字符串转成日期时间对象
      2、把日期时间对象转成指定格式字符串
      
      java.text.DateFormat
      java.text.SimpleDateFormat
       
      (1)Date parse(字符串) 字符串转成Date类型的
      (2)String format(Date的日期对象) new SimpleDateFormate("yyyy-MM-dd HH:mm").formate(new Date());  Date类型转成字符串类型的

     

        public static void main(String[] args) throws ParseException {
          String str = "2018-12-4 19:44";
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

          Date date = sdf.parse(str);
          System.out.println(date); //Tue Dec 04 19:44:00 GMT+08:00 2018
           System.out.println(sdf.format(new Date()));  // 转成字符串类型格式 --> 2018-12-17 23:36


          Date now = new Date();
          System.out.println(now); //Mon Dec 17 23:27:18 GMT+08:00 2018

          SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒SSS毫秒 E");
          String string = sf.format(now);
          System.out.println(string); //2018年12月05日 20点34分36秒290毫秒 星期三

      }

    JDK1.8之前有关时间的API:
      java.util.Date
      java.util.Calendar
      java.text.DateFormat和java.text.SimpleDateFormat
      
      java.sql.Date
      java.sql.Timestamp
      java.sql.Time
      
    老版的日期时间API:
     * (1)日期时间对象没有和String,Integer等一样设计为不可变。
     * 在实际开发中,认为某个日期时间对象,代表某个时间点后就不应该修改,修改应该产生新的对象。
     * (2)偏移性:Date中的年份是从1900开始的,而月份都是从0开始的。
     * (3)日期时间的格式化DateFormat没有提供支持Calendar,而API中建议使用Calendar来代替Date的很多已过时方法
     * (4)不能处理闰秒
     * (5)线程不安全
     * ...
    JDK1.8时,
     * 1、LocalDate:只表示日期
     *   LocalTime:只表示时间
     *   LocalDateTime:可以表示日期和时间
     * (1)now()获取当前的日期或时间
     * (2)of(year,month,day)
     * (3)getXxx()
     * (4)修改日期,时间,会得到一个新的日期时间对象
         plusXxx
         minusXxx
         withXxx
     * (5)isLeapYear()
     * 
     * 2、日期时间格式化

     LocalDate、LocalTime、LocalDateTime

        @Test
          public void test2(){
            LocalDate today = LocalDate.now();
            System.out.println(today);//2018-12-17
            System.out.println(today.getMonth()); //DECEMBER
            System.out.println(today.getYear()+"年" + today.getMonthValue() +"月"+ today.getDayOfMonth() +"日" + ",过了" + today.getDayOfYear()+"天");
                    //2018年12月17日,过了351天 System.out.println(LocalDate.of(2018, 12, 20).getDayOfYear()); //354 System.out.println(today.plusDays(30)); ////再过30天的日期 today.minusDays(50);//50天前的日期 today.withDayOfYear(200);//一年中第200天是什么日期 System.out.println(today.isLeapYear()); //false System.out.println(LocalDateTime.now());//2018-12-17T23:50:09.662 System.out.println(LocalTime.now()); //23:51:31.727
    }

     日期时间格式

        @Test
        public void test3() throws ParseException{
            String str = "2018年12月11日";
            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyy年MM月dd日");
            TemporalAccessor ta = df.parse(str);
            System.out.println(ta); //{},ISO resolved to 2018-12-11
            
            System.out.println(LocalDate.from(ta)); //2018-12-11
            
            System.out.println(new SimpleDateFormat("yyy年MM月dd日").parse(str));//Tue Dec 11 00:00:00 GMT+08:00 2018
            
        }
        
        @Test
        public void test4(){
            String str = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).format(LocalDate.now());
            System.out.println(str);//2018年12月18日 星期二
            System.out.println( DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).format(LocalDate.now()));//2018-12-18
        }
        
  • 相关阅读:
    2020-2021-1 20201216 《信息安全专业导论》第十周学习总结
    2020-2021-1 20201216 《信息安全专业导论》第9周学习总结
    熟悉编程语言
    2020-2021-1 20201216 《信息安全专业导论》第八周学习总结
    如何学好编程
    2020-2021第一学期20202428《计算机科学概论》第二周自习总结
    “七剑下天山”学习小组第一周学习中遇到的问题及解决
    2020-2021第一学期20202407《计算机科学概论》第一次学习总结
    开启我的测试之路
    大数据测试
  • 原文地址:https://www.cnblogs.com/shengyang17/p/10063564.html
Copyright © 2020-2023  润新知