目录
六、StringBuilder/StringBuffer 类
一、类的作用
Java中的类是一种重要的构造,它允许你将数据和方法组合在一起,以便更好地组织、复用和扩展代码,从而构建出功能强大且易于维护的程序。例如:封装数据和行为、封装数据和行为、抽象和继承、多态性、模块化和组织、设计模式的实现、面向对象编程等。
以下是类的声明语法:
[访问修饰符] class 类名 [extends 父类名] [implements 接口名列表] {
// 类的成员变量(字段)
// 类的构造方法
// 类的方法
}
二、包装类
Java中的包装类(Wrapper Classes)是一组用于将基本数据类型(如int、double、char等)封装为对象的类。这些包装类提供了一些额外的方法和功能,使得基本数据类型可以像对象一样进行操作。常用的包装类如下:Integer、Double、Float、Character、Boolean、Byte、Short、Long。
public static void main(String[] args) {
Boolean b01 = false; // 自动装箱
Boolean b02 = new Boolean("0"); // 使用构造方法初始化
Boolean b03 = Boolean.parseBoolean("0");// 使用 parseXXX 方法
Boolean b04 = Boolean.valueOf("0"); // 使用 valueOf 方法
//大多数类型都可以使用以上方法初始化
Byte by01 = 0;
Short s01 = 0;
Integer i01 = 0;
Integer i02 = Integer.parseInt("0");
Long l01 = 0l;
Float f01 = 0f;
Float f02 = Float.valueOf(0);
Double d01 = Double.valueOf(0);
Character c01 = 'x';
//大多数类型都可以使用以下方法转换
boolean b10 = b01; // 自动拆箱
boolean b11 = b01.booleanValue(); // 使用 xxxValue 方法
String b12 = b01.toString(); // 使用 toString 方法
}
三、System 类
提供了一些与系统操作和属性相关的静态方法和属性。如:标准输入、输出和错误流,获取系统属性,退出程序,垃圾回收,获取当前时间,数组拷贝等。
(1)static PrintStream out: 标准输出流,用于将文本内容输出到控制台。
(2)static InputStream in: 标准输入流,用于从控制台读取用户输入。
(3)static PrintStream err: 标准错误输出流,用于输出错误信息到控制台。
(4)static void exit(int status): 终止当前正在运行的 Java 虚拟机。status 参数表示程序的退出状态。
(5)static long currentTimeMillis(): 返回当前时间的毫秒数,用于计算时间间隔等。
(6)static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length): 将数组 src 中的一部分元素复制到数组 dest 中的指定位置。
(7)static String getProperty(String key): 获取指定键的系统属性值。
(8)static String getProperty(String key, String defaultValue): 获取指定键的系统属性值,如果没有找到则返回默认值。
(9)static void setProperty(String key, String value): 设置指定键的系统属性值。
(10)static String getenv(String name): 获取指定名称的环境变量值。
(11)static Map<String, String> getenv(): 获取所有环境变量的名称和值组成的映射。
public static void main(String[] args) {
long time = System.currentTimeMillis();
System.out.println("时间的毫秒数:"+time);
System.out.println("文件编码格式:"+System.getProperty("file.encoding"));
}
四、Scanner 类
Scanner 类提供了多个构造方法,可以从不同的输入源(例如文件、字符串、流等)创建一个 Scanner 对象。用于简化从不同输入源(如键盘、文件等)读取数据的过程。
(1)Pattern delimiter(): 获取当前使用的分隔符模式。
(2)Scanner useDelimiter(Pattern pattern): 设置用于分隔标记的模式。
(3)Scanner useDelimiter(String pattern): 设置用于分隔标记的模式(使用正则表达式字符串)。
(4)Pattern skipPattern(): 获取当前用于跳过输入的模式。
(5)Locale locale(): 获取当前的 Locale 对象。
(6)Scanner useLocale(Locale locale): 设置用于解析数字和日期的 Locale。
(7)int radix(): 获取当前的进制基数(用于解析整数)。
(8)Scanner useRadix(int radix): 设置用于解析整数的进制基数。
(9)MatchResult match(): 获取最近匹配操作的结果。
(10)boolean hasNext(): 检查是否有下一个标记(默认以空白字符作为分隔符)。
(11)String next(): 获取并返回下一个标记。
(12)其他 hasNextX() 和 nextX() 方法: 提供了获取特定类型数据的方法,如 hasNextInt() 和 nextInt()。
(13)String nextLine(): 获取并返回下一行的内容。
(14)void close(): 关闭 Scanner 对象。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.next();
System.out.println("您输入的内容是:"+text);
}
五、String 类
用于处理字符串数据。它位于 java.lang 包下,因此在任何 Java 程序中都可以直接使用,不需要显式导入。主要作用如:存储文本数据、字符串操作、不可变性、字符串连接、格式化字符串、字符串分割、提取子字符串、字符串比较、转换大小写、正则表达式匹配。
(1)String():构造一个空字符串对象。
(2)String(char[] value):使用字符数组构造一个字符串对象。
(3)String(String original):构造一个与给定字符串相等的字符串对象。
(4)length():返回字符串的长度。
(5)charAt(int index):返回字符串指定索引位置的字符。
(6)indexOf():查找指定字符或字符串在字符串中第一次出现的索引。
(7)lastIndexOf():查找指定字符或字符串在字符串中最后一次出现的索引。
(8)startsWith():检查字符串是否以指定前缀开始。
(9)endsWith():检查字符串是否以指定后缀结束。
(10)substring():提取子字符串。
(11)replace():用新字符替换字符串中的旧字符。
(12)split():使用正则表达式拆分字符串为子字符串数组。
(13)equals():比较字符串内容是否相等。“==”是比较地址是否相同。
(14)equalsIgnoreCase():忽略大小写地比较字符串是否相等。
(15)isEmpty():检查字符串是否为空。
(16)toLowerCase():将字符串转换为小写。
(17)toUpperCase():将字符串转换为大写。
(18)trim():移除字符串两端的空格。
public static void main(String[] args) {
// 这里会复用字符串,他创建在字符串池中
String text1 = "测试内容";
String text2 = "测试内容";
// 这里不会复用字符串,他创建在堆中
String text3 = new String("测试内容");
String text4 = new String("测试内容");
System.out.println(text1.equals(text2) + " - " + (text1 == text2));
System.out.println(text3.equals(text4) + " - " + (text3 == text4));
}
六、StringBuilder/StringBuffer 类
StringBuffer 与 StringBuilder 类的使用方法大致相同,都是用于处理可变的字符序列,特别是在需要频繁修改字符串内容的情况下。它们允许你在字符串中添加、删除、修改字符,而不需要创建新的字符串对象,从而提高了性能和内存效率。这两个类的作用类似,但在多线程环境下有一些不同之处。区别是StringBuffer是线程安全的,而StringBuilder是单线程的,所以StringBuilder 性能相对高一点。
(1)StringBuilder(): 构造一个空的字符串构建器。
(2)StringBuilder(int capacity): 构造一个具有指定初始容量的字符串构建器。
(3)StringBuilder(CharSequence seq): 使用指定的字符序列构造一个字符串构建器。
(4)append(boolean b): 将布尔值追加到构建器。
(5)append(char c): 将字符追加到构建器。
(6)append(int i): 将整数追加到构建器。
(7)append(long l): 将长整数追加到构建器。
(8)append(float f): 将浮点数追加到构建器。
(9)ppend(double d): 将双精度浮点数追加到构建器。
(10)append(CharSequence s): 将字符序列追加到构建器。
(11)append(Object obj): 将对象的字符串表示形式追加到构建器。
(12)append(char[] str): 将字符数组的内容追加到构建器。
(13)append(char[] str, int offset, int len): 将字符数组的部分内容追加到构建器。
(14)delete(int start, int end): 删除构建器中指定范围的字符。
(15)deleteCharAt(int index): 删除构建器中指定索引处的字符。
(16)replace(int start, int end, String str): 用指定字符串替换构建器中指定范围的字符。
(17)insert(int offset, boolean b): 在指定位置插入布尔值。
(18)insert(int offset, char c): 在指定位置插入字符。
(19)insert(int offset, int i): 在指定位置插入整数。
(20)insert(int offset, long l): 在指定位置插入长整数。
(21)nsert(int offset, float f): 在指定位置插入浮点数。
(22)insert(int offset, double d): 在指定位置插入双精度浮点数。
(23)insert(int offset, CharSequence s): 在指定位置插入字符序列。
(24)nsert(int offset, Object obj): 在指定位置插入对象的字符串表示形式。
(25)everse(): 反转构建器中的字符序列。
(26)length(): 返回构建器中字符序列的长度。
(27)setLength(int newLength): 设置构建器中字符序列的新长度。
(28)capacity(): 返回构建器的当前容量。
(29)ensureCapacity(int minimumCapacity): 确保构建器的容量至少为指定值。
(30)trimToSize(): 将构建器的容量调整为字符序列的长度。
(31)charAt(int index): 返回指定索引处的字符。
(32)indexOf(String str): 返回指定字符串在构建器中首次出现的索引。
(33)lastIndexOf(String str): 返回指定字符串在构建器中最后一次出现的索引。
(34)substring(int start): 返回从指定索引开始到末尾的子字符串。
(34)substring(int start, int end): 返回从指定索引开始到指定索引结束的子字符串。
(36)toString(): 返回构建器的字符序列作为字符串。
public static void main(String[] args) {
StringBuffer text1 = new StringBuffer();
text1.append("Hello");
text1.append(123);
System.out.println(text1.toString());
StringBuilder text2 = new StringBuilder();
text2.append("Hello");
text2.append(123);
System.out.println(text2.toString());
}
七、Math 类
提供了一系列用于执行数学运算的静态方法。这些方法涵盖了各种常见的数学操作,从基本的数学运算到三角函数、指数、对数等高级数学运算。
(1)abs():返回一个数的绝对值。
(2)max():返回两个数中的较大值。
(3)min():返回两个数中的较小值。
(4)sqrt():返回一个数的平方根。
(5)cbrt():返回一个数的立方根。
(6)pow():返回一个数的指定次幂。
(7)exp():返回自然对数的底数 e 的指定次幂。
(8)log():返回一个数的自然对数(以 e 为底)。
(9)log10():返回一个数的以 10 为底的对数。
(10)三角函数:sin()、cos()、tan()、asin()、acos()、atan() 用于计算三角函数值。
(11)atan2():返回 y/x 的反正切值,可以用于计算角度。
public static void main(String[] args) {
System.out.println("请输入一个数:");
Scanner input = new Scanner(System.in);
int val = input.nextInt();
double newVal = Math.pow(2,val);
// Math.random();
System.out.println("2^"+ val + " = " + newVal);
}
八、Random 类
用于生成随机数。它提供了一些方法,可以生成不同类型的随机数,从而用于模拟随机事件、密码生成、游戏等场景。
(1)Random():使用系统时间作为种子创建随机数生成器。
(2)Random(long seed):使用指定的种子创建随机数生成器。
(3)setSeed(long seed):设置随机数生成器的种子。
(4)nextBoolean():生成一个随机的布尔值。
(5)nextInt():生成一个随机的整数。
(6)nextInt(int bound):生成一个指定范围内的随机整数。
(7)nextLong():生成一个随机的长整数。
(8)nextFloat():生成一个随机的浮点数(范围在 0.0 到 1.0 之间)。
(9)extDouble():生成一个随机的双精度浮点数(范围在 0.0 到 1.0 之间)。
(10)nextGaussian():生成一个符合正态分布的随机双精度浮点数。
public static void main(String[] args) {
Random random = new Random();
int val = random.nextInt(100);
int seed = 12134;
Random random1 = new Random(seed);
Random random2 = new Random(seed);
System.out.println( " random = " + val + ", 相同的种子结果对比:"+random1.nextInt()+"/"+random2.nextInt());
}
九、Date 类
主要作用是表示特定的日期和时间。可以使用 Date 对象来表示一个时间点,包括年、月、日、时、分、秒等信息。然而,Date 类的设计存在一些问题,导致它在多线程环境下不安全,并且对于日期和时间的计算和格式化操作相对繁琐。
由于 Date 类的局限性,Java 引入了新的日期和时间 API(java.time 包),它提供了更丰富、更灵活、更符合国际化标准的日期和时间处理能力。新的日期和时间 API 在 Java 8 中引入,包括 LocalDate、LocalTime、LocalDateTime、ZonedDateTime 等类,它们提供了更好的性能、更直观的用法以及更多的功能。
(1)Date(long date): 构造一个指定毫秒数表示的日期和时间的 Date 对象。
(2)boolean after(Date when): 检查当前日期是否在指定日期之后。
(3)boolean before(Date when): 检查当前日期是否在指定日期之前。
(4)Object clone(): 创建并返回此对象的一个副本。
(5)int compareTo(Date anotherDate): 比较两个日期,返回值为负数、零或正数,表示此日期小于、等于或大于另一个日期。
(6)boolean equals(Object obj): 检查两个日期是否相等。
(7)static Date from(Instant instant): 将 Instant 转换为 Date 对象。
(8)long getTime(): 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。
(9)void setTime(long time): 设置日期的毫秒表示。
(10)Instant toInstant(): 将 Date 转换为 Instant 对象。
(11)LocalDate toLocalDate(): 将 Date 转换为 LocalDate 对象。
(12)LocalDateTime toLocalDateTime(): 将 Date 转换为 LocalDateTime 对象。
(13)ZonedDateTime toZonedDateTime(): 将 Date 转换为 ZonedDateTime 对象。
(14)String toString(): 返回日期的字符串表示形式。
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateText = sdf.format(date);
System.out.println(dateText);
}
十、Calendar 类
用于处理日期和时间。它提供了一种方式来操作和计算日期和时间,包括获取年、月、日、时、分、秒等信息,进行日期和时间的加减操作,以及格式化日期和时间等功能。
(1)static Calendar getInstance(): 返回一个默认时区的 Calendar 实例。
(2)static Calendar getInstance(TimeZone zone): 返回指定时区的 Calendar 实例。
(3)void set(int field, int value): 设置指定字段的值,例如年、月、日等。
(4)int get(int field): 获取指定字段的值,例如年、月、日等。
(5)Date getTime(): 获取当前 Calendar 实例表示的日期和时间。
(6)void setTime(Date date): 设置 Calendar 实例的日期和时间。
(7)void add(int field, int amount): 根据指定的字段和增量进行日期和时间的加法计算。
(8)void roll(int field, boolean up): 根据指定的字段和方向(升序或降序)进行轻量级的日期和时间增量计算。
(9)void clear(): 清除 Calendar 实例的所有字段值。
(10)void clear(int field): 清除指定字段的值。
(11)boolean before(Object when): 检查当前日期是否在指定日期之前。
(12)boolean after(Object when): 检查当前日期是否在指定日期之后。
(13)boolean equals(Object obj): 检查两个 Calendar 实例是否相等。
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;//从0开始
int day = calendar.get(Calendar.DAY_OF_MONTH);
int week = calendar.get(Calendar.DAY_OF_WEEK)-1;//星期天是1
System.out.println(week);
}
十一、枚举
enum EnumName {
VALUE1,
VALUE2,
// ...
VALUEN
}