1/14笔记

常用API

1 String

1.1 概述

java.lang.String:是字符串类 底层就是一个final修饰的char数组,所以String很多特性就是数组的特性,比如长度一旦确定不能更改

特性:

1)字符串一旦创建,这个字符对象不能再更改

2)为了提升字符串的访问和存储效率,java虚拟机采用了一种缓存机制,把字符串都保存在了字符串常量池中

3)假如要用到一个字符串a String s1="a";先去常量池中检索,是否有a,没有就创建一份,假如有了String s2="a";就不再创建,把已有的这个a 返回

导致String s1 = "a" String s2 = "a" 此时 不仅equals是true 使用 s1 == s2也是true,因为他们指向同一个字符串对象 即地址也相同

1.2 基本使用

第一部分  创建1个对象 ,因为他们都指向常量池

String一旦创建不能更改的意思并不是这个s1变量不能更改,而是变量指向的对象中的数据不能更改

第二部分 如果使用了new的方式,就会创建堆内存,该字符串对象就会保存在堆内存

1.3 不要频繁拼接

字符串创建之后不能更改,如果频繁拼接的话,效率很低,并且垃圾回收可能也会出现问题

1.4 构造方法        

byte[] bytes = { 97, 98, 99, 100, 101, 102 };String s4 = new String(bytes, 4, 2);

//字节数组 截取 从下标为4(包含)开始 2个数

char[] chars = { 'a', 'b', 'c', 'd' };String s6 = new String(chars,1,2);

//字符数组 截取 从下标为1(包含)开始 2个数

1.5 学习API

1)char charAt (int index) : 返回该字符串中,指定位置的字符

2)boolean endsWith(String suffix) : 判断该字符串是否以指定字符串结尾

System.out.println("Hello.java".endsWith(".java"));

boolean startsWith(String prefix) : 判断该字符串是否以指定字符串开始

System.out.println("Hello.java".startsWith(".java "));

3)boolean equalsIgnoreCase(String str) : 不区分大小写比较两个字符串是否相等

System.out.println("abc".equalsIgnoreCase("aBc"));

4)byte[] getBytes() : 把字符串转换为字节数组并返回

byte[] bytes = "abc".getBytes();

5)char[] toCharArray() : 把字符串转换为字符数组并返回

6)int indexOf(String str) : 获取该字符串中指定字符串的起始索引,找不到返回-1

System.out.println("askdhqwbe".indexOf("kd")); // 2

System.out.println("askdhqwbe".indexOf("kda")); // -1

7)int indexOf(String str,int index) :

从指定位置开始查找(包含),获取该字符串中指定字符串的起始索引,找不到返回-1

System.out.println("askdhaqwbe".indexOf("a", 6)); // -1

8)dex lastIndexOf(String str) : 同上,最后一次出现的索引 找不到返回-1

System.out.println("askdhaqwbe".lastIndexOf("a")); // 5

9)int length() : 返回该字符串的长度

System.out.println("abc".length());

10)String replaceAll(String regex . String replacement);替换指定字符,支持正则表达式

String replace (String str . String replacement); 不支持正则表达式

支持正则表达式,但是没有写正则表达式 是没有区别的

 . 在正则表达式中 代表任意字符 可以使用 \ 转义

System.out.println("qwe.rty.yui.uio".replaceAll("\\.", ","));

11)String[] split(String regex) : 分割字符串,返回字符串数组,支持正则表达式,注意 .需要转义

String s2 = "2022.1.14";

String[] arr = s2.split("\\.");

12)String substring(int begin);获取该字符串中,以某个下标起始的子字符串(包含)

System.out.println("abcdef".substring(2));// cdef

13)String substring(int begin, int end) :

// 获取该字符串中,以某个下标起始(包含)到某个下标结束的子字符串(不包含)

14)String trim() : 去除字符串两边的空格

System.out.println("            a                    d                  sadasd                  ".trim());}

15)String toUpperCase() : 转大写

String toLowerCase() : 转小写

System.out.println("asd".toUpperCase());

16)static String valueOf(Object obj) : 调用该对象的toString方法,如果为null,则不再调用toString而是返回字符串null

1.6 注意

String a="a";String b="b";string str="ab";String c="a"+"b";String d=a+"b";String e=a+b;

true:str=="a"+"b",str==c, 各种a+b的equals;                false:str==d,str==e

final String a = "a"; final String b = "b"; String c = a+b; String d = "ab"; 此时c==d是true

final修饰String时 该变量是常量,被看做"a"和"b" "a"+"b"="ab"

String xx="a"+"b"+"c"只创建一个对象;

2 Stringbuffer和StringBuilder

Stringbuffer和StringBuilder都是字符缓冲区,可以做拼接操作

StringBuffer,StringBuilder和String区别:

String:底层是char数组,定长,一旦创建,不可更改,不适合拼接操作

Stringbuffer和StringBuilder:底层是char数组,变长,预先在内存中申请一块空间,用来保存字符如果预留空间不够了,会进行自动扩容,默认容量为 16,扩大容量  (当前容量+1)*2   16->34->70

StringBuffer和StringBuilder区别:

StringBuffer 线程安全,在多线程环境下,不会出现问题
StringBuilder 非线程安全,在多线程环境下,可能会出现问题

append 就是添加数据,做拼接操作 可以链式调用
sb.append(arr[i]).append(",");

sb.reverse();反转

System.out.println(sb.length());获取已有元素个数

System.out.println(sb.capacity());当前容量(数组长度)

String str = sb.toString();toString可以把StringBuilder转换为String类型

3 包装类

3.1 概念

装箱就是自动将基本数据类型转换为包装器类型 

拆箱就是自动将包装器类型转换为基本数据类型

3.2 使用

byte b1 = 12;Byte b2 = new Byte(b1);封装为包装类

3.3 Integer

3.3.1 基本使用

Integer i1 = new Integer(123);
Integer i2 = new Integer("1231");传递字符串也可以,但是必须是纯数字

3.3.2 相互转换

int ---> Integer
        Integer i1 = new Integer(123);
        i1 = Integer.valueOf(123);

Integer --> int
        int i2 = i1.intValue();

String --> integer
        Integer i3 = new Integer("123");
        i3 = Integer.valueOf("123");

Integer --> String 
        String string = i3.toString();

int --> String
        String string1 = 123+"";

String --> int  

*重要 static int parseInt(String str) : 把纯数字的字符串转换为int类型
        int i4 = Integer.parseInt("123");
        double d1 = Double.parseDouble("2.4");

3.3.3 常用方法

把数字以二进制的字符串形式,并返回
        String s1 = Integer.toBinaryString(10);
八进制
        s1 = Integer.toOctalString(10);
十六进制
        s1 = Integer.toHexString(10);
        System.out.println(s1); 

3.3.4 自动装箱和自动拆箱

java1.5新特性 自动装箱和自动拆箱
      装箱 : 基本类型 到 包装类类型 
      拆箱 : 包装类类型 到 基本类型
八种包装类 都覆写了 toString 和 equals()方法

3.3.5 深入整型常量池

简单来说,常量池就是提前准备好一些对象,当我们要保存数据的时候,发现已经创建好了,就直接拿走,不需要重新创建

整型常量池的范围在-128~127

如果不在范围内  就直接new对象

总结 : 
当我们 通过 new Integer(xx) 创建对象的时候, 不管值是多少,. == 永远是false
当我们使用 Integer i1 = xxx; 这种方式的时候,编译之后 会转换为Integer.valueOf() ; 这种方式会经过整型常量池
假如  xxx这个值  在 -128 到127之间 则 不需要new对象,而是使用常量池中已创建好的对象
否则 不再范围内, 则还是等于 new Integer(xxx) 这种方式
注意 Integer类型之间的比较 还是要用 equals 进行比较才最好

4 System

4.1 概述

System类提供的public static long currentTimeMillis()用来返回当前时 间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。

此方法适于计算时间差。

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。

由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。

成员变量

System类内部包含in、out和err三个成员变量,分别代表标准输入流

(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

成员方法

native long currentTimeMillis():

该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时

间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

void exit(int status):

该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表

异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

4.2 常用方法

标准输出 -- > 打印到控制台
System.out.println(123);
表示错误, 以红色字体 展示到控制台
System.err.println(123);
in 表示标准输入,接收控制台输入的信息
new Scanner(System.in);
获取时间原点到当前时间的毫秒数(1970.1.1 8:0:0)
long startTime = System.currentTimeMillis();
System.out.println("正在执行");
long endTime = System.currentTimeMillis();
System.out.println("耗时 : "+(endTime-startTime));
退出JVM虚拟机,0表示正常关闭,1 表示异常关闭 , 一般用于图形界面 关闭窗口
System.exit(0);这之后的运行不到

5 Date
Date d1 = new Date();获取当前系统时间
Date d2 = new Date(1000);传入毫秒数,获取时间原点到指定毫秒数的世界
System.out.println(d1.getTime());获取指定时间的毫秒数
System.out.println(d1.toString());把时间转换为 字符串类型

创建时间格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");
格式化,返回字符串
String string = sdf.format(d1);System.out.println(string);

时间格式的字符串  转换为Date对象
String strDate = "2022/01/14 16:21:36";

格式化对象的时间格式  要和字符串的格式 一致

年 y    月 M    日 d    时 H    分 m    秒 s    毫秒 S 
sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
转换  返回Date对象
Date date = sdf.parse(strDate);
System.out.println(date);

获取当前日历
Calendar c = Calendar.getInstance();
获取当前是本周第几天 , 周日是第一天
System.out.println(c.get(Calendar.DAY_OF_WEEK));
System.out.println(c.get(Calendar.YEAR)); 年
System.out.println(c.get(Calendar.MONTH)+1);月 , 0 是1月 , 11是12月, 所以 结果 +1 才是正确的
System.out.println(c.get(Calendar.DAY_OF_MONTH));日 获取今天是当前月中第几天
System.out.println(c.get(Calendar.HOUR));时  12小时制
System.out.println(c.get(Calendar.HOUR_OF_DAY));24小时制
System.out.println(c.get(Calendar.MINUTE));分
System.out.println(c.get(Calendar.SECOND));秒

创建随机数生成器
Random r = new Random();
在int范围内 随机生成一个数字
int i = r.nextInt();
System.out.println(i);    
传入10  说明要在 0~9之间生成
i = r.nextInt(10);
System.out.println(i);
生成 10~22  
nextInt(最大值 - 最小值 + 1) + 最小值
int result = r.nextInt(22 - 10 + 1) + 10;
System.out.println(result);

上一篇:han_shiro


下一篇:Redis详解