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(数组,排序规则);

 

posted @ 2023-03-16 15:18  烤盐咸鱼  阅读(57)  评论(0编辑  收藏  举报