【Java】常用类 总结



JAVA 常用类总结

一、String 和 StringBuffer类

字符串是指一串连续的字符,有许多单个字符组成。字符串中可以包含各种字符,但是必须写在 “ ” 内Java中定义了String 和 StringBuffer类来封装字符,并且均位于java.lang包中,可以直接使用

1.1 String类的初始化

1.使用字符串常量直接初始化String对象

String 变量名 = 字符串;
String str1 = null;
String str2 = "";
String str3 = "abc";

2.使用String的构造方法初始化String对象

String 变量名 = new String(字符串);

当为具体字符串时,会使用String类的不同参数类型的构造方法(常见3种)来初始化字符串对象。
在这里插入图片描述

public class Example{
     public static void main(String[] args){
          //创建一个空的字符串
          String str1 = new String();  //空
          //创建一个“abc”字符串
          String str2 = new String("abc");  //abc
          //创建一个内容为字符数组的字符串
          char[] charArray = new char[]{'a','b','c'}  //abc
          String str3 = new String(charArray);
     }
}

注意:
 连接字符串就可以用 + 号来表示,例如 "a"+"b" 就是合并一起生成的新字符串"ab".
 在java中,如果 + 号的两边操作数有一个为String类型,那么 + 号就表示字符串连接运算符!!!

返回顶部


1.2 String类常见的操作方法

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

在这里插入图片描述
在指定子字符串输出位置时,输出的是字符串第一个字符对应的索引,例如:s.indexOf(“ab”) 返回的是a的索引,反过来也一样。

在这里插入图片描述

在这里插入图片描述
转换操作主要涉及:字符串转换成字符数组、大小写转换、String数据类型与其他类型数据转换。其中的valueOf()方法还有许多重载方法,支持其他基本类型的数据转换。

在这里插入图片描述

在这里插入图片描述
trim() 方法 用于去除字符串首尾的空格,若想去除字符串中间的空格,只能通过replace()方法匹配实现;
replace() 方法 用于将字符串中所有与指定字符串匹配的子串替换成另一个字符串。

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

在程序中可以通过 “==” 和 equals() 两种方式对字符串进行比较,但是两种方式有区别:
equals() 方法用于比较两个字符串中的字符的值是否相等,
“==” 方法用于比较两个字符串对象的内存地址是否相同

在这里插入图片描述

对于两个字符串对象,当他们的字符值完全相同时,使用equals判断会是true,但是使用“==”方法时,结果一定为false,因为两个字符串对象,每个在创建时,在堆内存区会创建两个字符串对象,每个对象具有唯一内存地址。

但是对于两个字符串常量来说,就不一样了,字符串常量池中的字符串具有唯一性,两个相同的字符串常量引用指向字符串常量池中的同一个区块,即内存地址相同。

可以参考本人博客:Java.常用类.String 、Java.常用类.StringBuffer和StringBuilder ~(顿号前后两篇 ฅ( ˃̶˙ω˙˂̶ ฅ))

在这里插入图片描述

在这里插入图片描述
注意字符串下标从0开始!!!

返回顶部


1.3 StringBuffer类

在Java中,由于String类是final类型的,所以使用String定义的字符串是一个常量,因此它一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。

  • 解决方法:可以使用StringBuffer类(也称字符串缓冲区)来操作字符串。
  • 说明StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类似一个字符容器,当在其中添加或删除字符时,所操作的都是这个字符容器,因此并不会产生新的StringBuffer对象

StringBuffer类常用方法:

在这里插入图片描述

在这里插入图片描述
提示:此处的 setcharat() 在某种程度上可以相等于 replace() 方法!!!

StringBuffer类和String类的对比

  • String类定义的字符串是常量,一旦创建后,内容和长度都是无法改变的。
    StringBuffer表示字符容器,其内容和长度可以随时修改。
  • String类重写了Object类的equals()方法,而StringBuffer类没有重写Object类的equals()方法。
  • String类对象可以用操作符+连接,而StringBuffer对象之间不可以
    在这里插入图片描述
    • 除了使用StringBuffer外,JDK 1.5之后提供了一个StringBuilder类同样可以操作字符串。StringBuilder与StringBuffer的功能相似,且两个类中所提供的方法也基本相同。
    • 主要区别:二者所不同的是StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。通常情况下,如果创建一个内容可变的字符串对象,应该优先考虑StringBuilder类。

返回顶部


二、System 和 Runtime类

2.1 System类

System类定义了一些与系统相关的属性和方法,它所提供的属性和方法都是静态的,因此,想要引用这些属性和方法,直接使用System类调用即可。

System类常用方法:
在这里插入图片描述
在这里插入图片描述
利用 getProperties() 获取系统属性,并将其键、值分离:

在这里插入图片描述
在这里插入图片描述
利用 System.currentTimeMillis() 获取当前系统时间,计算程序运行所需时间:
在这里插入图片描述
从srcArry数组下标为2的开始,数四个复制;复制到desArray数组,从下标0开始。
在这里插入图片描述

返回顶部


2.2 Runtime类

定义Runtime类用于表示Java虚拟机运行时的状态,它用于封装Java虚拟机进程。
说明:每次使用“java”命令启动Java虚拟机时都会对应一个Runtime实例,并且只有一个实例,应用程序会通过该实例与其运行时的环境相连。
注意

  • Runtime类中提供了一个exec()方法,该方法用于执行一个DOS命令,从而实现和在命令行窗口中输入DOS命令同样的效果。.
  • 应用程序不能创建自己的Runtime实例,但是可以通过getRuntime()方法获取对象
    Runtime run = Runtime.getRuntime();

通过Runtime.getRuntime() 获取一个Runtime的实例对象,并分别调用它的availableprocessors()、freeMemory()、maxMemory()方法得到当前虚拟机的处理器个数、空闲内存数、可用最大内存。
在这里插入图片描述
Runtime类提供的exec() 方法,用于执行DOS命令,实现效果与在命令行窗口同样的效果。通过运行“notepad.exe"打开自带的记事本。

在这里插入图片描述
exec() 方法还会同时返回一个Process对象,通过该对象可以对产生的进程管理,只需要调用destroy() 方法即可关闭当前进程。

在这里插入图片描述

返回顶部


三、Math 和 Random类

3.1 Math类

Math类是一个工具类,主要用于完成复杂的数学运算,如求绝对值、三角函数、指数运算等。
由于Math类的构造方法被定义成private,因此无法创建Math类的对象
Math类中的所有方法都是静态方法,可以直接通过类名来调用它们
除静态方法外,Math类中还有两个静态常量PI和E,分别代表数学中的π和e

在这里插入图片描述
注意:round() 方法会对某个小数进行四舍五入,此方法会将小数点后面的数字全部忽略,返回一个int类型数据,而ceil()、floor() 方法返回的都是double类型的数,该数在数值上等于一个整数。

返回顶部


3.2 Random类

在JDK的java.util包中,有一个Random类,它可以在指定的取值范围内随机产生数字。

Random类的两个构造方法:
在这里插入图片描述
通过第一个方法创建的random对象每次使用的种子是随机的,因此每次产生的随机数是不一样的;通过第二个方法创建的random对象可以保证创建的多个random实例对象产生相同序列的随机数,利用这一点可以实现代码的复现。

Random类——常用方法:
在这里插入图片描述
在这里插入图片描述
返回顶部


四、包装类、日期类的使用

4.1 包装类

虽然java是面向对象编程,但是它所包含的8中基本数据类型却不支持面向对象的编程机制(无属性、方法),因为很多类的方法都需要接受引用类型的对象,此时无法将基本数据类型的值传入,所以引入包装类的概念,通过这些包类可以将基本数据类型的值包装为引用数据类型的对象。

在这里插入图片描述
自动装箱(Autoboxing):是指将基本数据类型的变量赋给对应的包装类变量;(从右往左看)
自动拆箱(AutoUnboxing):是指将包装类对象类型直接赋给一个对应的基本数据类型变量。(从右往左看)

在这里插入图片描述
基本数据类型、基本数据包装类以及字符串之间的相互转换:

  • 通过引用数据类型字符串String类的valueOf()方法可以将8种基本数据类型转换为对应的字符串类型
  • 通过8种包装类的静态方法valueOf()既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外)
  • 通过8种包装类的有参构造方法同样既可以将对应的基本数据类型转换为包装类,也可以将变量内容匹配的字符串转换为对应的包装类(Character包装类除外);
  • 通过8种包装类的静态方法parseXxx()可以将变量内容匹配的字符串转换为对应的基本数据类型
    包装类都重写了Object类中的toString()方法,以字符串的形式返回被包装的基本数据类型的值。

在这里插入图片描述
使用valueOf(String s)和parseXxx(String s)方法注意事项:(类型匹配

除了Character外,包装类都有valueOf(String s)方法,可以根据String类型的参数创建包装类对象,但参数字符串s不能为null,而且字符串必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错。

Integer i = Integer.valueOf("123");       // 合法
Integer i = Integer.valueOf("12a");      // 不合法

除了Character外,包装类都有parseXxx(String s)的静态方法,将字符串转换为对应的基本类型的数据。参数s不能为null,而且同样必须是可以解析为相应基本类型的数据,否则虽然编译通过,但运行时会报错。

int i = Integer.parseInt("123");             // 合法    
Integer in = Integer.parseInt("itcast");  // 不合法

返回顶部


4.2 日期类

4.2.1 Data类

在JDK的java.util包中,提供了一个Date类用于表示日期和时间。随着JDK版本的不断升级和发展,Date类中大部分的构造方法和普通方法都已经不再推荐使用。 目前JDK8中,Date类只有两个构造方法是可以使用的:

  • Date()用来创建当前日期时间的Date对象。
  • Date(longdate)用于创建指定时间的Date对象,其中date参数表示1970年1月1日0时0分0(称为历元)以来的毫秒数,即时间戳。

在这里插入图片描述
返回顶部


4.2.2 Calendar类

Calendar类用于完成日期和时间字段的操作,它可以通过特定的方法设置和读取日期的特定部分
* 比如年、月、日、时、分和秒等。
Calendar类是一个抽象类,不可以被实例化。
* 在程序中需要调用其静态方法getInstance()来得到一个Calendar对象,然后才能调用其相应的方法。

Calendar类——常用方法:
在这里插入图片描述
get() 方法中的field参数接受Calendar中定义的常量值(年、月、日、时、分、秒)
特别注意这里的月份是从0开始的
在这里插入图片描述
根据指令设置或修改某个时间,假设某一工程开始的时间是2018年1月1日,设100天后竣工,求竣工时的日期:

在这里插入图片描述

Calendar日历容错模式与非容错模式:
Calendar有两种解释日历字段的模式——lenient模式(容错模式)和non-lenient模式(非容错模式)。当Calendar处于lenient模式时,它的字段可以接收超过允许范围的值,当调用get(int field)方法获取某个字段值时,Calendar会重新计算所有字段的值,将字段的值标准化。
在这里插入图片描述

返回顶部


4.2.3 JDK 8——新增日期与时间类(了解为主)

为了满足更多的需求,JDK 8中新增了一个java.time包,在该包下包含了更多的日期和时间操作类

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

package com.itheima;
import java.time.*;
public class Example23 {
	public static void main(String[] args) {
		// 1、Clock的使用
		Clock clock = Clock.systemUTC();
		System.out.println("获取UTC时区转换的当前时间:" + clock.instant());
		System.out.println("获取UTC时区转换的的毫秒数:" + clock.millis());
		// 2、Duration的使用
		Duration d = Duration.ofDays(1);
		System.out.println("一天等于" + d.toHours() +"小时");
		System.out.println("一天等于" + d.toMinutes() +"分钟");
		System.out.println("一天等于" + d.toMillis() +"秒");
		// 3、Instant的使用
		Instant instant = Instant.now();
		System.out.println("获取UTC时区的当前时间为:" + instant);
		System.out.println("当前时间一小时后的时间为:" 
		                 + instant.plusSeconds(3600));
		System.out.println("当前时间一小时前的时间为:" 
		                 + instant.minusSeconds(3600));
		// 4、LocalDate的使用
		LocalDate localDate = LocalDate.now();
		System.out.println("从默认时区的系统时钟获得当前日期:" + localDate);
		// 5、LocalTime的使用
		LocalTime localTime = LocalTime.now();
		System.out.println("从默认时区的系统时钟获取当前时间:" + localTime);
		// 6、LocalDateTime的使用
		LocalDateTime localDateTime = LocalDateTime.now();
		System.out.println("从默认时区的系统时钟获取日期、时间:" 
							+ localDateTime);
		LocalDateTime times = localDateTime.plusDays(1)
				            .plusHours(3).plusMinutes(30);
		System.out.println("当前的日期、时间加上1天3小时30分之后:" + times);
		// 7、Year、YearMonth、MonthDay的使用
		Year year = Year.now();
		System.out.println("当前年份为:" + year);
		YearMonth yearMonth = YearMonth.now();
		System.out.println("当前年月为:" + yearMonth);
		MonthDay monthDay = MonthDay.now();
		System.out.println("当前月日为:" + monthDay);
		// 8、 获取系统默认时区
		ZoneId zoneId = ZoneId.systemDefault();
		System.out.println("当前系统默认时区为:" + zoneId);
	}
}

在这里插入图片描述
返回顶部


五、日期、时间格式器的使用

5.1 格式化类

5.1.1 DateFormat类

作用:DateFormat类专门用于将日期格式化为字符串或者将用特定格式显示的日期字符串转换成一个Date对象。
说明DateFormat是一个抽象类,不能被直接实例化,但它提供了一系列的静态方法来获取DateFormat类的实例对象,并能调用其他相应的方法进行操作。

DateFormat类——常用方法:

在这里插入图片描述
DateFormat类——常用常量
在这里插入图片描述
在这里插入图片描述
利用DateFormat提供的parse(String source) 方法,将字符串类解析成Date对象。
在这里插入图片描述

返回顶部


5.1.2 SimpleDateFormat类

在使用DateFormat对象的parse()方法将字符串解析为日期时,需要输入固定格式的字符串,这显然不够灵活。为了能够更好地格式化日期、解析字符串,Java中提供了一个SimpleDateFormat类。

  • 说明SimpleDateFormat类是DateFormat类的子类,它可以使用new关键字创建实例对象。在创建实例对象时,它的构造方法需要接收一个表示日期格式模板的字符串参数。

使用SimpleDateFormat类将日期对象以特定的格式转为字符串形式:

    SimpleDateFormat sdf = new SimpleDateFormat("Gyyyy年MM月dd日:今天是yyyy年的第D天,E"); 
    System.out.println(sdf.format(new Date()));
    公元20200913日:今天是2020年的第257天,星期日

使用SimpleDateFormat类将一个指定日期格式的字符串解析为Date对象:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    String str = "2018/01/27";
    System.out.println(sdf.parse(str));
    Sat Jan 27 00:00:00 CST 2018

返回顶部


5.1.3 DateTimeFomatter类

JDK 8在java.time.format包下还提供了一个DateTimeFormatter类,该类也是一个格式化类,其功能相当于DataFormat和SimpleDateFormat的合体,它不仅可以将日期、时间对象格式化成字符串,还能将特定格式的字符串解析成日期、时间对象。
要使用DateTimeFormatter进行格式化或者解析,就必须先获得DateTimeFormatter对象。

DateTimeFomatter类——获取实例对象方式:

使用静态常量创建DateTimeFormatter格式器

  • 在DateTimeFormatter类中包含大量的静态常量,如BASIC_ISO_DATE、ISO_LOCAL_DATE、ISO_LOCAL_TIME等,通过这些静态常量都可以获取DateTimeFormatter实例。

使用不同风格的枚举值来创建DateTimeFormatter格式器。

  • 在FormatStyle类中定义了FULL、LONG、MEDIUM和SHORT四个枚举值,它们表示日期和时间的不同风格。

根据模式字符串创建DateTimeFormatter格式器。

DateTimeFomatter类——基本使用:

1.完成日期、时间格式化 在这里插入图片描述
在这里插入图片描述
2.解析字符串 在这里插入图片描述
在这里插入图片描述

返回顶部


  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骑着蜗牛ひ追导弹'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值