Java学习笔记(尚硅谷,常用类)

String

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

    System.out.println(s1 == s2);// false
    System.out.println(s1);// hello
    System.out.println(s2);// abc
}

字符串拼接

常量与常量拼接在一起仍然在常量池中(注意final修饰的字符串是常量)
而由String类的对象拼接来的可以看成在堆区new的
如果拼接的结果调用intern()方法,返回值就在常量池中

@Test
public void test2() {
    String s1 = "hel";
    String s2 = "lo";

    String s3 = "hel" + "lo";
    String s4 = "hello";
    System.out.println(s3 == s4);// true
    String s5 = "hel" + s2;
    System.out.println(s5 == s4);// false
    String s6 = s5.intern();
    System.out.println(s6 == s4);// true
}

注意点:String的传参

public class StringTest {
    String str = new String("java");
    char[] value = {'1', '2', '3', '4'};

    public void change(String str1, char[] value1) {
    	System.out.println(str1 == str);// true
        str1 = "hello";
        System.out.println(str1 == str);// false
        value1[0] = '5';
    }

    public static void main(String[] args) {
        StringTest st = new StringTest();
        st.change(st.str, st.value);
        System.out.println(st.str);// java
        System.out.println(st.value);// 5234
    }
}

字符串常用方法

int length();// 返回字符串长度
char charAt(int index);// 返回当前下标的字符
boolean isEmpty();// 判断是否为空字符串
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);// 比较2个字符串的大小
String substring(int beginIndex);// 返回一个新字符串,它是从beginIndex开始截取的
String substring(int beginIndex, int endIndex);// 返回一个新字符串,它是从beginIndex开始截取,endIndex结束的,[beginIndex, endIndex)

在这里插入图片描述

在这里插入图片描述

String --> 基本数据类型
调用包装类的parseXxx()方法
基本数据类型 --> String
调用String的valueOf()方法
String --> char[]
调用String的toCharArray()方法
cahr[] --> String
调用String的构造器 new String(char[])
String --> byte[]
调用String的getBytes()方法
getBytes(String charsetName)// 指定字符集编码(注意要异常处理)
byte[] --> String
调用String的构造器 new String(byte[])
new String(byte[] , String charName)// 指定字符集解码

StringBuffer&StringBuild

String:不可变的字符序列
StringBuffer:可变的字符序列,线程安全,效率低
StringBuild:可变的字符序列,线程不安全,效率高
StringBuffer sb1 = new StringBuffer();// 创建一个长度为16的数组
append()方法:向原有数组追加字符
setChar(int index, char ch)方法,将index下标的字符修改为ch

若原有容量不够,则扩容为原来的2倍 + 2
由于扩容涉及到数组的创建和复制,因此建议使用StringBuffer(int capacity)构造器,指定初始数组的大小

注意append()方法,添加任何数据类型都会变成String型,如整数1变为字符1,一个原来是null的字符变成"null"

在这里插入图片描述

日期类

// 获取1970年1月1日0时0分0秒之间以毫秒为单位的时间差
System.currentTimeMillis();

java.util.Date

在这里插入图片描述

new Date();
new Date(long date);// 创建指定毫秒数的Date对象
toString();// 例如:Thu Jun 24 18:37:44 CST 2021
getTime();// 得到1970年1月1日0时0分0秒到现在的毫秒数

java.sql.Date

new Date(long date);// 创建指定毫秒数的Date对象

java.util.Date与java.sql.Date之间的相互转换

java.util.Date d = new java.sql.Date();// 多态
java.sql.Date d2 = new java.sql.Date(d.getTime);

SimpleDateFormat

在这里插入图片描述
在这里插入图片描述

public void testSimpleDateFormat() throws ParseException {
    // 使用默认构造器
    SimpleDateFormat sdf = new SimpleDateFormat();
    // 格式化:日期 --> 字符串
    Date date = new Date();
    System.out.println(date);// Thu Jun 24 18:41:17 CST 2021
    String format = sdf.format(date);
    System.out.println(format);// 21-6-24 下午6:41
    // 解析:格式化的逆过程,字符串 --> 日期
    String str = "21-6-24 下午6:41";
    Date date1 = sdf.parse(str);// 会抛异常
    System.out.println(date1);// Thu Jun 24 18:41:00 CST 2021
    // 使用带参构造器
    sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    // 格式化
    format = sdf.format(date);
    System.out.println(format);// 2021-06-24 06:54:29
    // 解析:要求字符串必须是SimpleDateFormat识别的格式(通过构造器参数体现,否则会抛异常)
    date = sdf.parse("2021-06-24 06:54:29");
    System.out.println(date);// Thu Jun 24 06:54:29 CST 2021
}

Calendar

在这里插入图片描述

一、实例化

  1. 创建子类GregorianCalendar对象
  2. 调用静态方法getInstance

二、方法

public void testCalendar() {
    Calendar calendar = new GregorianCalendar();
    calendar = Calendar.getInstance();
    // get()
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));// 这个月的第几天
    System.out.println(calendar.get(Calendar.DAY_OF_YEAR));// 这一年的第几天
    // set()
    calendar.set(Calendar.DAY_OF_YEAR, 176);// 改成这一年的第176天
    // add()
    calendar.add(Calendar.DAY_OF_YEAR, 3);// 将这一年的天数增加3天
    // getTime()    日历类 --> Date
    Date date = calendar.getTime();
    // setTime()    Date --> 日历类
    calendar.setTime(date);
}

三、注意
Calendar中月是从一开始的,星期是从星期日开始的,从1到7

LocalDate&LocalTime&LocalDateTime

在这里插入图片描述

Instant

在这里插入图片描述

DateTimeFormatter

在这里插入图片描述

其他API

在这里插入图片描述
在这里插入图片描述

Java比较器

Comparable接口(自然排序)

重写compareTo(Object o)方法,大的返回正整数,相等返回0,小的返回负整数

Comparator接口(定制排序)

重写compare(Object o1, Object o2)方法,大的返回正整数,相等返回0,小的返回负整数

其他类

System

Math

BigInteger

BigDecimal

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值