原创

重拾java路-常用类


包装类

jdk5以前 手动 装箱/拆箱   jdk5以后  自动 装箱/拆箱

1

三元运算符是一个整体,看 精度最高类型

1

Integer(所有包装类的 valueOf()方法)

范围 -128-127 缓存数组 同一地址

1

String

构造器多种,重载
实现了 序列化接口 和 比较接口
final类 不能被继承

1

String 的注意事项:

1 8. final char value【】 不可以修改地址,但内容可以更改

String的两种创建方式
 1 .String = "sadas";
 2 .String value = new String("sadas");
 
方式一:直接去 常量池 找sadas 如果找到 直接指向 如果没有找到 就创建

方式二:直接去堆中开空间 然后去 常量池 找 ,有就指向 没有就创建

·

内存图:
	注意: intern()方法返回的是常量池的地址

1

String特性:
String = "sada" + "sadsa";     常量 相加看 变量池地址
String a = "hello";
String b = "assada";
String = a + b;           变量 相加看 堆地址

1

demo测试题: 堆内存流程
/**
  • Created with IntelliJ IDEA.

  • @Author: 曾豪杰

  • @Date: 2022/10/17/9:30

  • @Description: demo */ public class home {

    String str = new String("hsp"); final char[] ch={'j','a','v','a'};

    public static void main(String[] args) { home home = new home(); home.change(home.str, home.ch);

     System.out.print(home.str+"\tand\t");//输出的是 hsp  and	hava 不是   java and hava
     System.out.println(home.ch);
    

    }

    public void change(String str,char ch[]){ str="java"; ch[0]='h'; } } 1

String的常用方法

1

substring 左闭右开

1

大写 toUpperCase 大写
小写 toLowerCase 小写
拼接 a.concat("b").concat("c")
替换replace("a","b")a替换成了b 
分割字符串(转义) split("\\\\")按照\\进行切割
compareTo 比较两个字符串的大小 看源码
(1)如果长度相同 内容不同 前者减去后者 
(2)如果长度相同 内容相同 返回0
(3)如果长度不同 前面的内容相同 前者减去后者 
 (4)如果长度不同 前面的内容不同 直接从不同 前减去后  
toCharArray 每个字符分割存到 字符数组中
format 格式化 字符串

1

StringBuffer类

很多方法与String相同,是可变长度的,是一个容器

1

String和StringBuffer 的区别:
String: final char【】每次更新value时 ,常量池的地址就会新建,变化
StringBuffer: char【】 每次更新不用变化,在堆中 如果超出才 新建 堆中地址
所以:  StringBuffer 比 String 更高效!!!

1

1

StringBuffer的常用方法

stringBuffer常用方法:
 1 .增 append
 2 .删 delete  (涉及范围的都是左闭右开)
 3 .改 repleace 
 4 .查 indexOf //查找子串在字符串第一次出现的索引
 5 .插入 insert
 6 .获取长度

1

StringBuffer 练习(工具):
价格的 小数点 前面 每三位 加一个逗号
/**
* @Description:  价格的小数点前面每三位用逗号隔开
* @Param: [name, price]
* @return: java.lang.String
* @Author: 曾豪杰
* @Date: 2022/10/18
*/
public static String setPrice(String name, String price) {

    Double aDouble = Double.valueOf(price);//把字符串转成 小数
    String format1 = String.format("%.2f", aDouble);//保证小数点 后面有2位
    int i = format1.indexOf(".");//获取小数点的下标
    int l = 0;
    if (i % 3 == 0) {//如果能被整除 ,就减少一个   防止出现 ,456,546.65 情况
        l -= 1;
    } else {
        l = i / 3;//如果不是就 整除
    }
    StringBuffer stringBuffer = new StringBuffer(format1);//转成stringBuffer
    for (int f = 1; f <= l; f++) {//循环增加
        stringBuffer.insert(i - 3 * f, ",");//增加 ,
    }
    String s = stringBuffer.toString();//转成string类型
    return String.format("商品\t商品价格\n%s\t%s", name, s);
}

StringBuilder类

多线程不安全 没有加锁 单线程 比 StringBuffer 快 和StringBuffer API 一模一样 都继承 AbstractBuilder/Buffer类 存放 在char【】 value 都实现了序列化 可以进行传输

1

StringBuffer 和 StringBuidler 和 String 的区别

StringBuffer 是 线程安全 多线程 使用 可变字符 增改使用
StringBuidler 线程不安全 单线程 使用 可变字符 增改使用
String 是 不可变的 复用性 较高 效率低下

1

StringBuffer 和 StringBuidler 和 String 的选择

1

Math类

demo题 随机生成 a-b 的一个数 使用Math.Random()
/**
  • Created with IntelliJ IDEA.
  • @Author: 曾豪杰
  • @Date: 2022/10/18/10:57
  • @Description: a-b 的一个数 使用Math.Random() */ public class home2 { public static void main(String[] args) { int a=2; int b=7; //随机 a-b 的一个数 for (int i = 0; i < 10; i++) { int k = (int) (a + Math.random() * (b - a + 1)); System.out.println(k); } } }

Arrays类

toString()方法
返回指定数组的内容的字符串表示形式。
sort()方法 排序
该类包含用于操作数组的各种方法(如排序和搜索)

Arrays.toString 返回指定数组的内容的字符串表示形式。

Arrays.sort()排序 ,底层用的二叉法 可以实现Comparator接口的匿名内部类 体现了接口编程  排序后堆地址的内容也会改变,数组是引用类型.

自然排序:
 Arrays.sort(a, new Comparator() {//影响堆地址
        @Override
        public int compare(Object o1, Object o2) {
            int a1 =(Integer) o1;
            int a2 =(Integer) o2;
            return a1-a2;
        }
    });
    System.out.println("------------");
    System.out.println(Arrays.toString(a));
	//[1, 10, 92, 500, 801]

定制排序:
        sort(a, new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            Integer a1=(Integer) o1;
            Integer a2=(Integer) o2;
            return a2-a1;
        }
    });

    System.out.println(Arrays.toString(a));

}

public static void sort(Integer[] a,Comparator comparator){
    int temp;
    for (int i = 0; i < a.length-1; i++) {
        for (int j = 0; j < a.length-i-1; j++) {
            if (comparator.compare(a[j],a[j+1])>0){
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}
binarySearch()方法 二叉搜索查找 必须有序
二叉搜索,必须有序列,找不到就报-1,
底层是 return-(low+1)找不到就这样返回
copyOf()方法 数组扩容
 	int[] b={1,2,3,4,100,900};
    
    int[] ints = Arrays.copyOf(b, b.length+1);
    System.out.println(Arrays.toString(ints));
    //[1, 2, 3, 4, 100, 900, 0]
fill()方法 去填充覆盖数组元素
	Arrays.fill(b,9999);
    System.out.println(Arrays.toString(b));
    //[9999, 9999, 9999, 9999, 9999, 9999]
equals 比较数组是否相同
 boolean equals = Arrays.equals(b, c);
asList()将一组值,转为list
List<Integer> stringList = Arrays.asList(1,65,65,455,88);
    System.out.println(stringList);
    //[1, 65, 65, 455, 88]

System 类

1

arraycopy方法()
 int[] arr={25,645,87,96};
    int[] dest=new int[3];
    //Arrays.copyOf() 方法也是 底层 arraycopy 
    /*
    * arr 代表 源数组 
    * srcPos 代表 从原数组 下标哪里开始复制
    * dest 代表 要复制的 目标数组
    * destPos 代表 目标数组 的第几行开始 
    * length 代表 复制几个
    * */
    System.arraycopy(arr,0,dest,0,3);
    System.out.println(Arrays.toString(dest));

大数 BigInteger 和 BigDecimal

  BigInteger 大整数 new BigInteger("123333333333")
  BigDecimal 大小数 new BigDecimal("1111111111.454")

1

add 加
subtract 减
multiply 乘
divide 除

BigInteger bigInteger = new BigInteger("44444444444444444444444444444444444444444");
    BigInteger bigInteger1 = new BigInteger("666666666666666666666666666666666666666666666666");

    BigDecimal bigDecimal = new BigDecimal("1111111115555555555555555555.55555555");
    BigDecimal bigDecimal1 = new BigDecimal("1.4556");

    //加
    BigInteger add = bigInteger.add(bigInteger1);
    System.out.println(add);
    //减
    BigInteger subtract = bigInteger1.subtract(bigInteger);
    System.out.println(subtract);
    //乘
    BigInteger multiply = bigInteger.multiply(bigInteger1);
    System.out.println(multiply);
    //除法
    BigDecimal divide = bigDecimal.divide(bigDecimal1, RoundingMode.CEILING);//BigDecimal 要精确
    System.out.println(divide);
    //666666711111111111111111111111111111111111111110
    //666666622222222222222222222222222222222222222222
    //29629629629629629629629629629629629629629333333303703703703703703703703703703703703703704
	
    //763335473725993099447345119.23300052

1

Date类 第一代日期类

时间 new Date()当前时间


Date date = new Date();
    SimpleDateFormat dataFormat = new SimpleDateFormat("YYYY年MM月DD日 HH时mm分ss秒 E");
    String format = dataFormat.format(date);
    System.out.println(format);


    String s="2022年10月291日 20时45分51秒 星期二";
    try {
        Date parse = dataFormat.parse(s);
        System.out.println(parse);
    } catch (ParseException e) {
        e.printStackTrace();
    }
	
	2022年10月291日 20时48分50秒 星期二
	Tue Dec 28 20:45:51 GMT+08:00 2021

1

Caledar 第二代日期类

单例创建 对象直接 调用 静态方法 
  Calendar instance = Calendar.getInstance();
  月份要+1

1

Calendar instance = Calendar.getInstance();
    System.out.println("年:"+instance.get(Calendar.YEAR));
    System.out.println("月:"+instance.get(Calendar.MONTH)+1);
    System.out.println("日:"+instance.get(Calendar.DAY_OF_MONTH));
    instance.get(Calendar.HOUR);
    instance.get(Calendar.MINUTE);
    instance.get(Calendar.SECOND);
	
	年:2022
	月:10
	日:19

第三代时间类 LocalDate LoaclDateTime LocalTime

LocalDate: 年月日
LoaclDateTime: 年月日时分秒
LocalTime: 时分秒

1

DateTimeFormatter 和 SimpleDateFormat的时间 格式化

	注意:
1. DateTimeFormatter (只能对 LocalDateTime 进行格式)
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒 E");
    String format = dateTimeFormatter.format(LocalDateTime.now());
    System.out.println(format);
    //2022年10月19日 14时06分07秒 星期三
2. SimpleDateFormat(只能对 new Date() 进行格式化)
SimpleDateFormat dataFormat = new SimpleDateFormat("YYYY年MM月DD日 HH时mm分ss秒 E");
    String format = dataFormat.format(new Date());
    System.out.println(format);

Instant 时间戳

时间戳

1

	Instant now = Instant.now();
    Date from = Date.from(now);
    System.out.println(from);
    Instant instant = from.toInstant();
    System.out.println(instant);
更多的时间方法

1

练习 String 异常 demo

 Stirng的常用方法,和业务异常处理 

·

package demo10;

import java.util.Scanner;

/**

  • Created with IntelliJ IDEA.

  • @Author: 曾豪杰

  • @Date: 2022/10/19/20:45

  • @Description: String 异常处理 demo 练习 */ public class home { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); try { System.out.print("请输入用户名:"); String next = scanner.next(); if (!(1 < next.length() && next.length() < 5)) { throw new RuntimeException("用户名格式不对!"); } System.out.print("请输入密码:"); String psd = scanner.next(); Integer integer = Integer.valueOf(psd); if (psd.length() != 6) { throw new RuntimeException("密码格式不对!"); } System.out.print("请输入邮箱:"); idDigital(scanner.next()); System.out.println("信息录入正确!!!"); } catch (RuntimeException e) { System.out.println(e.getMessage()); System.out.println("程序结束!!!"); }

    }

    public static void idDigital(String email) { if (email.contains("@") && email.contains(".")) { if (email.indexOf("@") > email.indexOf(".")) { throw new RuntimeException("格式错误,@ 必须在 . 的前面!!!"); } return; } throw new RuntimeException("邮件没有包含 @ 和 .");

    }
     }
    

    intern() 返回的是 池中的地址

    当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串。 否则,此String对象将添加到池中,并返回对此String对象的引用。

常用类 String StringBuffer StringBuilder Date 日历(第二代时间) SimpleDateFormat LocalDateTime DateTimeFormat 时间戳 Arrays类 数组方法 八大基本类方法 用的什么类 具体 查看 文档 !常用类 String StringBuffer StringBuilder Date 日历(第二代时间) SimpleDateFormat LocalDateTime DateTimeFormat 时间戳 Arrays类 数组方法 八大基本类方法 用的什么类 具体 查看 文档 !
学校
总结
经验
  • 作者:阿杰(联系作者)
  • 发表时间:2022-10-17T09:18:16
  • 版权声明:杰出版
  • 公众号:--无
  • 评论