Java常用API
1、Math类的方法:
public static int abs(int a); //绝对值 public static double ceil(double a) //向上取整 public static double floor(double a) //向下取整 public static int round(float a) //四舍五入 public static int max(int a, int b) //两数最大值 public static double pow(double a, double b) //a的b次幂的值 public static random() //取随机数,范围在 [0.0 - 1.0) public static double sqrt(double a) //算术平方根 public static double cbrt(double a) //立方根
2、System类的方法:
public static void exit(int status) //终止JVM虚拟机 public static long currentTimeMillis() //返回当前系统的毫秒形式,1970.1.1为时间原点 public static void arraycopy(fromarray,index1,toarray,index2,num) //数组拷贝 //若两数组保存基本数据类型,则二者必须一致 //若两数组保存引用数据类型,则子类可以赋值给父类
3、Runtime类的方法:
public static Runtime getRuntime() //返回当前系统运行的环境对象 Runtime r1 = Runtime.getRuntime() //Runtime()方法私有,不可创建他的对象,下面方法都得先用此方法r1.method() public static int availableProcessors() //获得CPU的线程数 public static maxMemory() //JVM能够从系统中获得总内存的大小,单位byte public static totalMemory() //JVM已经从系统获得的总内存的大小,单位byte public static freeMemory() //JVM剩余内存大小,单位byte public Process exec(String command) //运行cmd的命令
4、Object类的方法:
public String toString() //返回对象的字符串表示形式 /* System.out.println() 当打印对象时,底层会调用对象的toString()方法,把对象变成字符串。默认情况下Object中的toString()方法返回的是地址值,如果想要看到对象的属性值,需要在类中重写toString()方法 */ public boolean equals(Object obj) //比较两个对象的地址是否相等 /* equals默认比较的是地址值,而String类重写了toString方法,所以比较的是数据类型和属性值,a.equals(b)中,首先判断a、b的数据类型,不同就返回false,相同才比较属性值 */ protected Object clone(int a) //对象克隆、对象拷贝 /* protected的权限是本包中的类和其他包的子类,而它是java.lang包的类,因此clone方法在使用时,需要在自建类中重写clone()方法,而且必须在自建类要实现一个Cloneable接口,这个接口是判断该类对象是否可以克隆的条件之一。转换后返回值是Object类型,需要强转成目标类型。 */ /* 浅克隆:Java默认方式,不论基本数据类型、引用数据类型,拷贝的是变量记录的地址值,地址值不变; */ /* 深克隆:重写方法或使用第三方工具,基本数据类型拷贝地址,字符串在串池(StringTable)中复用,前两者地址不变,引用数据类型会创建新的,地址会发生改变 */
5、Objects类的方法:
public static boolean equals(Object a, Object b) //先做非空判断,比较两个对象 /* 底层逻辑:先判断a是否为null,a为null的话直接返回false,a不是null的话,a来调用equals方法,后续与Object类中的equals方法相同 */ public static boolean isNull(Object obj) //判断对象是否为空,空true,非空false public static boolean nonNull(Object obj) //判断对象是否为null,跟isNull结果相反
6、BigInteger类的方法:
public BigInteger(int num, new Random()) //获取随机大整数,范围[0, 2^num - 1] public BigInteger(String val) //获取指定的大整数 /* 用处:记录任意精度的整数,可以突破long的19位上限*/ public BigInteger(String val, int radix) //获取指定进制的大整数 /* 注意,字符串中的数据和后边进制要匹配,比如("123", 2)会报错,因为2进制只有01 */ public static BigInteger valueOf(long val) //静态方法获取BigInteger的对象,内部有优化 /* 注意参数不能超过long上限,此方法对于-16 ~ 16进行了优化,其中的对象已经被创建好,多次创建对象的地址值相同,也就是同一个对象,之外的不同*/ /* 对象一旦创建,BigInteger内的值不能发生改变,只要发生计算,就会创建新的BigInteger对象*/ /* BigInteger底层存储方式:int型数组存储。第一位存储符号位,第二位存储补码的第一个32位,之后同理,数组中每一位能够表示的数字-2147483648 ~ 2147483647,数组最多有21亿个索引,数组中每一位能表示42亿个数字,故BigInteger的上限为(42亿)^(21亿) */ public BigInteger add(BigInteger val) //加 public BigInteger subtract(BigInteger val) //减 public BigInteger multiply(BigInteger val) //乘 public BigInteger divide(BigInteger val) //除,得商 public BigInteger[] divideAndRemainder(BigInteger val) //除,得商和余数,用数组存储 public boolean equals(Object x) //比较是否相同 public BigInteger pow(int n) //n次幂 public BigInteger max/min(BigInteger val) //返回较大值、较小值 /* 注意这里,返回的是旧对象,不会创建新对象 */ public int intValue(BigInteger val) //转换为int整数,超出范围有误
7、BigDecimal类的方法:
/* 用于小数的精确计算,或保存很大的小数 */ public BigDecimal(double val) //可能会不精确,不建议用 public BigDecimal(String val) //精确 public static BigDecimal valueOf(double val) //静态方法获取对象 /* 数字没超出double的范围,使用静态方法;超出了,使用第二种构造方法 */ /* 如果传递[0,10]之间的整数,方法会返回已经创建好的对象,不会重新new */ public BigDecimal add(BigDecimal val) //加 public BigDecimal subtract(BigDecimal val) //减 public BigDecimal multiply(BigDecimal val) //乘 /* 注意乘的时候小数点后的位数,别丢失精度,2.0 * 10.0 = 20.00 */ public BigDecimal divide(BigDecimal val) //除法 /* 这个方法获取的商必须是可以除得尽的,否则会报错 */ public BigDecimal divide(BigDecimal val, int scale, RoundingMode.XXXXX) //精确除法 /* 参数2是小数点后要保留的位数,参数3是RoundingMode枚举的方法,如四舍五入、0舍入、无穷大舍入等 */ /* UP:远离0的方向舍入,也就是数轴两端; DOWN:向0方向舍入,也就是靠近0的一端 */ /* CEILING:向正无穷大的方向舍入,也就是右侧; FLOOR:向负无穷大的方向舍入,也就是左侧 */ /* HALF_UP:四舍六入,五进一; HALF_DOWN:四舍六入,五退一 */ /* BigDecimal底层存储方式:byte类型数组。遍历字符串,得到每个字符,每一个都转换成相应的ascii码,保存在数组中 */
8、Pattern类的方法,正则表达式:
public boolean matches(String regex) //校验规则,查找内容 public String replaceAll(String regex, String newStr) //按照正则表达式规则进行替换 public String[] split(String regex) //按照正则表达式规则切割字符串 /* \转义字符,改变字符原本含义;\\前边的\把后边的\转义成了一个普通的\,在正则表达式中,一般都是\\ */ /* 正反斜线的区分,/正\反,按照“八”字,左正右反 */ String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台"; Pattern p = Pattern.compile("Java\\d{0,2}"); Matcher m = p.matcher(str); while(m.find()){ //数据爬取,找出下面所有的JavaXX String s = m.group(); System.out.println(s); } /* (?=xx)表示匹配后边的,但并不输出后面的xx;(?:)表示获取整体;(?!xx)匹配除了后边xx的结果。这三种方式是非捕获分组,指分组后不需要使用本组数据,不占用组号。 */ /* \\n:表示与第n组的内容相同(正则表达式内部) ;$n:表示与第n组的内容相同(表达式外部),比如replaceAll方法的第二个形参内可以使用$n。这两种是捕获分组,指后续需要使用本组数据 */ /* 贪婪爬取:尽可能多的获取(Java默认方式);非贪婪爬取:尽可能少的爬取。 */ /* 在+或*等数量词后加上?表示非贪婪爬取 */
正则表达式的匹配规则:
9、JDK7时间类Date的方法:
Date d1 = new Date(); //d1是当前时间 Date d2 = new Date(指定毫秒); //d2是时间原点开始算起往后加毫秒 setTime(毫秒值); //修改毫秒值 getTime(); //获取毫秒值 /* 以上毫秒值都是long类型的数据 */
10、 JDK7时间类SimpleDateFormat的方法:
/* 此方法的作用:格式化时间、解析 */ public SimpleDateFormat(); //构造默认格式对象 public SimpleDateFormat(String pattern); //构造指定格式的对象 /* pattern格式 yyyy年MM月dd日 HH:mm:ss */ public final String format(Date date) //格式化(日起对象 -> 字符串) public Date parse(String source) //解析(字符串 -> 日期对象)
11、JDK7时间类Calendar方法:
/* Calendar代表了系统当前时间的日历对象,可以单独修改、获取时间中的年、月、日;而且是抽象类,不能直接创建对象*/ /* 底层原理:根据系统的不同时区来获取不同的日历对象,默认表示当前时间;把年、月、日、时、分、秒等放到数组中。月份:范围0~11;星期:返回1为星期日,2为星期一....7为星期六; */ public static Calendar getInstance() //获取当前时间的日历对象 public final Date getTime() //获取日期Date对象 public long getTimeInMillis() //获取时间毫秒值 public void setTimeInMillis() //设置时间毫秒值 /* field的参数值:0纪元、1年、2月、3一年中的第几周、4一个月中的第几周、5一个月中的第几天... */ /* field参数记不住可以直接用英文:Calendar.YEAR、Calendar.MONTH、DAY_OF_MONTH、DAY_OF_WEEK等 */ public int get(int field) //取日历中某个字段 public void set(int field, int value) //修改日历中某个字段 public void add(int field, int amount) //增加、减少某个字段的值
12、JDK8新增时间类ZoneId方法:
public static Set<String> getAvailableZoneIds() //获取Java中支持的所有时区 public static ZoneId systemDefault() //获取系统默认时区 public static ZoneId of(String zoneId) //获取一个指定时区 /* ZoneId.of("Asia/Shanghai")表示时区,是一个ZoneId的对象 */
13、JDK8新增时间类Instant时间戳方法:
public static Instant now() //获取当前时间的Instant对象(标准时间) public static Instant ofxxx(long epochMilli) //根据(秒/毫秒/纳秒)获取Instant对象 /* ofEpochMillis()、ofEpochSecond()两种方法 */ public boolean isxxx(Instant otherInstant) //判断时间先后的方法 /* isBefore()、isAfter()两种方法 */ public Instant minusxxx(long millisToSubtract) //减少时间系列的方法 public Instant plusxxx(long millisToSubtract) //增加时间系列的方法 /* minusMillis()、minusSeconds()两种方法 */ /* plusMillis()、plusSeconds()两种方法 */
14、JDK8新增时间类ZoneDateTime方法:
public ZonedDateTime atZone(ZoneIdzone) //指定时区 ZonedDateTime z = Instant.now().atZone(ZoneId.of("Asia/Shanghai")); public static ZonedDateTime now() //获取当前时间的ZonedDateTime对象 public static ZonedDateTime ofXxxx() //获取指定时间的ZonedDateTime对象 public ZonedDateTime withXxx() //修改时间的方法 /* withYear()、withMonth()等方法 */ public ZonedDateTime minusXxx() //减少时间的方法 public ZonedDateTime plusXxx() //增加时间的方法 /* minusYears()、minusSeconds()等方法 */ /* plusYears()、plusSeconds()等方法 */ /* JDK8中新增的时间对象都是不可变得,因此修改后,会创建新的时间对象,原对象不变 */
15、JDK8新增时间类DateTimeFormatter方法:
public static DateTimeFormatter ofPattern(格式) //获取格式对象 public String format(时间对象) //按照指定方式格式化
16、JDK8新增日历类Localxxx方法:
/* 包括三种:LocalDate、LocalTime、LocalDateTime */ public static xxx now() //获取当前时间的对象 public static xxx of() //获取指定时间的对象 get开头的方法 //获取日历中的年、月、日、时、分、秒等信息 isBefore,isAfter //比较两个LocalDate with开头的方法 //修改时间的方法 minus开头的方法 //减少时间的方法 plus开头的方法 //增加时间的方法 /* 类型转换的两种方法 */ public LocalDate toLocalDate() //LocalDateTime转化成LocalDate对象 public LocalTime toLocalTime() //LocalDateTime转化成LocalTime对象
17、JDK8新增工具类Duration、Period、ChronoUnit方法:
Duration //计算两个时间间隔(秒、纳秒) Period //计算两个时间间隔(年、月、日) ChronoUnit //计算两个日期间隔 /*ChronoUnit.DAYS.between(m, n) 得到的是n-m的天数*/
18、包装类
//包装类:基本数据类型对应的应用数据类型 public Integer(int value) //根据传递的整数创建一个Integer对象 public Integer(String s) //根据传递的字符串创建一个Integer对象 public static Integer valueOf(int i) //根据传递的整数创建一个Integer对象 /* 在-128~127范围内创建对象,相同的数据对象的地址也相同,也就是同一个对象*/ public static Integer valueOf(String s) //根据传递的字符串创建一个Integer对象 public static Integer valueOf(String s, int radix) //根据传递的字符串和进制创建一个Integer对象 /* JDK5之后,由于自动装箱和自动拆箱的存在,使得包装类可以自动转化成基本数据类型,获取包装类不用new,不用调用方法,直接赋值即可 */ public static string toBinaryString(int i) //得到二进制 public static string toOctalString(int i) //得到八进制 public static string toHexString(int i) //得到十六进制 public static int parseInt(string s) //将字符串类型的整数转成int类型的整数 /* 8种包装类中,除了Character都有对应的parsexxx的方法,进行类型转换,以后键盘录入都用nextLine() */
19、Arrays类的方法
public static String toString(数组); public static int binarySearch(数组,查找的元素); //二分法查找,元素必须是升序 public static int[] copyOf(原数组,新数组长度); public static int[] CopyOfRange(原数组,起始索引,结束索引); public static void fill(数组,元素); //填充数组 public static void sort(数组); public static void sort(数组,排序规则);