JavaSE复习笔记(第七章-常用类库)

JavaSE复习笔记(第七章-常用类库),第1张

目录

常用类

一、String类

1.String类的特点

2.String对象的创建方式

3.String类的常用方法

4.字符串内存分析​编辑

5.字符串对象的不可变性​编辑

二、StringBuilder和StringBuffer类

三、数学相关类

BigInteger

BigDecimal

四、日期时间API

五、系统相关类

六、数组工具类

七、包装类

八、枚举Enum


常用类 一、String类

java.lang.String类的实例表示字符串,因为字符串太常用,所以字面量"abc"也表示字符串的一个实例。

1.String类的特点
  • 字符串是一个常量,一旦创建不可改变。即字符串对象不可改变。

  • String类内部使用char[]存储字符数据,jdk9之后改为byte[]

  • 字符串字面量"abc"存储在字符串常量池,内容相同的字符串在常量池中只有一份。

  • String类是final不能被继承

2.String对象的创建方式
  • String s = "abc";

  • public String() :初始化新创建的 String对象,以使其表示空字符序列。

  • String(String original): 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。

  • public String(char[] value) :通过当前参数中的字符数组来构造新的String。

  • public String(char[] value,int offset, int count) :通过字符数组的一部分来构造新的String。

  • public String(byte[] bytes) :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。

  • public String(byte[] bytes,String charsetName) :通过使用指定的字符集解码当前参数中的字节数组来构造新的String。

  • String s = ""+123+true;

3.String类的常用方法
  • (1)boolean isEmpty():字符串是否为空

  • (2)int length():返回字符串的长度

  • (3)String concat(xx):拼接,等价于+

  • (4)boolean equals(Object obj):比较字符串是否相等,区分大小写

  • (5)boolean equalsIgnoreCase(Object obj):比较字符串是否相等,不区分大小写

  • (6)int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小

  • (7)int compareToIgnoreCase(String other):比较字符串大小,不区分大小写

  • (8)String toLowerCase():将字符串中大写字母转为小写

  • (9)String toUpperCase():将字符串中小写字母转为大写

  • (10)String trim():去掉字符串前后空白符

  • (11)boolean contains(xx):是否包含xx

  • (12)int indexOf(xx):从前往后找当前字符串中xx,即如果有返回第一次出现的下标,要是没有返回-1

  • (13)int lastIndexOf(xx):从后往前找当前字符串中xx,即如果有返回最后一次出现的下标,要是没有返回-1

  • (14)String substring(int beginIndex) :返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。

  • (15)String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。

  • (16)char charAt(index):返回[index]位置的字符

  • (17)char[] toCharArray(): 将此字符串转换为一个新的字符数组返回

  • (18)String(char[] value):返回指定数组中表示该字符序列的 String。

  • (19)String(char[] value, int offset, int count):返回指定数组中表示该字符序列的 String。

  • (20)static String copyValueOf(char[] data): 返回指定数组中表示该字符序列的 String

  • (21)static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String

  • (22)static String valueOf(char[] data, int offset, int count) : 返回指定数组中表示该字符序列的 String

  • (23)static String valueOf(char[] data) :返回指定数组中表示该字符序列的 String

  • (24)byte[] getBytes():编码,把字符串变为字节数组,按照平台默认的字符编码进行编码

  • byte[] getBytes(字符编码方式):按照指定的编码方式进行编码

  • (25)new String(byte[] ) 或 new String(byte[], int, int):解码,按照平台默认的字符编码进行解码

  • new String(byte[],字符编码方式 ) 或 new String(byte[], int, int,字符编码方式):解码,按照指定的编码方式进行解码

  • (26)boolean startsWith(xx):是否以xx开头

  • (27)boolean endsWith(xx):是否以xx结尾

  • (28)boolean matches(正则表达式):判断当前字符串是否匹配某个正则表达式

  • (29)String replace(xx,xx):不支持正则

  • (30)String replaceFirst(正则,value):替换第一个匹配部分

  • (31)String repalceAll(正则, value):替换所有匹配部分

  • (32)String[] split(正则):按照某种规则进行拆分

4.字符串内存分析

5.字符串对象的不可变性

二、StringBuilder和StringBuffer类
  1. 与String类的区别

    String对象是不可变的,如果要频繁修改字符串那么效率会比较低。所以Java提供了可变长字符串StringBuilder和StringBuffer类。如果要频繁修改字符串可以使用这两个类。

    StringBuffer:老的,线程安全的(因为它的方法有synchronized修饰),效率低

    StringBuilder:线程不安全的,效率高

  2. 常用API

    常用的API,StringBuilder、StringBuffer的API是完全一致的

    (1)StringBuffer append(xx):拼接,追加

    (2)StringBuffer insert(int index, xx):在[index]位置插入xx

    (3)StringBuffer delete(int start, int end):删除[start,end)之间字符

    StringBuffer deleteCharAt(int index):删除[index]位置字符

    (4)void setCharAt(int index, xx):替换[index]位置字符

    (5)StringBuffer reverse():反转

    (6)void setLength(int newLength) :设置当前字符序列长度为newLength

    (7)StringBuffer replace(int start, int end, String str):替换[start,end)范围的字符序列为str

    (8)int indexOf(String str):在当前字符序列中查询str的第一次出现下标

    int indexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的第一次出现下标

    int lastIndexOf(String str):在当前字符序列中查询str的最后一次出现下标

    int lastIndexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的最后一次出现下标

    (9)String substring(int start):截取当前字符序列[start,最后]

    (10)String substring(int start, int end):截取当前字符序列[start,end)

    (11)String toString():返回此序列中数据的字符串表示形式

//创建对象
StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(123).append(true).append('abc');
String s = sb.toString();

 

三、数学相关类
  1. java.lang.Math类封装了一些基础数学运算功能

    • public static final double PI:返回圆周率

    • public static double abs(double a) :返回 double 值的绝对值。

    • public static double ceil(double a) :返回大于等于参数的最小的整数。

    • public static double floor(double a) :返回小于等于参数最大的整数。

    • public static long round(double a) :返回最接近参数的 long。(相当于四舍五入方法)

    • public static double pow(double a,double b):返回a的b幂次方法

    • public static double sqrt(double a):返回a的平方根

    • public static double random():返回[0,1)的随机值

    • public static double max(double x, double y):返回x,y中的最大值

    • public static double min(double x, double y):返回x,y中的最小值

  2. java.util.Random类,用于生成伪随机数流

    • public Random():创建一个新的随机数生成器。此构造方法将随机数生成器的种子设置为某个值,该值与此构造方法的所有其他调用所用的值完全不同。(没有真正的随机数,需要种子产生随机数,同一个种子产生的伪随机数序列相同)

    • public Random(long seed):使用单个 long 种子创建一个新的随机数生成器。该种子是伪随机数生成器的内部状态的初始值,该生成器可通过方法 next(int) 维护。

    • boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。

    • void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。

    • double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。

    • float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。

    • double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。

    • int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。

    • int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。

    • long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。

      //创建对象
      Random r = new Random();
      //产生一个随机整数[0,50)
      int num = r.nextInt(50);
  3. BigInteger

    不可变的任意精度的整数。

    • BigInteger(String val)

    • BigInteger add(BigInteger val)

    • BigInteger subtract(BigInteger val)

    • BigInteger multiply(BigInteger val)

    • BigInteger divide(BigInteger val)

    • BigInteger remainder(BigInteger val)

    • int intValue():将此 BigInteger 转换为 int。

    • long longValue():将此 BigInteger 转换为 long。

    • float floatValue():将此 BigInteger 转换为 float。

  4. BigDecimal

    不可变的、任意精度的有符号十进制数。

    • BigDecimal(String val)

    • BigDecimal add(BigDecimal val)

    • BigDecimal subtract(BigDecimal val)

    • BigDecimal multiply(BigDecimal val)

    • BigDecimal divide(BigDecimal val)

    • BigDecimal divide(BigDecimal divisor, int roundingMode)

    • BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

    • BigDecimal remainder(BigDecimal val)

    • double doubleValue():将此 BigDecimal 转换为 double。

四、日期时间API
  1. java.util.Date日期类

    Date date = new Date();//创建Date对象,表示当前系统的日期时间
    long time = date.getTime();//从1970.1.1 8:0:0到现在的毫秒值
    ​
    Date date2 = new Date(0L);//根据指定的毫秒值,创建Date对象
  2. java.util.Calendar日历类

    //创建Calendar对象,表示当前系统日期时间
    Calendar  c = Calendar.getInstance();
    //获取日期时间等信息
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
  3. java.text.SimpleDateFormat日期时间格式类

    用于把Date对象格式化为字符串,或这个把字符串解析为Date对象

    //创建格式化类对象,并指定一种格式
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //格式化:
    String s = sdf.format(new Date());//"2022-09-17 08:48:12"
    //解析:
    Date date = sdf.parse("2022-09-17 08:48:12");
  4. JDK8日期时间API

    • LocalDate日期类,LocalTime时间类,LocalDateTime类

    • ZoneDateTime,ZoneId时区相关类

    • Period日期间隔类,Duration时间间隔类

    • DateTimeFormatter日期时间格式化类

      方法描述
      now() / now(ZoneId zone)静态方法,根据当前时间创建对象/指定时区的对象
      of()静态方法,根据指定日期/时间创建对象
      getDayOfMonth()/getDayOfYear()获得月份天数(1-31) /获得年份天数(1-366)
      getDayOfWeek()获得星期几(返回一个 DayOfWeek 枚举值)
      getMonth()获得月份, 返回一个 Month 枚举值
      getMonthValue() / getYear()获得月份(1-12) /获得年份
      getHours()/getMinute()/getSecond()获得当前对象对应的小时、分钟、秒
      withDayOfMonth()/withDayOfYear()/withMonth()/withYear()将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
      with(TemporalAdjuster t)将当前日期时间设置为校对器指定的日期时间
      plusDays(), plusWeeks(), plusMonths(), plusYears(),plusHours()向当前对象添加几天、几周、几个月、几年、几小时
      minusMonths() / minusWeeks()/minusDays()/minusYears()/minusHours()从当前对象减去几月、几周、几天、几年、几小时
      plus(TemporalAmount t)/minus(TemporalAmount t)添加或减少一个 Duration 或 Period
      isBefore()/isAfter()比较两个 LocalDate
      isLeapYear()判断是否是闰年(在LocalDate类中声明)
      format(DateTimeFormatter t)格式化本地日期、时间,返回一个字符串
      parse(Charsequence text)将指定格式的字符串解析为日期、时间
      //创建LocatDateTime对象
      LocalDateTime now = LocalDateTime.now();//表示当前系统日期时间
      LocalDateTime dateTime = LocalDateTime.of(1999,9,9,10,10,10);//根据指定日期时间创建对象
      //创建格式化类对象,并指定格式
      DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
      LocalDateTime now = LocalDateTime.now();
      //格式化:
      String s = dtf.format(now);
      String s1 = now.format(dtf);
      //解析:
      LocalDateTime dateTime = LocalDateTime.parse("2022-09-17 08:48:12",dtf);
五、系统相关类
  1. java.lang.System系统类

    系统类中很多好用的方法,其中几个如下:

    • static long currentTimeMillis() :返回当前系统时间距离1970-1-18:0:0的毫秒值

    • static void exit(int status) :退出当前系统

    • static void gc() :运行垃圾回收器。

    • static String getProperty(String key):获取某个系统属性

  2. java.lang.Runtime运行时类

    每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime 方法获取当前运行时。 应用程序不能创建自己的 Runtime 类实例。

    public static Runtime getRuntime(): 返回与当前 Java 应用程序相关的运行时对象。

    public long totalMemory():返回 Java 虚拟机中的内存总量。此方法返回的值可能随时间的推移而变化,这取决于主机环境。

    public long freeMemory():回 Java 虚拟机中的空闲内存量。调用 gc 方法可能导致 freeMemory 返回值的增加。

    public long maxMemory(): 返回 Java 虚拟机试图使用的最大内存量。

    Process exec(String command):在单独的进程中执行指定的字符串命令。

    //获取运行时类的实例,单例的
    Runtime r = Runtime.getRuntime();
    Runtime r1 = Runtime.getRuntime();
    System.out.println(r==r1);//true
六、数组工具类

java.util.Arrays数组工具类,提供了很多静态方法来对数组进行 *** 作,而且如下每一个方法都有各种重载形式,以下只列出int[]类型的,其他类型的数组类推:

  • static int binarySearch(int[] a, int key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数

  • static int[] copyOf(int[] original, int newLength) :根据original原数组复制一个长度为newLength的新数组,并返回新数组

  • static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组

  • static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同

  • static void fill(int[] a, int val) :用val填充整个a数组

  • static void fill(int[] a, int fromIndex, int toIndex, int val):将a数组[fromIndex,toIndex)部分填充为val

  • static void sort(int[] a) :将a数组按照从小到大进行排序

  • static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列

  • static String toString(int[] a) :把a数组的元素,拼接为一个字符串,形式为:[元素1,元素2,元素3。。。]

七、包装类
  1. Java针对每种基本数据类型都提供了对应的引用数据类型,即包装类类型。

    Java提供了两大类数据类型,基本类型与引用类型,使用基本类型在于效率,但是缺少像引用数据类型一样的丰富API,那么Java提供了针对基本数据类型的保证类,以提供更加便捷的 *** 作功能,包装类就是把基本数据类型包装成对应的引用数据类型。

    序号基本数据类型包装类(java.lang包)
    1byteByte
    2shortShort
    3intInteger
    4longLong
    5floatFloat
    6doubleDouble
    7charCharacter
    8booleanBoolean
    9voidVoid
  2. 自动装箱与拆箱

    • 自动装箱:把基本数据类型包装成了对应的引用数据类型

    • 自动拆箱:把包装类类型转换为对应的基本数据类型

    int a = 10;
    Integer b = a;//自动装箱
    int c = b;//自动拆箱
    ​
    Integer x = new Integer(123);
    Integer x = 123;
  3. 相关API

    //整数转字符串的方法
    Integer i = 123;
    String s = i.toString();
    String s1 = String.valueOf(456);
    String s2 = "" + 789;
    String s3 = Integer.toString(789);
    //把整数转为其他进制字符串
    String s4 = Integer.toBinaryString(15);
    System.out.println("s4 = " + s4);//1111
    String s5 = Integer.toHexString(15);
    System.out.println("s5 = " + s5);//F
    ​
    //字符串转整数的方法
    int i = Integer.parseInt("123");
    Integer i1 = Integer.valueOf("456");
    Integer i2 = new Integer("789");
  4. 包装类的缓存问题

    包装类的数据在缓存数值范围内时,直接从内存中取出对象,超过范围会创建新的对象

    包装类缓存对象
    Byte-128~127
    Short-128~127
    Integer-128~127
    Long-128~127
    Float没有
    Double没有
    Character0~127
    Booleantrue和false
    Integer a = 10;//从缓存中取出Integer对象
    Integer b = 10;//从缓存中取出Integer对象
    ​
    System.out.println(a == b);//true
    ​
    Integer x = 200;//创建新Integer对象
    Integer y = 200;//创建新Integer对象
    System.out.println(x == y);//false
    ​
    Integer m = new Integer(20);//直接创建Integer对象
    Integer n = new Integer(20);//直接创建Integer对象
    System.out.println(m == n);//false
八、枚举Enum
  1. 枚举的理解:只有固定几个对象的类。JDK5之后支持直接使用enum关键字定义枚举类型

  2. 定义格式:

    【修饰符】 enum 枚举类型{
        常量名1,常量名2,...;
    }
    public enum Season{
        SPRING,SUMMER,AUTUMN,WINTTER
    }
  3. 枚举类的要求和特点

    • 枚举类的常量对象列表必须在枚举类的首行,因为是常量,所以建议大写。

    • 如果常量对象列表后面没有其他代码,那么“;”可以省略,否则不可以省略“;”。

    • 编译器给枚举类默认提供private的无参构造

    • 如果需要也可以定义有参构造,默认也是private修饰,常量对象名后面加(实参列表)调用有参构造器。

    • 枚举类默认继承自java.lang.Enum类,不能再继承其他的类型;枚举类默认是final修饰的也不能被继承。

    • JDK1.5之后switch,提供支持枚举类型,case后面可以写枚举常量名。

    • 枚举类型如有其它属性,建议这些属性也声明为final的,因为常量对象在逻辑意义上应该不可变。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/2991813.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存