常用类

字符串类

final 不能被继承

String是一个final类 ,代表不可变的字符序列

String 底层存在一个char型数组中

使用一对“”表示

实现Serializable接口: 表示可序列化的,和io流有关

Comparable 接口:可比较大小

内部定义了final char【】 value 存储字符串数据

不可变性体现

通过字面量“区别new 方式赋值”的方式给一个字符串赋值,此时字符串常量池中,常量池中不会存储相同内容的字符串

public static void main(String[] args) {
    String s1 = "abc";
    String s2 = "abc";
    s1 = "hello";
    System.out.println(s1);
    System.out.println(s2);


}

当字符串重新赋值时,不能在原有的value进行修改,必须重新开辟一块内存重新存储

因为原有value是final类型,不能修改

String s3 = "abc";
s3 += "def";
System.out.println(s3);

拼接后 也不会在原有的value扩展内存,而是重新找地方进行赋值

使用replace方法修改 字符串中的字符,原字符串不会改变,新字符串存到新地址的内存中

String s4 = s3.replace('a','b');
  System.out.println(s3);
  System.out.println(s4);
  
  abcdef
bbcdef

不同实例化方式对比

字面量定义

String s1 = "abc";

通过new构造器定义(不只有这一种构造器)

String s1 = new String("hello");

存在字符串常量池中,地址相同

String s1 = "abc";
  String s2 = "abc";

new的存在堆空间中,地址不同

堆空间存储new的对象 另外的char【】数组存在常量池中,如果常量池中存在,则不新建

String s1 = new String("hello");
 String s2 = new String("hello");

String不同拼接方式对比

String s1 = "javaee";
String s2 = "hadoop";
String s3 = "javaeehadoop";
String s4 = "javaee"+"hadoop";
String s5 = s1+"hadoop";
String s6 = "javaee"+s2;

只有s4 == s3

字面量声明的存在常量池中,因为不能变性,所以字面量声明的涉及到拓展s1 s2等功能,会在常量池中新开辟一块,而不是在原有的地址上进行扩招,所以即使输出一样也不会是用的同一块内存

使用intern方法得到的的返回值,得到的是常量池中存在的地址,地址与s3相同

 String s4 = "javaee"+"hadoop";
String s6 = s5.intern();

jvm底层结构说明

jvm即java虚拟机,jvm一般分三种,默认一般为HotSpot

Heap堆 分三部分 新生区 养老区 永久存储区

永久区可以看作是方法区 字符串常量池在方法区,具体体现为元空间

String常用方法

.length 返回底层数组长度

charAt 通过这个方法调用底层数组指定元素,index格式,超过长度会报错

isEmpty 判断是否为空,看数组长度

toLowerCase 返回新字符串, 把字符串的大写变为小写,原本的不变

…回新字符串, 把字符串的小写变为大写,原本的不变

.trim();去除元素的首尾所有空格,中间的不会变。用法在输入用户名的时候可以用

equals 比较内容

equalsINIgnoreString ;在忽略大小写的情况下是否一样,验证码

concat 链接,拼接 一般直接用加号+

compareTo 实现的comparable接口的方法,比较两个字符串大小,涉及到字符串排序

substring 一个index 取现字符串的子串 返回index后面的字符串

substring 两个index 取左闭区间 右开区间字符串

endsWith 判断 是否由指定字符串结尾

startWith 判断 是否由指定字符串开始

从指定开始的位置 判断

boolean ee = s3.startsWith("ee", 4);

contains 判断是否包含

s3.contains(s1);

indexOf 返回字符串索引开始的位置,如果没有返回-1

lastIndexof 索引到最后一个

replace 通过newchar 替换字符/串,返回一个新字符/串 由于string不可变性,所以本身不会变

matches判断是否匹配正则表达式

split 切片

String和其他结构转换

String与基本数据类型、包装类之间转换 调用parse方法

int i = Integer.parseInt(str1);

其他类型类似

其他转String 调用String重载的valueOf(xxx)

String str = String.valueOf(i);
String与char[]之间转换
char[] charArray = str1.toCharArray();
String 与 byte【】转换

调用getBytes()方法,转换成ascll码

加final 后会加入到常量池中

可变的字符串序列 Stringbuilder

StringBuffer 线程安全效率低

底层用char型数组存储 但是没有加final 是可变的

Stringbuilder 线程不安全效率高

底层用char型数组存储 但是没有加final 是可变的

日期时间API

当前时间

  • new Date 方法

  • sout这个方法

  • getTime 获取时间戳 毫秒 可以计算的类型 比如加减

  • Date date = new Date();
    System.out.println(date.toString());
    System.out.println(date.getTime());//返回long型的值
    

    Tue Mar 23 17:37:27 CST 2021
    1616492247478

指定时间

看构造器

数据库类型对象

new java.sql.Date();

sql时间对象转换util对象

直接强转

util时间对象转换sql对象

父类的util.gettime 输入给sql时间对象

java.sql.Date date1 = new java.sql.Date(date.getTime());

simpleDateFormate

对Date进行格式化和解析

格式化,日期-----》字符串

解析 字符串------>日期

格式化 日期-----》字符串 Date 传入format 输出更容易理解

使用默认构造器
SimpleDateFormat format = new SimpleDateFormat();
String s = format.format(date);
System.out.println(s);
21-3-23 下午8:01

解析 字符串改为日期类型

    String str = new String("19-8-21 下午8:00");
try {
    Date date1 = format.parse(str);
    System.out.println(date1);
} catch (ParseException e) {
    e.printStackTrace();
    
    Wed Aug 21 20:00:00 CST 2019

解析格式要正确

定制格式化

调用带参构造器

格式化

Date date = new Date();
SimpleDateFormat stf = new SimpleDateFormat("YYYY-MM-dd  hh:mm:ss");
String s = stf.format(date);
System.out.println(s);

2021-03-23 08:20:13

YYYY-MM-dd hh:mm:ss 年月日 时分秒

解析

Date date1 = stf.parse("2021-03-23  08:20:13");
System.out.println(date1);
用户传的字符串转化为数据库能识别的Date
String birthday = new String("2003-02-04");//用户传的数据
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");//设置相同格式
Date date = format.parse(birthday);//util下的date
java.sql.Date date1 = new java.sql.Date(date.getTime());
System.out.println(date1);
2002-12-29//看着像字符串,但他是个sql.date
Calendar日历类

1.实例化 创建对象

抽象类 ,不能直接new

  • 需要new他的子类 ,GregorianCalendar
  • 调用个Getinstance方法 通常用这个,还是上面那个子类造的
常用方法

get()

月的第几天等等 周几 等获取平常使用的数据

set()

改信息

add()

在本身日期上加 几天等等 减法用复数

getTime()

把日历类转化为Date对象

setTime()

Date转化为日历类时间

LocalDate LocalTime LocaDateTime 使用

.now 获取当前日期 时间等

of()

指定日期时间

LocalDateTime localDateTime = LocalDateTime.of(2020,10,18,20,18);
System.out.println(localDateTime);

2020-10-18T20:18

get类似使用

修改用with不用set

localDatetime有不可变性,不会修改本身,返回一个新的日期,本身不变

添加改为plus

instant 类使用 瞬时

得到毫秒数

DateTimeFormatter 格式化日期时间的工具类
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;

导入module

复制过去只是一个普通文件,不能直接运行

进入右上角 project structure

进入modules

加减号 添加删除

Java比较器

比较对象里的某一属性大小

camparable 自然比较器

升序排序

 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 0;
            }
//           return Double.compare(this.price,goods.price);
        }

     throw new RuntimeException("输入错误");
     }

二级排序

@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 this.name.compareTo(goods.name);
            }

        }

     throw new RuntimeException("输入错误");
    }

camparator定制排序

适用于

  1. 当前元素没有实现comparable接口 不方便修改代码,或者实现了comparable接口但是排序规则不适合当前操作,这个方法强行对多个对象进行整体排序比较
  2. 重写compar(Object o1,Object o2)方法,比较o1 o2 的大小
  3. 如果方法返回正整数 表示01 > 02; 如果方法返回负整数 表示01 < 02;
  4. 可以将comparator 传递给sort方法 如Collections.sort 或Arrays.sort 从而允许在排序上实现精确控制
  5. 可以使用compartor 来控制某些数据结构的顺序,如set 的顺序,或者为没有自然排序的集合提供排序

使用方法

例:Arrays.sort(arr,new Comparator()){

重写方法

}

//按照从大到小排序,因为前面已经写了comparable 所以调用了他的compareto方法,取反,得到了一个临时的从大到小排序,必须把01 02 强转成要比较的对象类型。

局限性,只适合完全取反

Arrays.sort(goods, new Comparator() {

    @Override
    public int compare(Object o1, Object o2) {
       if (o1 instanceof Goods&& o2 instanceof Goods){
           Goods goods1 =  (Goods) o1;
           Goods goods2 = (Goods) o2;
           return -goods1.compareTo(goods2);
       }throw new RuntimeException("输入错误");
    }
});

定制排序方法二

例:先按产品名称从低到高,再按价格从高到低

   Arrays.sort(goods, new Comparator() {
//先按产品名称从低到高,再按价格从高到低
            @Override
            public int compare(Object o1, Object o2) {
               if (o1 instanceof Goods&& o2 instanceof Goods){
                   Goods goods1 =  (Goods) o1;
                   Goods goods2 = (Goods) o2;
                   if (goods1.getName().equals(goods2.getName())){
                       return Double.compare(goods1.getPrice(),goods2.getPrice());
                   }else {
                       return goods1.getName().compareTo(goods2.getName());
                   }
               }throw new RuntimeException("输入错误");
            }
        });

System工具类

代表系统

void exit(int status) 在图形化界面上退出程序

void gc 请求系统进行垃圾回收

getProperty(key) key可以是verson等 具体参考API

math工具类

数学操作相关 ,直接调用方法

BigInteger与BigDecimal

int能存储最大整形值为2的31次方-1 long能提供2的61次方-1 都是有限的

而Biginteger能表示任何精度的不可变的整数 有Integer包装类的所有方法

BigDecimal 对应的是浮点型 对精度要求非常高 大于10位时,用这个存储

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值