【JAVA】Java 常用类

2026-02-22 14:33:36

Java 常用类

一、内部类

在一个类内部再定义一个完整的类

「采用内部类这种技术,可以隐藏细节和内部结构,封装性更好,让程序的结构更加合理!如果类很多且都暴露在外面,那么类与类之间的调用就会十分繁琐!」

1.成员内部类(非静态内部类)

package com.demo;

// 类文件名

public class Demo {

// 成员变量

private String demoName;

// 成员方法

public void demoMethod(){

System.out.println("这个是外部类方法~");

System.out.println(demoName);

}

// 内部类

public class DemoInner{

// 内部类成员变量

private String innerDemoName;

// 构造方法

public DemoInner(){

innerDemoName = "demo inner class";

}

// 成员方法

public void demoMethod(){

System.out.println("这个是内部类方法");

System.out.println(innerDemoName);

}

}

// 主方法

public static void main(String[] args){

Demo demo = new Demo();

demo.demoMethod(); // 调用外部类方法

// 这个类是内部类,已经不是独立的类了,因此不能像外部类一样直接创建!

Demo.DemoInner demoInner = demo.new DemoInner(); // 同成员方法/变量 只是加了个前缀

demoInner.demoMethod(); // 调用内部类方法

}

}

示例

执行结果

2.局部内部类

package com.demo;

// 类文件名

public class Demo {

// 成员变量

private String demoName;

public void disDemoMethod(){

// 局部内部类

class InnerClass{

public void print(){

System.out.println("这是一个局部内部类方法");

}

}

InnerClass innerClass = new InnerClass();

innerClass.print();

}

// 主方法

public static void main(String[] args){

Demo demo = new Demo();

demo.disDemoMethod(); // 调用disDemoMethod

}

}

局部内部类 示例

执行结果

3.匿名内部类

没有名字的内部类 「主要应用与接口的实现!」

Tips:「它的实现类不需要去单独创建一个文件去写它的实现」

package com.demo;

public interface DemoInterface {

public void demo();

public void demoD(int x, int y);

}

接口

package com.demo;

// 实现类

public class DemoModel implements DemoInterface {

@Override

public void demo() {

System.out.println("test");

}

@Override

public void demoD(int x, int y){

System.out.println(x+y);

}

}

实现类

package com.demo;

// 匿名内部类

public class DemoAi implements DemoInterface {

@Override

public void demo(){

System.out.println("moon");

}

@Override

public void demoD(int x, int y){

System.out.println(5*6);

}

}

匿名内部类

// 主方法

public static void main(String[] args){

DemoModel demoModel = new DemoModel();

demoModel.demo();

demoModel.demoD(1, 2);

DemoAi demoAi = new DemoAi();

demoAi.demo();

demoAi.demoD(8,6);

}

执行结果

String类

通过String可以直接定义一个变量,这个变量可以直接就是字符串 <在包 java.lang.String>

1.构造方法

package com.str;

public class DemoString {

// 字符串构造

public void strBuild(){

// 直接定义字符串

String str1 = "this is strMethod~";

System.out.println("直接定义字符串 输出str1 = " + str1);

// 通过new String 对象

String str2 = new String("new String");

System.out.println("通过new String 对象 输出str2 = " + str2);

// 通过字符数组进行构造

char[] chars = {'a', 'b', 'c'};

String str3 = new String(chars);

System.out.println("通过字符数组进行构造 输出str3 = " + str3);

};

public static void main(String[] args){

DemoString demoString = new DemoString();

demoString.strBuild();

}

}

DemoString.java

执行结果

2. 常用方法

package com.str;

public class DemoString {

// 字符串方法

public void strMethod(){

String str = " My name is Phoenix~Phoenix~Phoenix";

System.out.println("原字符串内容:"+ str);

System.out.println("字符串的长度=" + str.length());

}

public static void main(String[] args){

DemoString demoString = new DemoString();

demoString.strMethod();

}

}

执行结果:

// 字符串替换

System.out.println("将所有“Phoenix”字符串替换为“Young”, 替换后内容:" + str.replace("Phoenix", "Young")); // 替换字符串中的字符/字符串

System.out.println("将所有“Phoenix”字符串替换为“Young”, 替换后内容:" + str.replaceAll("Phoenix", "Young")); //替换字符串中的字符串

System.out.println("将首个“Phoenix”字符串替换为“Young”, 替换后内容:" + str.replaceFirst("Phoenix", "Young")); //替换字符串中的首个字符串

执行结果:

// 字符串查找

System.out.println("输入位置9,查找字符串的单个字符:" + str.charAt(9) );

System.out.println("返回字符e第一次出现在字符串str中的位置下标:" + str.indexOf("e"));

System.out.println("从8位置查找字符e第一次出现在字符串str中的位置下标<-1表示未找到>:" + str.indexOf("e", 8));

System.out.println("从后向前查找字符e第一次出现在字符串str中的位置下标<-1表示未找到>:" + str.lastIndexOf("e", 8));

执行结果:

// 字符串截取

System.out.println("从下标3开始截取到下标13字符串:" + str.substring(3, 13));

执行结果:

// 字符串拆分

String[] spl = str.split(" ", 1); // limit 限制拆分几次, 特殊字符(| + * . ,)作为分割符可能无法正确切分, 需要加上转义符号 \\

for(String s: spl){

System.out.println("拆分后的单个字符:" + s);

}

执行结果:

// 转化 <数字转字符串>

// String a = 12.236; // java: 不兼容的类型: double无法转换为java.lang.String

String aa = String.valueOf(12.863);

System.out.println("数字转字符串:" + aa);

int b = Integer.valueOf("8886");

System.out.println("数字字符串转化数字:" + b);

执行结果:

// 字母转换 // 只转化字符串中的字母,汉字不影响 // 非原字符串修改,产生新的字符串

System.out.println("小写字母转大写:" + str.toUpperCase());

System.out.println("大写字母转小写:" + str.toLowerCase());

执行结果:

// 数组转字符串

char[] ite = {'i', 's', 'b', 'a', 'b', 'y'};

System.out.println("数组转字符串:" + new String(ite));

执行结果:

// 格式化字符串

String dateday = String.format("%d-%d-%d %d:%d:%d", 2023,5,8,15,21,31);

System.out.println("格式化输出" + dateday);

执行结果:

// 去除字符串前后空格

System.out.println("去除字符串前后空格:"+ str.trim());

执行结果:

// 字符串比较

String s1 = "hello";

String s2 = "Hello";

String s3 = "hello";

System.out.println("比较字符串的地址:" + (s1 == s2.toLowerCase())); // 对于引用类型,==比较的是地址; 对于基本类型变量,比较的是存储的值

System.out.println("比较字符串的地址:" + (s1 == s3));

System.out.println("直接比较大小关系:" + s1.compareTo(s2));

System.out.println("忽略大小写进行比较:" + s1.compareToIgnoreCase(s2));

System.out.println("s2转换为小写,比较是否相同:" + s1.equals(s2.toLowerCase()));

System.out.println("比较是否相同:" + s1.equals(s2));

System.out.println("忽略大小写进行比较是否相同:" + s1.equalsIgnoreCase(s2));

执行结果:

Date 及 Calendar 类

Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年

1、构造方法

Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。

Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时

package com.common;

import java.util.Date;

public class DemoDate {

public void DateBulid(){

Date cst = new Date();

System.out.println("系统当前的时间:" + cst);

Date gmt = new Date(0); // 60000 毫秒是一分钟

System.out.println("距离 GMT 指定毫秒数的时间:" + gmt); //Thu Jan 01 00:00:00 CST 1970

}

public static void main(String[] args) {

DemoDate demoDate = new DemoDate();

demoDate.DateBulid();

}

}

DemoDate.java

执行结果:

2、java.util.Date 常用方法

package com.common;

import java.util.Date;

public class DemoDate {

public void DateBulid(){

Date cst = new Date();

System.out.println("系统当前的时间:" + cst);

Date gmt = new Date(cst.getTime()); // 标准基准时间 60000 毫秒是一分钟

System.out.println("距离 GMT 指定毫秒数的时间:" + gmt); //Thu Jan 01 00:00:00 CST 1970

}

public void DateMethod(){

Date d = new Date();

Date dd = new Date(d.getTime()+60000);

System.out.println("系统当前时间:"+d);

System.out.println("系统当期时间+1min:"+dd);

System.out.println("浅拷贝:" + dd.clone());

System.out.println("获取时间毫秒数:" + d.getTime());

System.out.println("比较日期大小:" + d.compareTo(dd)); //1:括号内日期比前面日期小 -1:括号内日期比前面日期大 0:两日期相等

System.out.println("判断时间号内日期是否在比较日期之后:" + d.after(dd));

System.out.println("判断时间号内日期是否在比较日期之前:" + d.before(dd));

System.out.println("将Date对象转换为Instant对象<显示标准时间,时区相差8>:" + d.toInstant());

System.out.println("将Instant对象转换为Date对象:" + dd.from(d.toInstant()));

}

public static void main(String[] args) {

DemoDate demoDate = new DemoDate();

demoDate.DateMethod(); // 常用方法

System.out.println("");

demoDate.DateBulid(); // 构造方法

}

}

DemoDate.java

执行结果

java.util.Calendar

3、java.util.Calendar 常用方法

package com.common;

import java.util.Calendar;

import java.util.Date;

public class DemoDate {

public void DateUtilMethod(){

Date d = new Date();

Date dd = new Date(d.getTime()+60000);

System.out.println("系统当前时间:"+d);

System.out.println("系统当期时间+1min:"+dd);

System.out.println("浅拷贝:" + dd.clone());

System.out.println("获取时间毫秒数:" + d.getTime());

System.out.println("比较日期大小:" + d.compareTo(dd)); //1:括号内日期比前面日期小 -1:括号内日期比前面日期大 0:两日期相等

System.out.println("判断时间号内日期是否在比较日期之后:" + d.after(dd));

System.out.println("判断时间号内日期是否在比较日期之前:" + d.before(dd));

System.out.println("将Date对象转换为Instant对象<显示标准时间,时区相差8>:" + d.toInstant());

System.out.println("将Instant对象转换为Date对象:" + dd.from(d.toInstant()));

}

public void DateCalendarMethod(){

Calendar instance = Calendar.getInstance(); // 默认toString

System.out.println("默认:"+ instance);

System.out.println("返回Date类:" + instance.getTime());

System.out.println("传入Calendar类定义的常量<日>,返回对应信息:" + instance.get(Calendar.DAY_OF_MONTH));

}

public static void main(String[] args) {

DemoDate demoDate = new DemoDate();

demoDate.DateCalendarMethod(); // java.util.Calendar常用方法

// demoDate.DateUtilMethod(); // java.util.Date常用方法

System.out.println("");

demoDate.DateBulid(); // 构造方法

}

}

DemoDate.java

执行结果

4、SimpleDateFormat 日期格式化

y 年; M 月; d 日; H 时; m 分; s 秒

构造方法

无参构造方法public SimpleDateFormate():使用默认模式和日期格式

带参构造方法public SimpleDateFormate(String pattern):使用给定的模式和默认的日期格式

常用方法

package com.common;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

public class DemoDate {

public void DateFormatMethod(){

String d = "2023年05月09日 09:15:31";

Date datea = new Date();

// 格式化

SimpleDateFormat simpleDateFormat = new SimpleDateFormat();

SimpleDateFormat simpleDateFormatPattern = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

System.out.println(simpleDateFormat.format(datea));

System.out.println(simpleDateFormatPattern.format(datea));

// 从给定字符串的开始解析文本以生成日期

try {

datea = simpleDateFormatPattern.parse(d);

} catch (ParseException e) {

e.printStackTrace();

}

System.out.println(datea);

}

public static void main(String[] args) {

DemoDate demoDate = new DemoDate();

demoDate.DateFormatMethod(); // java.sql.Date常用方法

System.out.println("");

}

}

DemoDate.java

执行结果

BigDecimal类

BigInteger 和 BigDecimal 都能实现大数字的运算,不同的是 BigDecimal 加入了小数的概念

构造方法

BigDecimal(double val):实例化时将双精度型转换为 BigDecimal 类型。

BigDecimal(String val):实例化时将字符串形式转换为 BigDecimal 类型。

常用方法

package com.common;

import java.math.BigDecimal;

import java.util.Scanner;

public class DemoDecimal {

public void DecMethod(){

// 扫描输入文本

// Scanner scanner = new Scanner(System.in);

// System.out.println("请输入数字:");

// // 保存用户输入的数字

// double num = scanner.nextDouble();

// // 使用输入的数字创建BigDecimal对象

// BigDecimal bigDecimal = new BigDecimal(num);

// 创建BigDecimal对象

BigDecimal db = new BigDecimal(999.99);

// 加法

// System.out.println(bigDecimal.add(new BigDecimal(99.543)));

System.out.println("加法:" + db.add(new BigDecimal(5)));

System.out.println("减法:" + db.subtract(new BigDecimal(99.5)));

System.out.println("乘法:" + db.multiply(new BigDecimal(0.5)));

System.out.println("除法(保留2位):" + db.divide(new BigDecimal(5), 2, BigDecimal.ROUND_CEILING));

System.out.println("除法(保留6位):" + db.divide(new BigDecimal(5), 6, BigDecimal.ROUND_CEILING));

}

public static void main(String[] args) {

DemoDecimal demoDecimal = new DemoDecimal();

demoDecimal.DecMethod();

}

}

DemoDecimal.java

执行结果

Math类

package com.common;

import java.math.BigDecimal;

import java.util.Scanner;

public class DemoDecimal {

public void MathMethod(){

System.out.println("圆周率 π ="+ Math.PI);

System.out.println("自然常数 E = "+ Math.E);

System.out.println("----------------------- 分割线 -----------------------");

System.out.println("-19 绝对值:"+ Math.abs(-19));

System.out.println("12.368 向上取整:"+ Math.ceil(12.368));

System.out.println("12.348 向下取整:"+ Math.floor(12.348));

System.out.println("----------------------- 分割线 -----------------------");

System.out.println("(5, 8)最大值:" + Math.max(5, 8));

System.out.println("(5, 8, 7)最大值:" + Math.max(5, Math.max(8, 7)));

System.out.println("(5, 8)最小值:" + Math.min(5, 8));

System.out.println("2的8次幂:" + Math.pow(2, 8));

System.out.println("正平方根:" + Math.sqrt(5));

System.out.println("----------------------- 分割线 -----------------------");

System.out.println("随机数:" + Math.random()); // [0.0,1.0)

System.out.println("0-9区间内的随机数:" + ((int) (Math.random()*9)));

System.out.println("四舍五入:" + Math.round(12.356f));

System.out.println("四舍五入:" + Math.round(12.356d));

System.out.println("----------------------- 分割线 -----------------------");

}

public static void main(String[] args) {

DemoDecimal demoDecimal = new DemoDecimal();

demoDecimal.MathMethod();

}

}

DemoDecimal.java

执行结果

System类

1. 静态成员变量

package com.common;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

public class DemoSys {

public void sysMethod(){

// 标准输出流

System.out.println("标准输出流");

// 标准输入流

System.out.println("请输入字符,并按Entry结束:");

int s;

// read() 方法是 InputStream 类拥有的方法

// try {

// s = System.in.read();

// while (s != '\r'){ // 判断是否为回车

// System.out.print((char) s);

// s = System.in.read(); // 读入一个字符

// }

// }catch (IOException io){

// System.out.println("异常:"+ io);

// }finally {

// System.err.println();

// }

// 把 System.in 声明为 InputStreamReader 类型的实例

try {

InputStreamReader in = new InputStreamReader(System.in, "GB2312");

s = in.read();

while(s != '\r') {

System.out.print((char) s);

s = in.read();

}

}catch (Exception e) {

System.out.println(e);

}

}

public static void main(String[] args) {

DemoSys demoSys = new DemoSys();

demoSys.sysMethod();

}

}

DemoSys.java

执行结果

2.常用方法

getRuntime() 返回当前应用程序的运行环境对象。exec(String command) 根据指定的路径执行对应的可执行文件。freeMemory() 返回 Java 虚拟机中的空闲内存量。。 以字节为单位maxMemory() 返回 Java 虚拟机试图使用的最大内存量。totalMemory() 返回 Java 虚拟机中的内存总量

参考地址:https://blog.csdn.net/m0_58761900/article/details/125014074

字符串格式化说明符

说明符适用于输出

%a

浮点数 (除了BigDecimal)

浮点数的十六进制输出

%b

任何类型

如果为非空则为“true”,为空则为“false”

%c

字符

Unicode字符

%d

证书(包括byte, short, int, long, bigint)

十进制整数

%e

浮点数

科学计数的十进制数

%f

浮点数

十进制数

%g

浮点数

十进制数,根据值和精度可能以科学计数法显示

%h

任何类型

通过hashCode()方法输出的16进制数

%n

平台相关的换行符

%o

整数(包括byte, short, int, long, bigint)

八进制数

%s

任何类型

字符串

%t

日期/时间 (包含long, Calendar, Date 和TemporalAccessor)

%t是日期/时间转换的前缀。后面还需要跟其他的标识,请参考下面的日期/时间转换。

%x

整数(包含byte, short, int, long, bigint)

十六进制字符串