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

随机推荐

  • 为武汉祈祷的句子

    1、武汉挺住,武汉加油!我们很好,你们无论在哪,照顾好自己。没有一个国家是不经历风雨的,只有经历风雨中国才会成长,相信经过这场噩梦中国很更加优秀,更加坚强,相信中国,相信武汉,相信1、武汉挺住,武汉加

    2022-10-01
    0 0 0
  • 百度网盘如何上传微信的备份文件

    微信备份的文件或者是下载的文件可以上传到百度网盘里面,下面分享一下具体的上传方法,一起来学习一下吧。首先打开百度网盘。点击里面的更多服务。然后点击下方的微信备份。选微信备份的文件或者是下载的文件可以上

    2022-10-01
    0 0 0
  • 2022春节省内回洪湖需要核酸检测吗

    春节马上就要到了,湖北省目前全省都是低风险地区,但是国家卫健委要求返乡是需要有7天核酸检测证明的,但是对于返乡也做了具体划分,是要返回农村地区的人员,这也难免会让不少人不春节马上就要到了,湖北省目前全

    2022-10-01
    0 0 0
  • 安全工程师报考条件及专业要求是什么

    1、具有安全工程及相关专业中专学历,从事安全生产业务满4年;或具有其他专业中专学历,从事安全生产业务满5年。2、具有安全工程及相关专业大学专科学历,从事安全生产业务满2年;或1、具有安全工程及相关专业

    2022-10-01
    0 0 0
  • 桃驳李和油桃的区别 桃驳李和油桃怎么区分

      油桃和桃驳李其实就是一样的水果,其实就是俗称的油桃,只不过就是换了一种叫法而已。桃驳李是从欧洲引进的,营养价值很高,外表的样子很光滑,吃起来口感也很不错。那么桃驳李最  油桃和桃驳李其实就是一样的

    2022-10-01
    0 0 0
  • 涛组词涛的组词涛字怎么组词

    “涛”字在开头的词语:涛澜 涛涛 涛泷 涛波 涛澜汹涌 涛头 涛佬 涛涛不绝“涛”字在结尾的词语石涛 惊风怒涛 悬涛 惊涛 风涛 空涛 碧涛 潮涛 湍涛 愤涛 金“涛”字在开头的词语:涛澜 涛涛 涛泷

    2022-10-01
    0 0 0
  • 刚买的冲锋衣为何有种塑料味

    冲锋衣是我们生活中常见的一件外套,尤其到了秋冬好季节更是因其保暖性以及防风水引起了大家的购买热,但很多人在收到新买的冲锋衣的时候都有遇到冲锋衣有味道的疑问,那么刚买的冲锋衣是我们生活中常见的一件外套,

    2022-10-01
    0 0 0
  • 不得而知的具体意思是什么 不得而知是什么意思

      成语不得而知的意思是:没有办法知道。出自唐·韩愈《争臣论》:“故虽谏且议;使人不得而知焉。”另一个出处:邹韬奋《经历·贫民窟里的报馆》:从未到过广西,所以谁做了广西政府  成语不得而知的意思是:没

    2022-10-01
    0 0 0
  • 保鲜盒能放冰箱冷冻吗

    保鲜盒在生活中十分的常见,因其能很好的帮人们存放东西。所以深受大家的喜爱,但很多人在使用保鲜盒的时候,却存有保鲜盒能放冰箱冷冻吗的疑问,下面小编就和大家一起看看吧。保鲜保鲜盒在生活中十分的常见,因其能

    2022-10-01
    0 0 0

发表评论

登录后才能评论

评论列表(0条)

保存