• JAVA API 之包装类、数学类和 Calendar 类


    1. 包装类
    (基本类型中没有多少我们能够使用的方法和属性,为了便捷我们需要自己去写)
    针对每一种基本类型提供了对应的类的形式 --- 包装类
     
    byte short int long float double char boolean void
    Byte Short Integer Long Float Double Character Boolean Void
    void 是一个最终类,不能被实例化。
     
     
     
    package cn.tedu.baozhuang;
    
    public class IntegerDemo1 {
        
        public static void main(String[] args) {
            
            int i = 7;
            //封箱
            Integer in = new Integer(i);
            
            //自动封箱,都是 JDK1.5 的特性
            //其实就是在底层默认调用 Interger 类身上的静态方法 valueOf,Double Boolean 这些也是这样的!!
            //Integer in2 = Integer.valueOf(i);
            Integer in2 = i;
            
            Integer in3 = new Integer(5);
            //自动拆箱,在底层调用对象身上的 IntegerValue()
            //in3.IntegerValue();
            int i3 = in3;
            
        }
    }
     
    当把基本类型的变量直接赋值给对应的引用类型的对象,--- 自动封箱,底层是调用了对应类身上的 valueOf() 方法
    当把引用类型的对象直接赋值给对应的基本类型的变量,---自动拆箱,底层是调用了对应类身上的***Value() 方法,
     
    package cn.tedu.baozhuang;
    
    public class IntegerDemo2 {
    
        public static void main(String[] args) {
            
            //Integer i1 = Integer.valueOf();
            //如果这个值不在 -128~127 底层的 valueOf() 调用构造方法 new 一把,返回一个新对象!!!
            //如果在 -128~127,从 cache 数组中对应下标位置上取值。
            Integer i1 = 50;
            Integer i2 = 50;
            
            System.out.println(i1 == i2);
            
            Integer in = 400;
            int i = 400;
            //包装类和基本类型比较时,会进行自动拆箱成基本类型
            System.out.println(in == i);
            
        }
        
    }
    四种整数型都有范围判断(-128~127),float 就没有,直接 new 了!
     
     
    注意:凡是 Number 的子类都会提供将字符串转化为对应类型的构造方法
     
     
     
    包装类产生的对象的哈希码是固定的,不随环境改变。
     
    注意:字面量的哈希码不随环境不随系统而改变
     
     
     
    2. 数学类
    (是在代码中调用 Java 中写好的数学类)
     
    Math --- 最终类,针对基本类型提供了基本的数学运算
    BigDecimal --- 能够精确运算,要求参数以字符串形式传递
     
    几个比较重要的方法对应如下代码:
    package cn.tedu.math;
    
    import java.util.Random;
    
    public class MathDemo1 {
    
        public static void main(String[] args) {
            
            System.out.println(Math.abs(-5.86));
            //求立方根
            System.out.println(Math.cbrt(8));
            
            //向上取整,返回一个double 类型的数据
            System.out.println(Math.ceil(4.06));
            
            //向下取整,都是返回double 类型的
            System.out.println(Math.floor(4.06));
            
            //四舍五入,返回一个 long 类型的
            System.out.println(Math.round(3.68));
            
            //返回一个[0,1)的一个随机小数
            System.out.println(Math.random());
            
            //获取 30-90 一个随机整数
            System.out.println((int)(Math.random()*61+30));
            
            //获取 0-30的数,只能是整数
            Random r = new Random();
            System.out.println(r.nextInt(30));
            
            //抽奖系统,实际上要考虑权重问题(就是让那种经常到这里消费的人的概率高一些)
            if(Math.random() * Math.random() > 0.95){
                System.out.println("亲,恭喜你中奖啦!");
            }
        }
        
    }
    两个很大的数相乘,用一个数组存放。
    int[ ] arr1 = new int[ n ];
    int[ ] arr2 = new int[ n ];
    int[ ] result = new int[ 2*n ];
     
    for(int i = 0; i < n; i++){
        for(int j = 0;  j < n; j++){
            int r = arr1[i] * arr2[j] + result[ i+j ];//是一个暂时的数,用于后面分别存放,是i+j位的数(其实就是上一位的 i + j +1 位)
            result[ i+j ] = r % 10;  //表示第 i + j 位的结果
            result[ i+j+1 ] = r / 10; //表示第 i + j + 1 位结果,用于表示进位
        }
    }
     
     
    3. Calender --- 抽象类
     
    JDK1.8的特性:简书,51CTO,是以讹传讹,自己试试是不是正确。最准确的是别人的官网!!
    Map<String, Integer> map = {"a":1, "b":2};   //别人说都没有说
     
    package cn.tedu.time;
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    public class DateDemo {
    
        public static void main(String[] args) throws Exception {
    
            //获取当前时间
            System.out.println(new Date().toString());
            
            //获取指定时间
            //这个方法在 1990-01的基础上进行累加
            @SuppressWarnings("deprecation")
            //压制警告
            //这个方法已过时
            Date date = new Date(2000,2,9);
            System.out.println(date);
            
            //将字符串转化为日期
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date1 = sdf.parse("2000-12-15 18:58:45");
            System.out.println(date1);
            
            //将日期转化为字符串
            //XX年XX月XX日
            SimpleDateFormat sdf2 = new SimpleDateFormat("yy年MM月dd日 HH时mm分ss秒");
            String str = sdf2.format(date1);
            
            //格里高利历(GregorianCalendar),毫秒值(time=1534494939307),偏移量---表示当前时期到零时区的毫秒值(offset=28800000)
            //WEEK_OF_MONTH=3(不完全周) DAY_OF_WEEK_IN_MONTH=3
    //        Calendar 
            
        }
        
    }
  • 相关阅读:
    SQL中文转拼音
    cocos2D 虚拟摇杆Joystick功能实现
    cocos2d 粒子效果以及Particle Designer粒子工具的学习
    android 模拟器出错,emulator: ERROR: unknown virtual device name
    [转][越狱破解] 苹果itouch 4 iOS5.0.1完美越狱教程+资源下载
    objectivec 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
    [转]cocos2dx添加广告条(IOS and Android)
    cocos2d1.0.1x0.10.0版本 设置横屏与竖屏的方法
    【转】总结阐述Cocos2dX与Cocos2diphone区别;
    Objectivec 中CGGeometry几何类常用方法简单整理
  • 原文地址:https://www.cnblogs.com/tangdiao/p/9494637.html
Copyright © 2020-2023  润新知