JAVASE经常使用的类及其方法总结

如下内容均为学习动力节点视频过程当中的总结:

数组Arrays

经常使用静态方法:
Arrays.sort() 对数组进行升序排序,
Arrays.binarySearch(arr,key) 二分法查找,返回index,没找到返回负数(查找的前提是排好序)java

String类经常使用方法

方法 解释
charAt(int index) 返回索引处的字符值
toCharArray() 将一个字符串转换成char数组
toLowerCase() 转换成小写
toUpperCase() 转换成大写
getBytes() 获得字节数组 abcdef变为97 98 99 100
indexOf() 判断某个子字符串在当前字符串第一次出现处的索引
lastindexOf() 判断某个子字符串在当前字符串最后一次出现处的索引
repleac(“”,“”) 替换当前字符串中某个字符串为另一个字符串,返回String
split() 以某个字符串拆分,返回String,(用Strirng数组来接收)
trim() 去除字符串的先后空白,中间的不行
subString(int beginindex) 截取从索引出开始的子字符串
subString(intbeginindex,endindex) 截取从起始索引到终止索引的子字符串,前闭后开
compareTo() 比较两个字符串大小,字符依次比,前面比后面大,返回1;小,返回-1,等于,返回0,比到不同的就结束,剩下的不比了。按照英文字母顺序比较
equals() 是否相等,比较的是值,返回true/false;看不出谁大谁小
equalsIgnoreCase 是否相等,忽略大小写
contaings() 是否包含后面的字符串,返回true/false
endsWith() 是否以某个字符串结尾,返回true/false
startsWith() 是否以某个字符串开始,返回true/false
isEmpty() 是否为空字符串,底层调用的是length()方法,返回true/false;和null不同(空指针异常)

String中只有一个静态方法,不须要new对象的:
valueOf():将非字符串转换成字符串,底层调用toString方法,直接用类调用String.valueOf(随便写个啥),若传进去一个引用,该引用没有重写toString的话,输出的是引用的地址。
System.out.println(引用)时,为何会调toString方法?
println调用valueOf,valuesOf调用的又是toString。本质上:sout这个方法输出任何数据时都实现转换成字符串再输出。web

String比较容易出错的地方:数组

String a = "Hello";
String b = "Hello";
a==b  ?//true,字符串变量同一个,地址也是同一个,“==”任何状况下比较的都是地址。


String a=new String("Hello");
String b=new String("Hello");
a==b  ?//false,a和b存放不一样的引用对象的地址。

1. StringBuffer

String是不可变的,底层是final byte【】不可变,被final修饰,数组一旦建立藏毒不可变,而且被final修饰的引用一旦指向某个对象以后,不能再指向其余对象。每一次拼接都会产生新的字符串,在方法区中建立了大量的对象,形成内存空间的浪费
建议使用lang包下的StringBuffer或者StringBuilder。缓存

StringBuffer父类为AbstractStingBuffer
底层其实是一个byte【】数组(字符串缓冲区对象),(没有final修饰),将字符串放到数组中,初始容量为16,当存满以后,会用append()方法来扩容,底层进行追加调用arraycopy()方法,因此StringBuffer适用于字符串的拼接。安全

优化:建立StringBuffer时预估计一下,给一个大点的容量。减小扩容次数。也不能太大,合适最好,提升程序运行效率。多线程

2. StringBuilder

StringBuilder 也能够用来拼接字符串。app

StringBuffer的方法都有synchronized修饰,表示在多线程环境下运行时安全的。StringBuilder没有,不安全。dom

3.基本八大类

java中8种基本数据类型对应8种包装类属于引用数据类型,父类是Number-Object,Character、Boolean父类是Object。
为何要用包装类?
调用某些方法时传入参数若为Object,不能直接传入基本数据。ide

基本数据类型 包装类
short Short
int Integer
long Long
double Double
float Float
boolean Boolean
char Character
byte Byte

基本数据类型转化为引用数据类型,装箱
引用转化为基本,拆箱
自动装箱:Integer a = 100;
自动拆箱:int i = a; JAVA 5之后都支持这个了。在加减乘除等运算时会自动拆箱,双等号不会。svg

获取常量,最大:Integer.MAX_VALUE,即为0xffffff;最小0x8000000;

4.Number

Number中经常使用的方法:用来拆箱。好比byteValue();可是有自动装箱和拆箱,就不必用这个了。

(1.)java中为了提升程序的执行效率,将【-128到127】的全部的包装对象提早建立好,存放在方法区中的整数型常量池中(cache缓存),目的是只要在这个区间的数据就不须要new了,直接从里面取来用。

Integer a =100;
Integer b =100

a= =b?结果为true,换成1000就是false。

(2.)数字格式化:

/*# 任意数字 , 千分位 . 小数点 0 表明不够时补0 */
import java.text.DecimalFormat;
DecimalFormat some = new DecimalFormat("###,###.00");//小数部分不能既有#又有0
String dou = some.format(124583);
System.out.println(dou);

5.Integer的方法

静态方法static int parseInt(String s),把字符串转换为int类型。
int a = Integer.parseInt(“1230”);相似,double,float等有同样的静态方法,将字符串转换为基本数据类型,注意不要超过范围或者用中文。
静态方法:
toBinaryString(int i):转换成二进制字符串;
toOctalString(int i):转换成十进制字符串;
toHexString(int i):转换成十六进制字符串;
(联系toString方法源码)

String、Integer、int类型互相转换:
在这里插入图片描述
String->int:

Integer.parseInt(Strign s);

int->String:

String.valueOf(int i);
i = 100 ;String s = i+"";

int->Integer:装箱

Integer a = 100;
Integer.valueOf(100);

Integer->int:拆箱

int b = a;
intValue();

String->Integer:

Integer.valueOf(String a);

Integer->String:

String.valueOf(Integer对象);

6.日期

(1)导入包:import java.util.Date;

Date nowtime = new Date()//系统当前时间显示,Date的无参构造方法
Date nowtime2 = new Date(1);//Date的有参构造,传入的参数是Long型,为系统从1970.1.1 00:00:00通过的毫秒数。

Fri Oct 02 15:27:49 CST 2020//执行结果

日期格式化:设置本身喜欢的格式,(将Date类型转化为String类型)。导入java.text.SimpleDateFormat;
yyyy 年
MM 月
dd 日
HH 时
mm 分
ss 秒
SSS毫秒(毫秒三位,最高999),这些字符不能瞎写,可是空格,-,:,按照本身喜爱加。

Date a = new Date();
System.out.println(a);
SimpleDateFormat daytime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(daytime.format(a));//若要获取昨天的此时的时间,用当前的毫秒数减去一天的毫秒数(1000*60*60*24)

(2)反过来,将String类型转化为Date类型输出:

String time = "2014-09-01 15:26:56 456";
SimpleDateFormat ste = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//这里的格式要和上述字符串同样,否则会有异常
Date nowtime = ste.parse(time);
System.out.println(nowtime);

(3)获取系统从1970.1.1 00:00:00(北京时间是八点)到当前时间的总毫秒数,能够用来统计方法执行时长:system.currentTimeMillis();

Long begin = System.currentTimeMillis();
//中间是你想作的操做
Long end = System.currentTimeMillis();
System.out.println(begin-end);//耗费的时间能够获得

7.System类

System.out out是System里的一个静态变量
System.out.println() println是PrintStream的方法
System.gc() 建议启动垃圾回收机制
System.currentTimeMillis() 系统从1970.1.1到当前时间的总毫秒数
System.exit(0) 退出JVM

8.BigDecimal类

import java.math.BigDecimal;
BigDecimal large = new BigDecimal(100);
BigDecimal large1 = new BigDecimal(200);
BigDecimal large3 =large.add(large1);//调用方法加减乘除
System.out.println(large);

math包下,大数据,精度极高,属于Java对象(引用数据类型),专门在财务软件当中.

9.随机数Random类

import java.util.Random;
Random ran = new Random();
int abcs = ran.nextInt(101);//下一个数是101,不包括101,范围[0,101)。
int abcd = ran.nextInt();//范围 32个字节

小试牛刀:随机产生五个不重复的随机数(1-100)
感觉一下,写写伪代码?!

import java.util.Random;

public class RandomTest01{ 
 
  
    public static void main(String[] args) { 
 
  
        /** * 随机数放在数组里,判断该随机数是否与数组里的数重复,不重复的话赋值。 * 数组的初始值?因为随机数范围为[0,101),避免混淆初始0和随机数0,给定一个初始值-1。 */
        //建立一个长度为5的数组,给定初始值。
        int []arr = new int[5];
        for(int i = 0; i<arr.length;i++){ 
 
  
            arr[i]=-1;
        }
         //随机数产生
        Random random = new Random();
        for (int i = 0;i<arr.length;){ 
 
  
            int num = random.nextInt(200);
            if(!contains(arr,num)){ 
 
  
                arr[i]=num;
                i++;//i++不能写在循环结束后,由于i++的前提是该随机数不在数组里且被赋值了之后。
            //这里也能够用while。
            }//判断随机数在不在数组里?没法写成简单的表达式,考虑单独写成一个方法。
            //方法的返回值?方法的形参?
        }
        //打印输出随机数
        for (int i = 0;i<arr.length;i++){ 
 
  
            System.out.println(arr[i]);
        }
    }
    public static boolean contains(int [] array,int key){ 
 
  
        for(int i = 0;i<array.length;i++) { 
 
  
            if(array[i] == key) { 
 
  
                return true;
            }
        }//该循环结束表示key不在数组里。这里若是改为只循环到当前全部赋值的数,减小循环次数,就更好了。加入一个参数index。
        return false;
    }
}

10.枚举类型

enum为关键字,不能做为包名。枚举是一种引用数据类型。只有两种状况用boolean,大于两种状况用枚举。

/*enum 枚举类型名{ 枚举值1,枚举值2 } */
    public static Result divide(int a,int b){ 
 
  
        try{ 
 
  
            int c= a/b;
            return Result.SUCCESS;
        } catch(Exception d){ 
 
  
            return Result.Fail;
        }
    }
    enum Result{ 
 
  
        SUCCESS,Fail
    }