Java基础 - 常用类

9.JDK常用类

9.1 String类

  • 常用方法

      String format(String format, Object... args) 
    
      format:  %d 整数  %s 字符串  %c 字符
    

说说String str ="ABC"和String str = new String("ABC")的区别.

  • String str = "ABC";该代码创建了一个对象或者没有创建String对象.
    若常量池存在ABC,则直接引用,若常量池不存在ABC,则先创建对象,再引用.
  • String str = new String("ABC"); 该代码创建了一个或者两个String对象.
    new肯定会创建String对象,(同上).

String对象比较:

  1. 单独使用""引号创建的字符串都是常量,编译期就已经确定存储到常量池中;
  1. 使用new String("")创建的对象会存储到堆内存中,是运行期才创建;
  1. 使用只包含直接量的字符串连接符如"aa" + "bb"创建的也是直接量编译期就能确定,已经确定存储到常量池中;
  1. 使用包含String直接量(无final修饰符)的字符串表达式(如"aa" + s1)创建的对象是运行期才创建的,存储在堆中;

字符串拼接

  • StringBuffer :特点: 线程安全性较高,但是性能较低. 多线程使用StringBuffer.
  • StringBuilder :特点: 线程安全性较低,但是性能较高. 推荐 单线程使用StringBuilder.

9.2 Math类

  • 常用方法

      double abs(double a)  返回一个 数的绝对值(正数)
    
      double cbrt(double a) 开三次方
    
      double ceil(double a)   a为正数则整数位+1,小数舍弃;a为负数则直接舍弃小数  
      如a =1.6 返回 2;a = -1.6 返回-1
    
      double floor(double a)  a为正数则直接舍弃小数;a为负数则整数位-1,小数舍弃
    
      double max(double a,double b) 返回两个数的最大值
    
      double min(double a,double b) 返回两个数的最小值
    
      double pow(double a,double b) 返回a的b次方
    
      double round(double a) 返回a的四舍五入值
    
      double sqrt(double a) 开平方,取正数
    
      double random() 返回[0,1)之间的随机数
    
      public static final double E = 2.718281828459045D;  自然对数的底数
    
      public static final double PI = 3.141592653589793D;  圆的周长与直径之比
    

9.2 Random类

用来生成伪随机数的类,伪随机数指的是有规律的随机数

  • 常用方法

      double nextDouble() 返回[0,1)之间的随机数
    
      int nextInt(int bound) 返回[0,bound)之间的随机整数
    

9.2 BigInteger/BigDecimal类

  1. BigInteger

    不可变的任意精度的整数

    • 常用方法

        BigInteger valueOf(long value) 静态方法获取对象  返回指定value值的对象
      
        BigInteger add(BigInteger value)    返回this+value的值的对象
      
        BigInteger divide(BigInteger value)     返回this/value 的值对象
      
        BigInteger multiply(BigInteger value)   返回this*value 的值对象
      
        BigInteger subtract(BigInteger value)   返回this-value 的值对象
      
  2. BigDecimal

    不可变的任意精度的有符号十进制数

    适用于对于数字精度有高要求的场景

    • 常用方法

        static BigDecimal valueOf(double val) 静态方法创建对象,val不超出double极限的情况下可以使用
      
        BigDecimal(String val) 构造方法,传入字符串形式
      
        其他常用方法同BigInteger
      
    • 示例代码

        double a1 = 3.14;
        double a2 = 1000000.00000001;
        System.out.println(a1*a2);
        //输出3140000.0000000317,精度不准确,对精度要求极高的系统影响很大
      
        BigDecimal c1 = new BigDecimal(3.14);
        BigDecimal c2 = new BigDecimal(1000000.00000001);
        System.out.println(c1.multiply(c2));
        //输出 3140000.00000003156113848490349607235614363913282255647008156529409461654722690582275390625
        //这种传入数字类型的创建方式,会导致小数位出现异常情况,不建议使用此构造方式
      
        BigDecimal b1 = new BigDecimal("3.14");
        BigDecimal b2 = new BigDecimal("1000000.00000001");
        System.out.println(b1.multiply(b2));
        //输出 3140000.0000000314  精度准确,推荐此方式
      

9.3 通用唯一标识符

UUID

  • 定义

    • 这个UUID的值是有时间(包括时区,经纬度等信息),硬件信息等等综合产生的一个值,这个值全球计算机界唯一

    • 表示一个128位的值

  • 常用方法

      static UUID randomUUID()  获取伪随机生成的UUID对象
    
  • 常用场景

    1. 验证码

    2. mysql数据库 表table中的主键,特点是唯一

9.3 Date

表示特定的瞬间,精确到毫秒,表示的是毫秒值

  • 构造方法

      Date()  创建表示当前时间的对象
    
      Date(long date)     创建对象,表示从标准基准时间1970年1月1日00:00:00GMT以来的指定毫秒数date
    
  • 常用方法

      log getTime()   返回Date对象的毫秒值    
    

9.3 DateFormat

这个类是专门处理格式化(Date --> String)和解析(String --> Date)

  • 常用方法

      DateFormat getDateInstance()  获取对象的静态方法
    
      DateFormat getDateTimeInstance()
    
      DateFormat getInstance() 
    
      String format(Date date)   将Date格式化为字符串
    
      Date parse(String source)   将字符串解析成Date
    

9.3 SimpleDateFormat

可按照我们自己需要的样式来格式化和解析日期的类,是DateFormat的子类

  • 构造方法

      SimpleDateFormat(String pattern) pattern为日期格式,如yyyy-MM-dd HH:mm:ss
    
  • 常用方法

      String format(Date date)   将Date格式化为字符串
    
      Date parse(String source)   将字符串解析成Date
      注意: source的格式必须与pattern一致
    
  • 示例代码

      String pattern = "yyyy年MM月dd日-E-HH时mm分ss秒";//自定义的格式
      SimpleDateFormat df = new SimpleDateFormat(pattern);
      //格式化
      String str = df.format(new Date());
      //解析字符串,传入的字符串格式必须跟自定义格式一致
      Date parse = df.parse("2015年3月22日-星期五-15时23分22秒");
    

9.3 Calendar

可通过操作日历字段获得或修改时间

  • 常用方法

      static Calendar getInstance()   获取日历对象,默认拿到的是当前时间
    
      set(int field, int value)   将指定的日历字段设置为指定值
    
      void setTime(Date date) 使用指定的Date设置日历的时间
    
      add(int field, int amount)  根据日历规则,为给定的日历字段添加或者减去指定的时间量
    
      int get(int field) 获取指定日历字段的值
    
      Date getTime()  返回一个表示此日历时间的Date对象
    
      long getTimeInMillis()  返回此日历的时间毫秒数
    
      
      日历中的字段
    
      YEAR    年
    
      MONTH   月  从0开始算
    
      DAY_OF_MONTH    一个月中的某天
    
      HOUR_OF_DAY     一天中的小时
    
      MINUTE      一个小时中的分钟
    
      SECOND      一分钟中的秒
    
  • 示例代码

      Calendar calendar = Calendar.getInstance();
      int year = calendar.get(Calendar.YEAR);
      int month = calendar.get(Calendar.MONTH) + 1; //从0开始算,需+1
      int day = calendar.get(Calendar.DAY_OF_MONTH);
      int hour = calendar.get(Calendar.HOUR_OF_DAY);
      int min = calendar.get(Calendar.MINUTE);
      int second = calendar.get(Calendar.SECOND);
      System.out.println(String.format("%d-%d-%d %d:%d:%d",year,month,day,hour,min,second));
    
      calendar.set(Calendar.YEAR,2000); //设置年为2000
      System.out.println(calendar.getTime());
    
      //想知道50天后的日子,两种方式
      //calendar.set(Calendar.DAY_OF_MONTH,calendar.get(Calendar.DAY_OF_MONTH) + 50);
      calendar.add(Calendar.DAY_OF_MONTH,50);//给当前天数增加50天
      System.out.println(calendar.getTime());
    
      //将日历年份退回到1000年前
      calendar.add(Calendar.YEAR,-1000);
      System.out.println(calendar.getTime());
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容