Java类库概述

  • Java类库文档
    https://docs.oracle.com/javase/8/docs/api/
  • 可以下载文档离线版本(chm格式)
    https://blog.csdn.net/wsby910/article/details/70208724
  • 利用JavaDoc技术,将程序中的注释抽取出来,形成以HTML为表现形式的API文档
  • Java几乎所有的类都放在java或javax的扩展包中
    以java开头的包是Java的核心包(Java Core Package)
    以javax开头的包是Java的扩展包(Java Extension Package)

数学相关类

Java数字类

  • 整数:Short,Int,Long
  • 浮点数:Float,Double
  • 大数类:BigInteger(大整数),BigDecimal(大浮点数),大数没有范围限制,可以表示无穷大的数字
  • 随机数类:Random
  • 工具类:Math
  1. 浮点数类型
    浮点数不能表示精确的数字,1.229999999f ==1.23

  2. 大数字类
    支持无限大的整数、小数运算;浮点数运算时要注意精度和截断
    BigInteger使用实例:

import java.math.BigInteger;
public class BigIntegerTest {public static void main(String[] args) {BigInteger b1 = new BigInteger("123456789");//必须用字符串表示BigInteger b2 = new BigInteger("987654321");System.out.println("b1:"+b1+",b2:"+b2);System.out.println("加法操作:"+b1.add(b2));//BigInteger 不提供+运算,下同System.out.println("减法操作:"+b2.subtract(b1));System.out.println("乘法操作:"+b1.multiply(b2));System.out.println("除法操作:"+b2.divide(b1));System.out.println("最大数:"+b1.max(b2));System.out.println("最小数:"+b1.min(b2));//求出商+余数   直接求余:b2.remainder(b1)BigInteger result[] = b2.divideAndRemainder(b1);System.out.println("商:"+result[0]+";余数:"+result[1]);System.out.println("等价性:"+b1.equals(b2));//比大小int flag = b1.compareTo(b2);if(flag == -1){System.out.println("b1 < b2");}else if(flag == 0){System.out.println("b1 = b2");}else{System.out.println("b1 > b2");}}
}

BigDecimal使用实例

import java.math.BigDecimal;
public class BigDecimalTest {public static void main(String[] args) {BigDecimal b1 = new BigDecimal("123456789.987654321");//用字符串赋值BigInteger b2 = new BigInteger("987654321.123456789");//除法注意需要指定位数,防止无限循环  divide参数:除数,精度,截断方式(四舍五入或直接消去)System.out.println("除法操作:"+b2.divide(b1,10,BigDecimal.ROUND_HALF_UP));}
}
  1. Random随机数
//返回一个随机的int
nextInt();
//返回一个[0,a)之间的随机int
nextInt(int a)//返回一个[0.0,1.0)之间的随机double
nextDouble();//批量返回随机数数组
ints();

使用实例:

import java.util.Random;
import java.lang.Math;
public class RandomTest {public static void main(String[] args) {//方法一,用Random类随机生成Random rd = new Random();System.out.println(rd.nextInt());System.out.println(rd.nextInt(100));System.out.println("===================");//方法二,用Math类中的random()方法,获取[0.0,1.0)之间的double,乘10后,用round四舍五入,System.out.println(Math.round(Math.random()*10));System.out.println("===================");rd.ints();//返回无限个intint[] arr = rd.ints(10).toArray(); //生成10个int,toArray()可以将其转换为数组for (int i=0;i<arr.length;i++){System.out.println(arr[i]);}System.out.println("===================");//返回5个[10,100)之间的intarr = rd.ints(5,10,100).toArray();for (int i=0;i<arr.length;i++){System.out.println(arr[i]);}System.out.println("===================");}
}
  1. java.lang.Math 包
abs();       //绝对值函数
log();      //对数函数
max();min();//比较函数
pow();      //幂函数
round();    //四舍五入函数
floor();    //向下取整
ceil();     //向上取整

使用实例:

import java.lang.Math;
public class MathTest {public static void main(String[] args) {System.out.println(Math.abs(-5));System.out.println(Math.max(-5,-8));System.out.println(Math.pow(-5,2));System.out.println(Math.round(3.5));System.out.println(Math.ceil(3.5));System.out.println(Math.floor(3.5));}
}

字符串相关类

1.不可变字符串 String

使用实例:

public class StringTest {public static void main(String[] args) {String a = "123;456;789;123";System.out.println(a.charAt(0));//返回第0个元素System.out.println(a.indexOf(";"));//返回第一个;的位置System.out.println(a.concat(";000"));//连接一个新的字符串并返回,a不变System.out.println(a.contains("000"));//判断是否包含000System.out.println(a.endsWith("000"));//判断是否以000结尾System.out.println(a.equals("000"));//判断是否等于000System.out.println(a.equalsIgnoreCase("000"));//判断在忽略大小写的情况下是否等于000System.out.println(a.length());//返回a的长度System.out.println(a.trim());//返回a去除前后空格后的字符串,a内的空格不变String[] b = a.split(";");//将a字符串按照;分歌成数组for(int i = 0;i<b.length;i++){System.out.println(b[i]);}System.out.println(a.substring(2,5));//求取a的第2个到第5个字符的子串,a不变System.out.println(a.replace("1","a"));//把a中的所有1替换成aSystem.out.println(a.replaceAll("1","a"));///也是把a中的所有1替换成a,只是他的第一个参数是正则表达式,可以做更多事}
}
  1. 可变字符串
    StringBuffer(字符串加减,同步,性能好)
    StringBuilder(字符串加减,不同步,性能更好)
  • StringBuffer 和StringBuilder方法一样,区别在同步

    1. 方法:

      append()  //增添
      insert()        //插入
      delete()    //删除
      replace()   //替换
      substring()//求子串length()    //字符串实际大小
      capacity() //字符串占用空间大小
      trimToSize()//去处空隙,将字符串存储压缩到实际大小
      
  • StringBuffer如何分配内存:

    import java.lang.StringBuffer;
    public class StringBufferCapacityTest {public static void main(String[] args) {//StringBuffer的初始大小为16+初始字符串长度,即capacity = 16+初始字符串长度//length 实际长度;capacity 存储空间大小StringBuffer sb1 = new StringBuffer();//空的System.out.println("sb1 length:" + sb1.length());//0System.out.println("sb1 capacity:" + sb1.capacity());//16byteStringBuffer sb2 = new StringBuffer("123");sb2.append("456");System.out.println("sb2 length:" + sb2.length());//6System.out.println("sb2 capacity:" + sb2.capacity());//16+3=19bytesb2.append("78901234567890");System.out.println("sb2 length:" + sb2.length());//20System.out.println("sb2 capacity:" + sb2.capacity());//40//一旦length大于capacity时,capacity便在前一次的基础上加1后翻倍//当前sb2length 20;capacity40,再append 70个字符 超过了(capacity+1再翻倍)sb2.append("1234567890123456789012345678901234567890123456789012345678901234567890");System.out.println("sb2 length:"+sb2.length());//90System.out.println("sb2 capacity:"+sb2.capacity());//90//超过了capacity+1再翻倍的话,将以最新的长度更换sb2.append("0");System.out.println("sb2 length:" + sb2.length());//91System.out.println("sb2 capacity:" + sb2.capacity());//182// 仍然是符合 一旦length大于capacity时,capacity便在前一次的基础上加1后翻倍sb2.trimToSize();//压缩内存空间System.out.println("sb2 length:" + sb2.length());//91System.out.println("sb2 capacity:" + sb2.capacity());//91
    }
    }
    

时间相关类

  • Calendar是目前最常用的,但是是抽象类,不能被new出对象

    • Calender gc = Calender.getInstance();//获取实例方法
    • getInstance()实际返回的是它的子类GregorianCalender的对象
    • 即:Calendar gc = new CregorianCalendar();//与上面获取实例方法等价

实例:

import java.util.Calendar;
import java.util.GregorianCalendar;public class CalendarClassTest {public static void main(String[] args) {Calendar gc = Calendar.getInstance();//获取对象本身的类的名称System.out.println(gc.getClass().getName());//java.util.GregorianCalendarGregorianCalendar gc2 = new GregorianCalendar();System.out.println(gc2.getClass().getName());//java.util.GregorianCalendar}
}
  • Calendar的常用方法

    • get(Field) 获取时间中成员属性的值,Field指的是Calendar中的成员属性(Calendar.YEAR等等)。注意:月份是0~11,记得+1
    • getTime() 返回相应的date对象(java.util.Date)
    • getTimeInMillis() 返回自1970.1.1以来的毫秒数
    • set(Field) 设置时间字段
    • add(field, amount) 根据指定字段增加/减少时间,会影响进位
    • roll(field, amount) 根据指定字段增加/减少时间,但不影响上一级的时间段,即不进位,比如只增加日期,月份不改变

实例:

import java.util.Calendar;public class CalendarTest {Calendar calendar = Calendar.getInstance();public void test1(){//获取年int year = calendar.get(Calendar.YEAR);//获取月,注意月份范围是0~11,记得要+1int month = calendar.get(Calendar.MONTH)+1;//获取日int day = calendar.get(Calendar.DAY_OF_MONTH);//获取时int hour = calendar.get(Calendar.HOUR);//获取分int minute = calendar.get(Calendar.MINUTE);//获取秒int second = calendar.get(Calendar.SECOND);// 星期,英语国家星期从星期日开始计算int weekday = calendar.get(Calendar.DAY_OF_WEEK);//这里有点问题System.out.println("现在是"+year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒"+"星期"+weekday);}//一年后的今天public void test2(){calendar.add(Calendar.YEAR,1);//增加1年//获取年int year = calendar.get(Calendar.YEAR);//获取月int month = calendar.get(Calendar.MONTH);//获取日int day = calendar.get(Calendar.DAY_OF_MONTH);System.out.println("一年后的今天:"+ year+ "年"+month+"月"+day+"日");}//获取任意一个月的最后一天public void test3(int month){//先将时间设成month的下个月的第一天calendar.set(calendar.get(Calendar.YEAR),month,1);//设置年月日,由于月份的范围,所以可以直接用传入的month,不必+1//然后将设置好的日期-1,就获得了这个月的最后一天calendar.add(Calendar.DAY_OF_MONTH,-1);//获取日int day = calendar.get(Calendar.DAY_OF_MONTH);System.out.println(month+"月的最后一天为"+day+"号");}//设置日期public void test4(){calendar.set(Calendar.YEAR,2000);//可以只设置一个System.out.println("现在是"+calendar.get(Calendar.YEAR)+"年");calendar.set(2018,7,8);//也可以直接设置年月日//获取年int year = calendar.get(Calendar.YEAR);//获取月int month = calendar.get(Calendar.MONTH);//获取日int day = calendar.get(Calendar.DAY_OF_MONTH);System.out.println("现在是:"+ year+ "年"+month+"月"+day+"日");}//mainpublic static void main(String[] args) {CalendarTest c = new CalendarTest();c.test1();c.test2();c.test3(6);c.test4();}
}
  • java.time包:新的Java日期/时间API的基础包,比Calendar的类要多一些
  • Java 8 java.time包主要类
    • LocalDate:日期类
    • LocalTime:时间类
    • LocalDateTime:LocalDate + LocalTime
    • Instant:时间戳

LocalDate实例:

import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;public class LocalDateExample {public static void main(String[] args) {//当前年月日LocalDate today = LocalDate.now();System.out.println("Current Date:"+today);//根据指定时间创建LocalDateLocalDate firstDay_2014 = LocalDate.of(2014, Month.JANUARY,1);//返回指定时间内的年月日System.out.println("Specific Date:"+firstDay_2014);//给定错误时间参数,将报异常//LocalDate feb29_2014 = LocalDate.of(2014,Month.FEBRUARY,29);//2014年的2月29日不存在//可以更改时区LocalDate todayBeijing = LocalDate.now(ZoneId.of("Asia/Shanghai"));//使用字符串,大洲和城市需要用/分割,返回这个时区当前的年月日System.out.println("Current Date in Shanghai="+todayBeijing);//查找从纪元日01/01/1970开始后的第某天的日期LocalDate dateFromBase = LocalDate.ofEpochDay(365);//返回从纪元日01/01/1970开始后的第365天的年月日System.out.println("356th day from base date="+dateFromBase);//查找从某年开始的第某天的日期LocalDate hundredDay2014 = LocalDate.ofYearDay(2014,100);//返回2014年的第100天的年月日System.out.println("100th day of 2014="+hundredDay2014);}
}

LocalTime实例:

import java.time.LocalTime;
import java.time.ZoneId;public class LocalTimeExample {public static void main(String[] args) {//当前的时分秒 纳秒LocalTime time = LocalTime.now();System.out.println("Current time="+time);//自己设置时间LocalTime specificTime = LocalTime.of(12,20,25,40);//返回设置好的时分秒毫秒System.out.println("Specific Time of Day="+specificTime);//错误的时间参数 将报错//LocalTime invalidTime = LocalTime.of(25,20);//查找当前的上海时间LocalTime timeSH = LocalTime.now(ZoneId.of("Asia/Shanghai"));System.out.println("Current Time in SH="+timeSH);//查找一天中的第几秒是什么时间LocalTime specificSecondTime = LocalTime.ofSecondOfDay(10000);//返回一天中的10000秒的时分秒System.out.println("10000th second time="+specificSecondTime);}
}

Instant实例:这玩意不是很懂

import java.time.Instant;
import java.util.Date;public class InstantExample {public static void main(String[] args) {//定义一个时间戳,访问一个Date对象Instant timestamp = Instant.now();System.out.println("Current Timestamp = "+timestamp);//从毫秒数来创建时间戳Instant specificTime = Instant.ofEpochMilli(timestamp.toEpochMilli());System.out.println("Specific Time = "+specificTime);Date date = Date.from(timestamp);System.out.println("Current date = "+date);}
}

时间戳个人理解就是将某个时间记录下来,主要用来记录版本更新的时间;
放几个大神的讲解:
什么是时间戳?时间戳有什么用?(适合新人)
关于对时间戳timestamp理解

格式化类

NumberFormat(数字格式化)

  • 是一个抽象类
  • 本质是调用的DecimalFormat
  • 使用工厂模式,即定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。(使用了之前的多态的知识)
  • 使用实例:
import java.text.DecimalFormat;public class DecimalFormaterRuleTest {public static void main(String[] args) {DecimalFormat df1,df2;//整数部分为0的情况,0/# 的区别:df1 = new DecimalFormat("#.00");//这里的字符串是表示格式。#是表示能省略则省略,如果整数部分为0,表示不存在时,可省略;小数点后的00则表示精确度是0.01df2 = new DecimalFormat("0.00");//这里整数部分的写的0表示必须占一位,不可省略System.out.println(df1.format(0.1));//.10System.out.println(df2.format(0.1));//0.10//小数部分0/#的区别df1 = new DecimalFormat("0.00");//0代表必须有且只能有几位df2 = new DecimalFormat("0.##");//#代表最多能有几位System.out.println(df1.format(0.1));//0.10System.out.println(df2.format(0.1));//0.1//因此我们使用#和0组成的字符串就可以进行格式化操作df1 = new DecimalFormat("###,###,##0.00");double a=123456789.123456;System.out.println("format_a = "+df1.format(a));//format_a = 123,456,789.12   df1.format()表示以df1的形式格式化a}
}

MessageFormat(字符串格式化)

  • 自定义一个固定的格式将多个参数、值放入指定的空位

  • 该空位使用{}表示,{}中的数字表示后面后面的数组位置

  • 日期时间格式:(来自大佬的博客:JAVA中日期转换SimpleDateFormat和DateTimeFormatter)

  • 使用实例:

import java.text.MessageFormat;public class MessageFormatTest {public static void main(String[] args) {//MessageFormat是一个静态类,可以直接使用类名调用方法//format()第一个参数是一个字符串,表示格式化方式;第二个参数是一个数组,放着填入第一个参数的{}中的内容;返回格式化好的字符串//{}中的数字表示数组的下标String value = MessageFormat.format("hi, the {0} name is {1}","girl","Mary");System.out.println(value);}
}
  • 也可以用String.format;大佬的讲解:String和MessageFormat的format方法

DateFormat(时间格式化)

  • 也是一个抽象类
  • 实际是调用SimpleDateFormat这个子类(工厂模式)
  • parse(解析):将字符串格式化为时间对象
  • format:将时间对象格式化为字符串
    -使用实例:
import java.text.SimpleDateFormat;
import java.util.Date;public class SimpleDateTest {public static void main(String[] args) {//需要被格式化的时间字符串String strDate = "2020-7-26 21:27:30.345";//定义格式化的模板,y代表年,有几个y表示有几位数,其他的类似SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");//定义一个时间对象Date d = null;try {d = sdf1.parse(strDate);//sdf1的形式解析strDate字符串(即转换为时间)}catch (Exception e){       //如果提供的字符串格式有错误,则进行异常处理e.printStackTrace();    //打印异常信息}System.out.println(sdf2.format(d));//将日期变为格式化为新的格式}
}
  • Java8发布的java.time.format.DatrFormatter ,线程安全
  • 同样拥有parse和format
  • 多了一个ofPattern:设定时间格式
  • 使用实例:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;public class DateFormatterTest {public static void main(String[] args) {//同样是需要被格式化的字符串String dateStr = "2020年7月26日";//定义格式化的方式   这里不同的点是无需new对象,直接用类名调用方法DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");//将字符串解析为日期,注意 这里使用的是LocalDate,所以只能解析日期,不能解析时间LocalDate date = LocalDate.parse(dateStr,formatter);System.out.println(date.getYear()+"-"+date.getMonthValue()+"-"+date.getDayOfMonth());//将日期和时间转换成字符串输出LocalDateTime now = LocalDateTime.now();//获取现在的日期和时间DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");String nowStr = now.format(format);System.out.println(nowStr);}
}

Java常用类(数学相关类 /字符串相关类/时间相关类/格式化类)相关推荐

  1. Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识

    文章目录 String类 StringBuffer类 StringBuilder类 String:不可变的字符序列:底层使用char[]存储 StringBuffer:可变的字符序列:线程安全的,效率 ...

  2. 关于Java中的日期与时间的相关类说明详解

    文章目录 1.关于Java元年与时间戳 2.关于Date类 2.1常用API代码展示 3.关于Calendar类 3.1获取Calendar对象 3.2创建自定义的Calendar对象 3.2Cale ...

  3. Java常用类学习笔记

    Date类 Date类是在Java中获取日期时间最简单的一个类,可以通过直接实例化对象的方式获得当前的日期时间.得到的日期时间是国外的格式.Date类没有什么特殊的用法,就是简单的获取当前的日期时间. ...

  4. Java基础-->一篇讲全Java常用类(详细易懂,建议收藏)

    Java基础–>一篇讲全Java常用类(详细易懂,建议收藏) 文章目录 Java基础-->一篇讲全Java常用类(详细易懂,建议收藏) 1.字符串相关的类 String类 概述 创建Str ...

  5. java 类 函数,java常用类和函数

    JAVA中常用类的常用方法_计算机软件及应用_IT/计算机_专业资料.. JAVA 中常用类的常用方法 一. java.lang.Object 类 1. clone ()方法 创建并返回此对象的... ...

  6. Java常用类库API

    Java常用类库API 字符串操作 String类 String两种赋值方式 String类中的构造函数 String()方法 String(byte[] bytes)方法 String(byte[] ...

  7. 日期的包装 java,Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类...

    Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯. 2.面向对象的出现,将复杂的事情简单化. 3.面向对象的出现,将之前过 ...

  8. Java----- 常用类 系统相关类 、 字符串相关类

    常用类 系统相关类 . 字符串相关类 常用类 系统相关类 System类 代表当前ava程序的运行平台.. System. currentTimeMillis()获得系统当前时间的函数. 开始: Sy ...

  9. 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析

    引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...

最新文章

  1. C语言哈希表的简单实现——数组+链表(拉链法)
  2. 在Visual Studio中使用Git [关闭]
  3. System.currentTimeMills()显示系统当前时间
  4. Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi
  5. dhcp服务配置文件/etc/dhcpd.conf详解
  6. html5 字符相等,js里返回字符ok与字符ok比较不相等的问题
  7. Enum in C#
  8. poj 1789 TruckHistory 最小生成树 Kruskal、Prim
  9. oracle x ksppi,求 x$ksppi 和x$ksppcv 得详细解释
  10. Rust 升级成微软第一梯队语言;“熊孩子”乱敲键盘攻破 Linux 桌面;500 个值得学习的 AI 开源项目| 开发者周刊...
  11. 动态磅是怎么原理_浅谈动态地磅的原理及未来发展方向
  12. 网易云音乐UC!缓存格式文件转MP3方法
  13. python数据转换成pdf_用python把ipynb文件转换成pdf文件过程详解
  14. orderBy排序用法
  15. 网站改造为百度智能小程序教程,适合所有网站封装
  16. 开源软件许可协议介绍
  17. 免费的注册表修复工具推荐
  18. 负载均衡(Load Balance)
  19. 2021全网最全接口测试及常用接口测试工具
  20. linux脚本中的gt,shell中’-gt’与’’的区别

热门文章

  1. 扫地机器人的轮子困住_解决扫地机器人防困住卡死的应用方案
  2. 【uniapp】微信小程序发布后提醒用户更新版本
  3. 【强化学习】开源环境集(魂斗罗、星际争霸等都有!)
  4. 微信读书这样排版,看过的人都很难忘!
  5. 电脑Win7系统无法添加打印机怎么处理
  6. 商品ETF上线 三个细节教你如何善用它
  7. djc加密数字货币_2019年最新加密数字货币排行榜 依据最新GitHub更新量排名
  8. 微信群如何裂变怎么让微信群裂变拉人
  9. 学好这些统计学知识,帮你入门数据分析
  10. python 金字塔的程序_python-如何使金字塔应用程序在Apache mod_wsgi上运行