JAVA_常用类

字符相关的类

String:字符串,使用一对""引起来表示。

1.String声明为final的,不可被继承
2.String实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable接口:表示String可以比较大小
3.String内部定义了final char[] value用于存储字】符串数据
4.String:代表不可变的字符序列。简称:不可变性。
体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
-----2. 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
-----3. 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值。
5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
6.字符串常量池中是不会存储相同内容的字符串的。(相当于equals)

拼接操作结论:

  • 常量与常量的拼接结果在常量池中,且池中不会出现相同内容的常量
  • 只要有一个结果是变量,结果就在堆中
  • 拼接若用intern()方法,返回值就在常量池中

常用方法

基础:

int length():返回字符串的长度: return value.length char charAt(int index):
返回某索引处的字符return value[index] boolean isEmpty():判断是否是空字符串:return
value.length == 0 String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写
String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写 String
trim():返回字符串的副本,忽略前导空白和尾部空白 boolean equals(Object obj):比较字符串的内容是否相同
boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+” int
compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

次基础:

boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
注:indexOf和lastIndexOf方法如果未找到都是返回-1

替换:

String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

匹配:

boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。

切片:

String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。

String的不可变性:Sring是指向常量池,不可改变,若想改变则需要新造一个变量再赋值
String不可被继承:final类

String与基本类型、包装类之间的转换:
String --> 基本类型、包装类: 调用包装类的静态方法:parseXxx(str)
基本类型、包装类 --> String: 调用String重载的valueOf(xxx)

String与char[]之间的转换:
String --> char[]: 调用String的toCharArray()
char[] --> String: 调用String的构造器 //new String(char[]);

String与byte[]之间的转换:
编码:String --> byte[]:调用String的getBytes()
解码:byte[] --> String:调用String的构造器

编码:字符串 -->字节 (看得懂 —>看不懂的二进制数据)
解码:编码的逆过程,字节 --> 字符串 (看不懂的二进制数据 —> 看得懂)

说明:解码时,要求解码使用的字符集必须与编码时使用的字符集一致,否则会出现乱码。

StringBuffer/StringBuilder的使用:
Sring/StringBuffer/StringBuilder的异同:
String:不可变的字符序列;底层使用char[]存储;内存消耗大,改变则需要新造
StringBuffer:可变的字符序列;线程安全,效率低;底层使用char[]存储;改变的东西可以空间多增加的空间

StringBuffer sb1 = new StringBuffer();//cahr[] value = new char[16];底层默认创建一个长度为16的char型数组
sb1.append(‘a’);//value[0] = ‘a’. sb1.append[‘b’];//value[1] = ‘b’
StringBuffer sb2 = new StringBuffer(“abc”);//char[] value = new char[“abc”.length() + 16]在给予初始值时,底层会默认增加16的长度
Q1:System.out.println(sb2.length());//为3
Q2:扩容问题:如果添加的数据数组盛不下了,则需要扩充数组
----默认情况下,扩充为原来的2倍+2,同时将原有的数组中的元素复制到新的数组中
指导意义:开发中建议大家使用 StringBuffer(int capacity) //避免后续扩容

StringBuffer的额外方法:
StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
StringBuffer delete(int start,int end):删除指定位置的内容 左闭右开
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer reverse() :把当前字符序列逆转
public int indexOf(String str)
public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串
public int length()
public char charAt(int n )
public void setCharAt(int n ,char ch)

    总结:
    增:append(xxx)
    删:delete(int start,int end)
    改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
    查:charAt(int n )
    插:insert(int offset, xxx)
    长度:length();
    *遍历:for() + charAt() / toString()

StringBuilder:可变的字符系列;线程不安全,效率高 (jdk5.0新增的,不存在线程安全使用这个);底层使用char[]存储;

效率:StringBuilder > StringBuffer > String

JDK8之前的日期时间API

  1. System类中的currentTimeMillis()

long time = System.currentTimeMillis(); //返回当前时间与1970.1.1
0:0:0以毫秒为单位时间差/时间戳

  1. java.util.Date类(java.sql.Date类)

1.两个构造器的使用
>构造器一:Date():创建一个对应当前时间的Date对象
>构造器二:创建指定毫秒数的Date对象
2.两个方法的使用
>toString():显示当前的年、月、日、时、分、秒
>getTime():获取当前Date对象对应的毫秒数。(时间戳)

3.java.sql.Date对应着数据库中的日期类型的变量
>如何实例化
>如何将java.util.Date对象转换为java.sql.Date对象

//构造器一:Date():创建一个对应当前时间的Date对象
        Date date1 = new Date();
        System.out.println(date1.toString());//Sat Feb 16 16:35:31 GMT+08:00 2019

        System.out.println(date1.getTime());//1550306204104

        //构造器二:创建指定毫秒数的Date对象
        Date date2 = new Date(155030620410L);
        System.out.println(date2.toString());

        //创建java.sql.Date对象
        java.sql.Date date3 = new java.sql.Date(35235325345L);
        System.out.println(date3);//1971-02-13

        //如何将java.util.Date对象转换为java.sql.Date对象
        //情况一:
//        Date date4 = new java.sql.Date(2343243242323L);
//        java.sql.Date date5 = (java.sql.Date) date4;
        //情况二:
        Date date6 = new Date();
        java.sql.Date date7 = new java.sql.Date(date6.getTime());
  1. java.text.SimpleDateFormat类

SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析

1.两个操作:
1.1 格式化:日期 —>字符串
1.2 解析:格式化的逆过程,字符串 —> 日期

2.SimpleDateFormat的实例化

//实例化SimpleDateFormat:使用默认的构造器
        SimpleDateFormat sdf = new SimpleDateFormat();

        //格式化:日期 --->字符串
        Date date = new Date();
        System.out.println(date);

        String format = sdf.format(date);
        System.out.println(format);

        //解析:格式化的逆过程,字符串 ---> 日期
        String str = "19-12-18 上午11:43";
        Date date1 = sdf.parse(str);
        System.out.println(date1);

        //*************按照指定的方式格式化和解析:调用带参的构造器*****************
//        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        //格式化
        String format1 = sdf1.format(date);
        System.out.println(format1);//2019-02-18 11:48:27
        //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
        //否则,抛异常
        Date date2 = sdf1.parse("2020-02-18 11:48:27");
        System.out.println(date2);

Exer1. 2020-09-08 转化为 java.sql.date

  1. java.util.Calendar

1.实例化
//方式一:创建其子类(GregorianCalendar)的对象
//方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance(); // System.out.println(calendar.getClass());

2.常用方法
//get()
//set(). 改变的是本身,与String不同
//add()
//getTime()
//setTime()

一月是0,周日是1

JDK8中新日期时间API

Date有偏移量,需要Date date = new Date(y - 1900, H - 1 ,d);

localDate具有与String类似的不可变性请添加图片描述

java.time
java.time.format

瞬时 Instant 类似于 Date 以毫秒为单位
请添加图片描述

中国时间:Instant.atOffset(ZoneOffset.ofHours(8)),不加偏移量则为子午线的时间

DateTimeFormatter 格式化或解析。日期或时间

格式化:日期–>字符串
LocalDateTime localdateTime = LocalDateTIme.now();
String str1 = formatter.format(localDateTime);

解析:字符串–>日期
TemporalAccessor parse = formatter.parse(“xxxx-xxx-xxx 12:23:18.789”);

JAVA比较器 ‼️

Java中的对象,正常情况下,只能进行比较:== 或 != 。不能使用 > 或 < 的
但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。
如何实现?使用两个接口中的任何一个:Comparable 或 Comparator

Comparable接口与Comparator的使用的对比:
Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小 Comparator接口属于临时性的比较。

Comparable接口的使用举例: 自然排序sort()
1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。
2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列
3. 重写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。
在compareTo(obj)方法中指明如何排序

@Override
public int compareTo(Object o){
	if(o instanceof Goods){
		Goods goods = (Goods)o;
		//方式一
		if(this.price > goods.price){
			return 1;	
		}else if(this.price < goods.price){
			return -1
		}else{
			return -this.name.compareTo(goods.name);//价格一样时,按名称从高到低排序(加了-,不加则为从低到高)
		}

		//方式二
		//return Double.compare(this.price, goods.price);
	}
	throw new RuntimeException("传入的数据类型不一致");
}
@Test
public void Test(){
	Arrays.sort(arr);
	System.out.println(Arrays.toString(arr));
}

Comparator接口的使用:定制排序
1.背景:
当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,
或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,
那么可以考虑使用 Comparator 的对象来排序
2.重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
如果方法返回正整数,则表示o1大于o2;
如果返回0,表示相等;
返回负整数,表示o1小于o2。

 @Test
    public void Test1(){
        String[] arr = new String[]{"AA", "CC"};
        Arrays.sort(arr, new Comparator<String>() {
            //字符串从大到小排序
            @Override
            public int compare(String o1, String o2) {
                if (o1 instanceof String & o2 instanceof String){
                    String s1 = (String) o1;
                    String s2 = (String) o2;
                    return -s1.compareTo(s2);
                }
                //return 0;
                throw new RuntimeException("输入的类型不一致");
            }
        });//匿名类
        System.out.println(Arrays.toString(arr));
		
		Arrays.sort(arr, new Comparator() {
            //指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序
            @Override
            public int compare(Object o1, Object o2) {
                if(o1 instanceof Goods && o2 instanceof Goods){
                    Goods g1 = (Goods)o1;
                    Goods g2 = (Goods)o2;
                    if(g1.getName().equals(g2.getName())){
                        return -Double.compare(g1.getPrice(),g2.getPrice());
                    }else{
                        return g1.getName().compareTo(g2.getName());
                    }
                }
                throw new RuntimeException("输入的数据类型不一致");
            }
        });
    }

System类

native long currentTimeMillis():
void exit(int status):
void gc():
String getProperty(String key):

Math类

java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回
值类型一般为double型。
abs 绝对值
acos,asin,atan,cos,sin,tan 三角函数
sqrt 平方根
pow(double a,doble b) a的b次幂
log 自然对数
exp e为底指数
max(double a,double b)
min(double a,double b)
random() 返回0.0到1.0的随机数
long round(double a) double型数据a转换为long型(四舍五入)
toDegrees(double angrad) 弧度—>角度
toRadians(double angdeg) 角度—>弧度

BigInteger与BigDecimal

BigInteger:
常用方法
 public BigInteger abs():返回此 BigInteger 的绝对值的 BigInteger。
 BigInteger add(BigInteger val) :返回其值为 (this + val) 的 BigInteger
 BigInteger subtract(BigInteger val) :返回其值为 (this - val) 的 BigInteger
 BigInteger multiply(BigInteger val) :返回其值为 (this * val) 的 BigInteger
 BigInteger divide(BigInteger val) :返回其值为 (this / val) 的 BigInteger。整数
相除只保留整数部分。
 BigInteger remainder(BigInteger val) :返回其值为 (this % val) 的 BigInteger。
 BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟
(this % val) 的两个 BigInteger 的数组。
 BigInteger pow(int exponent) :返回其值为 (thisexponent) 的 BigInteger

BigDecimal:
构造器
 public BigDecimal(double val)
 public BigDecimal(String val)
 常用方法
 public BigDecimal add(BigDecimal augend)
 public BigDecimal subtract(BigDecimal subtrahend)
 public BigDecimal multiply(BigDecimal multiplicand)
 public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

总结

编码:字符串->字节
解码:字节->字符串

格式化:日期->字符串
解析:字符串->日期、

java.util.Date 和 java.sql.Date -> Instant
SimpleDateFormat -> DateTimeFOrmatter
Calendar -> LocalDate、LocalTime、LocalDateTime

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值