java的常用类

1.字符串相关的类
2.JDK8前日期时间API
3.JDK8后日期时间API
4.java比较器
5.System类
6.Math类
7.BigDecimall BigInterger

字符串相关的类
string类

String代表字符串“ ”的东西(字符串字面值)都是此类的实例实现

  • string是一个final类 所有字符实例都不能改变
  • 字符串是常量,用双引号表示,它们的值在创建后就不能更改
  • string对象的字符内容是存储在一个字符数组value[]中
//研究内存中string对象指向
String s1 = "abc";
String s2 = "abc";
s1 = "hello"
//String对象的创建
String str = "hello";

//this.value = new char[0];
String s111 = new String();

//this.value = Arrays.copyof(value,value.length);
//    s13                         a   10
char[] = a = new char[10];
String s13 = new char[10];
String s13 = new String(a);

//String s14 = new String(char[] a,int stratIndex,int count);
练习
String s1 = "java11";
String s2 = "java11";
String s3 = new String("java11");
String s4 = new String("java11");

s1 == s2 ?    true
s1 == s3 ?    false
s1 == s4 ?    false  values
s3 == s4 ?    false  values

Person p1 = new Person();
p1.name = "xiaoming";
Person p2 = new Person();
p2.name = "xiaoming";
p1.name.equals(p2.name);  true
p1.name == p2.name;  false

  • String s1 = “a”;
    • 字符串常量池中创建了一个字面量为“a”的字符串
  • s1 = s1 + “b”;
    • 原来的a字符串对象已经丢失,现在在堆空间中产生了一个字符串s1+"b"也就是(“ab”)如果多次改变串内容,则会出现大量副本字符串对象留在内存中,降低效率,如果这样的操作放到循环中,会极大影响程序性能
  • String s2 = “a” + “b”;
    • s2指向了字符串常量池中已经创建的“ab”字符串
public int length();返回字符串长度
char cahrAt(int index);返回某索引出的字符,从0开始
boolean isEmpty();判断字符串是否为空
String toLowerCase();String中的所有字符转为小写英文
String toUpperCase();String中所有字符转为大写英文
String trim();返回字符串的副本,消除头部空白与尾部空白
boolean equals(Object o);比较字符串的内容是否相等
String concat(String s);将s放到字符串的结尾
int compareTo(String s);比较s与该字符串的大小
String subString(int i);返回新的字符串 从下标为i开始截取到最后一个字符
String subString(int begin,int end);返回新的字符串 从下标begin开始截取到end-1的字符
StringBuffer
  • StringBuffer是可变字符序列,value没有fianl声明,可以无限扩容
private fianl char value[];  String
char[] value;                AbstractStringBuilder
int count;                   count记录有效字符的个数
  • 其对象由构造器生成
public StringBuffer();//初始长度为16的字符串缓冲区
public StringBuffer(intg capacity);//构造了指定长度的字符串缓冲区
public StringBuffer(String str);//初始化了长度为str.length+16的字符串缓冲区
//s指向的内容部分就不能发生变化(s发生变化后就指向了新的地址)
String s = new String("iloveyou");
//buffer指向的内容内部能发生变化(buffer发生变化后指向同一个地址)
StringBuffer buffer = new StringBuffer("iloveyou");
buffer.append("ma");
append(String) 字符串拼接
delete(int begin,int end)删除
replace(int start,int end,String)替换
insert(int index,String)插入
reverse():把当前字符序列逆转​
indexof(String str) 位置
String subString(int start,int end) 分离字符串
int length()charAt(int n) 返回在n位置的char字符
setCharAt(int n,char c) 在n位置插入c字符
  • 当append和insert超过value数组长度,可以扩容
StringBuilder
  • 跟StringBuffer功能一样

*String StringBuffer StringBuilder的区别

StringStringBufferStringBuilder
不可变字符序列可变字符序列可变字符序列
线程安全线程不安全
效率低效率高
参数传递不会改变自己的值参数传递会改变自己的值参数传递会改变自己的值

StringBufferDemo.java

        String s1 = new String("1a");
        StringBuilder builder1 = new StringBuilder("1a");
        StringBuffer buffer1 = new StringBuffer("1a");
        System.out.println(s1);
        System.out.println(buffer1);
        System.out.println(builder1);
        System.out.println();
        Test test = new Test();
        test.changeString(s1);
        test.changeStringBuffer(buffer1);
        test.changeStringBuilder(builder1);
        System.out.println(s1);
        System.out.println(buffer1);
        System.out.println(builder1);

Test.java

  	void changeString(String s){
        s = "abc";
    }
    void changeStringBuffer(StringBuffer s){
        s.append("abc");
    }
    void changeStringBuilder(StringBuilder s){
        s.append("abc");
    }
//null与取空"" 是不一样的东西

String str = null;
StringBuffer sb = new StringBuffer();
sb.append(str);

sout(sb.length());  4?  

sout(sb);

StringBuffer sb1 = new StringBuffer(str);
sout(sb1);
日期时间API
JDK8前
  • java.lang.System
public static native long currentTimeMillis();
返回当前时间与19701100秒的毫秒为单位的时间差   1= 1000毫秒
    UTC 中时区的时间
    GMT 中国的GMT = UTC + 8
    CST 北京时间
  • java.util.Date
精确到毫秒
使用 Date() 获得本地的当前时间
    Date(long date) 为什么date的类型为long? 因为是毫秒数
    				1= 1000毫秒  1分钟 = 60= 60000毫秒
    				1小时 = 60分钟 = 3600= 3600000毫秒
    				1= 24小时 = 1440分钟 = 86400000毫秒
    				1= (2021-1970)*365*86400000毫秒
    				
  • java.text.SimpleDateFormat

    • Date类的API不易国际化,大部分都弃用了,java.text.SimpleDateFormat是一个不与语言环境有关的方式来格式化和解析日期的具体类
    • 文本->日期 日期->文本
  • java.util.Calendar

    • 是一个日历类,一个Calendar的实例是系统时间的抽象表示
    • get(int f)获得想要的时间信息 YEAR MONTH DAY_OF_WEEK HOUR_OF_DAY MINUTE SECOND
      • public void set(int f,int value)
      • public void add(int f,int amount)
      • public final Date getTime()
      • public final void setTime(Date date)
JDK8后
  • java.time LocalDateTime LocalDate

  • ​ java.time.chrono 对不同的日历系统的访问

  • java.time.format 格式化和解析时间和日期

  • Timestamp好处在于能统一前端和SQL的时间显示

            Timestamp timestamp = new Timestamp(System.currentTimeMillis());
            System.out.println(timestamp);
    
比较器
  • 自然排序 : Comparable

    • 默认从小到大排序
  • 定制排序 : Comparator

    ​ 详情参照例子就行

System类
currentTimeMills() 返回当前计算机的时间
exit() 退出当前程序   code 0代表正常退出  非0代表异常
gc() 请求系统进行垃圾回收
Math类
abs  绝对值
acos asin atan cos sin tan三角函数   
sqrt 平方根
pow  
min
max
random  
  int i = (int)Math.random();  //0-1
  //公式如下 [a,b)
  //int i = (int)Math.random()*a+(b-a);
BigInteger

Integer作为int的包装类,最大能存储2的31次方 -1,Long也是有限的,最大是2的63次方-1.如果要表示更大的数

  • BigInteger可以表示为不可变的任意精度整数
abs()
add(val)   this + val
divide()  整数相除取整数部分
remainder() 整数取余
divideandRemainder()  放商和余数的一个数组
pow(int x)      this的x次方
subtract()  this-val
multiply()  this*val
BigDecimal

Float与Double做科学计算或工程计算

商业计算

  • 支持不可变的任意精度的有符号十进制数
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐