【JAVA】Java 常用类
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(); } }
执行结果
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(); } }
执行结果:
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(); // 构造方法 } }
执行结果
java.util.Calendar <Calendar是一个抽象类不能像Date类直接通过new创建。通过内部的getInstance方法创建>
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(); // 构造方法 } }
执行结果
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(""); } }
执行结果
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(); } }
执行结果
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(); } }
执行结果
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(); } }
执行结果
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) | 十六进制字符串 |
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------