Java常用类(完整版)
其他类
Object类
超类、基类,所有类的直接或间接父类,位于继承树的最高层
任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类
Object类中所定义的方法,是所有对象都具备的方法
Object类型可以存储任何对象:
作为参数,可接受任何对象
作为返回值,可接受任何对象
public class Student {private String name;private int age;public Student() {}public Student(String name,int age){super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name = " + name + " , age = " + age + "]";}@Overridepublic boolean equals(Object obj) {// 1. 判断俩个对象是否是同一个引用if (this==obj){return true;}// 2. 判断obj是否为nullif (obj == null){return false;}// 3. 判断是否是同一个类型if (obj instanceof Student){// 4. 强制类型转换Student s = (Student) obj;// 5. 比较属性if (this.name.equals(s.getName()) && this.age==s.getAge()){return true;}}return false;}
}// 测试类
public class TestStudent {public static void main(String[] args) {Student s1 = new Student("aaa",25);Student s2 = new Student("bbb",35);}
}
getClass()方法
语法:public final Class<?> getClass(){}
返回引用中存储的实际对象类型
应用:通常用于判断俩个引用中实际存储对象类型是否一致
// getClass方法// 判断s1和s2是不是同一个类型Class class1 = s1.getClass();Class class2 = s2.getClass();if (class1 == class2){System.out.println("s1和s2属于同一个类型");}else {System.out.println("s1和s2不属于同一个类型");}System.out.println("----------------------");//运行结果:// s1和s2属于同一个类型
hashCode()方法
语法:public int hashCode(){}
返回该对象的哈希码值
哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
一般情况下相同对象返回相同哈希码值
// hashCode方法System.out.println(s1.hashCode()); // 460141958System.out.println(s2.hashCode()); // 1163157884Student s3 = s1;System.out.println(s3.hashCode()); // 460141958System.out.println("----------------------");
toString()方法
语法:public String toString(){}
返回该对象的字符串表示(表现形式)
可以根据程序需要覆盖该方法,如:展示对象各个属性值(重写方法)
// toString方法System.out.println(s1.toString());System.out.println(s2.toString());System.out.println("----------------------");运行结果:Student [name = aaa , age = 25]Student [name = bbb , age = 35]
equals()方法
语法:public boolean equals(Object obj){}
默认实现为(this == obj),比较俩个对象地址是否相同
可进行覆盖(重写),比较俩个对象的内容是否相同
// equals方法System.out.println(s1.equals(s2)); // falseStudent s4 = new Student("小明",18);Student s5 = new Student("小明",18);System.out.println(s4.equals(s5)); // true 重写方法后运行结果:falsetrue
equals()方法覆盖步骤1. 比较俩个引用是否指向同一个对象2. 判断obj是否为null3. 判断俩个引用指向的实际对象类型是否一致4. 强制类型转换5. 依次比较各个属性值是否相同
finalize()方法
当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列
垃圾对象:没有有效引用指向此对象,为垃圾对象
垃圾回收:由GC销毁垃圾对象,释放数据存储空间
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
手动回收机制:使用 System.gc(); 通知JVM执行垃圾回收
完整代码
public class Student {private String name;private int age;public Student() {}public Student(String name,int age){super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name = " + name + " , age = " + age + "]";}@Overridepublic boolean equals(Object obj) {// 1. 判断俩个对象是否是同一个引用if (this==obj){return true;}// 2. 判断obj是否为nullif (obj == null){return false;}// 3. 判断是否是同一个类型if (obj instanceof Student){// 4. 强制类型转换Student s = (Student) obj;// 5. 比较属性if (this.name.equals(s.getName()) && this.age==s.getAge()){return true;}}return false;}
}// 测试类public class TestStudent {public static void main(String[] args) {Student s1 = new Student("aaa",25);Student s2 = new Student("bbb",35);// getClass方法// 判断s1和s2是不是同一个类型Class class1 = s1.getClass();Class class2 = s2.getClass();if (class1 == class2){System.out.println("s1和s2属于同一个类型");}else {System.out.println("s1和s2不属于同一个类型");}System.out.println("----------------------");//运行结果:// s1和s2属于同一个类型// hashCode方法System.out.println(s1.hashCode()); // 460141958System.out.println(s2.hashCode()); // 1163157884Student s3 = s1;System.out.println(s3.hashCode()); // 460141958System.out.println("----------------------");// toString方法System.out.println(s1.toString());System.out.println(s2.toString());System.out.println("----------------------");// equals方法System.out.println(s1.equals(s2)); // falseStudent s4 = new Student("小明",18);Student s5 = new Student("小明",18);System.out.println(s4.equals(s5)); // true 重写方法后}
}
包装类
什么是包装类
Java的基本数据类型(如int、char、boolean等)是非对象的,不能直接参与面向对象的操作,也不能直接调用方法。为了解决这个问题,Java提供了对应的包装类。
包装类就是:基本数据类型所对应的引用数据类型
Object 可统一所有数据,包装类的默认值是 null
包装类对应
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
int | Integer |
char | Character |
类型转换与装箱、拆箱
-
8种包装类提供不同类型间的转换方式:
- Number父类中提供的6个共性方法
- parseXXX ( )静态方法
- valueOf ( )静态方法
-
注意:需要保证类型兼容,否则抛出 NumberFromatException 异常
public class Demo01 {public static void main(String[] args) {// int num = 10;// 类型转换: 装箱:基本类型转成引用类型的过程// 基本类型int num1 = 18;// 使用Integer类创建对象Integer integer1 = new Integer(num1);Integer integer2 = Integer.valueOf(num1);System.out.println("装箱");System.out.println(integer1);System.out.println(integer2);// 类型转型: 拆箱:引用类型转成基本类型Integer integer3 = new Integer(100);int num2 = integer3.intValue();System.out.println("拆箱");System.out.println(num2);// 在JDK1.5之后,Java提供了自动装箱和自动拆箱int age = 30 ;// 自动装箱Integer integer4 = age;System.out.println("自动装箱");System.out.println(integer4);// 自动拆箱int age2 = integer4;System.out.println("自动拆箱");System.out.println(age2);System.out.println("=============基本类型和字符串之间转换==============");// 基本类型和字符串之间转换// 1. 基本类型转换成字符串int n1 = 255;int n2 = 15;// 1-1 使用 + 相连String s1 = n1+"";String s2 = n2+"";// 1-2 使用Integer中的 toString()方法String s3 = Integer.toString(n1,16);String s4 = Integer.toString(n2,16);System.out.println(s1); // 255System.out.println(s2); // 15System.out.println(s3); // ffSystem.out.println(s4); // f// 2. 字符串转基本类型String str = "150";// 使用 Integer.parseXXX();int n3 = Integer.parseInt(str);System.out.println(n3); // 150// boolean 字符串形式转成基本形式。 "true" --> true 非true --> falseString str2 = "true";String str3 = "abcd";boolean b1 = Boolean.parseBoolean(str2);boolean b2 = Boolean.parseBoolean(str3);System.out.println(b1); // trueSystem.out.println(b2); // false}
}
整数缓冲区
Java预先创建了256个常用的整数包装类型对象
在实际应用中,对已创建的对象进行复用
// 整数缓冲区public static void main(String[] args) {Integer integer1 = new Integer(100);Integer integer2 = new Integer(100);System.out.println(integer1==integer2); // false// 自动装箱 Integer.valueOfInteger integer3 = 100;Integer integer4 = 100;System.out.println(integer3==integer4); // trueInteger integer5 = 200;Integer integer6 = 200;System.out.println(integer5==integer6); // false}
integer3 与 integer4 相等是因为:在整数缓冲区范围内(-128~127)
integer5 与 integer6 不相等是因为:范围(200)已经超出缓冲区范围,变为 使用new 关键字
String 类
定义
字符串是常量。创建之后不可改变
字符串字面值存储在字符串池中,可以共享
String s = “Hello” ; // 产生一个对象,字符串池中存储
String s = new String (“Hello”) ; // 产生俩个对象,堆、池各存储一个。
如图所示
在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代
在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代
在JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace)String name = "hello"; // "hello" 常量存储在字符串池中
name = "zhangsan"; // "zhangsan" 赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
String name2 = "zhangsan";
System.out.println(name==name2); // true// 演示字符串的另一种创建方式, new String();
String str = new String("java");
String str2 = new String("java"); // 在堆的空间新开辟了str2,虽然指向的是同一个数据,但是地址是不一样的
System.out.println(str==str2); // false 使用 == 比较的是地址
System.out.println(str.equals(str2)); // true 使用 equals 比较的是数据
常用方法
-
public int length () ; 返回字符串的长度
-
public char charAt (int index) ; 根据下标获取字符
-
public boolean contains (String str) ; 判断当前字符串中是否包含str
// 字符串方法的使用// 1. length(); 返回字符串的长度 注意:这里空格也算一个字符串长度// 2. charAt(int index); 返回某个位置的字符// 3. contains(String str); 判断是否包含某个子字符串String s = "Java是世界上最好的编程语言,Java就是最简单的,Java最好";System.out.println(s.length()); // 15System.out.println(s.charAt(5)); // 世System.out.println(s.charAt(s.length()-1)); // 言System.out.println(s.contains("java")); // falseSystem.out.println(s.contains("Java")); // trueSystem.out.println(s.contains("JavaScript")); // false
-
public char[ ] toCharArray ( ) ; 将字符串转换成数组
-
public int indexOf (String str) ; 查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
-
public int lastIndexOf (String str) ; 查找字符串在当前字符串中最后一次出现的下标索引
// 4. toCharArray(); 返回字符串对应的数组// 5. indexOf(); 返回字符串首次出现的位置,如果未找到,返回-1。后面如果+数字表示:从第几个位置开始查找// 6. lastIndexOf(); 返回字符串最后一次出现的位置System.out.println(s.toCharArray()); // Java是世界上最好的编程语言,Java就是最简单的,Java最好System.out.println(Arrays.toString(s.toCharArray())); // [J, a, v, a, 是, 世, 界, 上, 最, 好, 的, 编, 程, 语, 言, ,, J, a, v, a, 就, 是, 最, 简, 单, 的, ,, J, a, v, a, 最, 好]System.out.println(s.indexOf("Java")); // 0System.out.println(s.indexOf("Java",4)); // 16System.out.println(s.lastIndexOf("Java")); // 27
-
public String trim () ; 去掉字符串前后的空格
-
public String toUpperCase () ; 将小写转为大写
-
public boolean endWith (String str) ; 判断字符串是否以str结尾
// 7. trim(); 去掉字符串前后的空格// 8. toUpperCase(); 把小写转为大写 toLowerCase(); 把大写转为小写// 9. endsWith(str); 判断是否以str结尾 startsWith(str); 判断是否以str开始String s2 = " Hello World ! ";System.out.println(s2.trim()); // Hello World !System.out.println(s2.toUpperCase()); // HELLO WORLD !System.out.println(s2.toLowerCase()); // hello world !String s3 = "hello.java";System.out.println(s3.endsWith("va")); // trueSystem.out.println(s3.startsWith("he")); // trueSystem.out.println(s3.startsWith("ll")); // false
-
public String replace (char oldChar , char newChar) ; 将旧字符串替换成新字符串
-
public String[ ] split (String str) ; 根据str做拆分
String s4 = "java is the best language java";String say = "java is the best programing language,java is good.";System.out.println(s4.replace("java","php")); // php is the best language phpString[] arr = say.split("[ ,.]+");System.out.println(arr.length); // 9for (String string:arr) {System.out.println(string);} /* java is the best programing language java is good*/
-
补充
补充俩个方法 equals、compareTo(); 比较大小String str3 = "hello";String str4 = "HELLO";System.out.println(str3.equals(str4)); // falseSystem.out.println(str3.equalsIgnoreCase(str4)); // trueString a1 = "abc"; // 97 比较ASCII码String a2 = "ayzawe"; // 120System.out.println(a1.compareTo(a2)); // -23 比较大小String a3 = "abc"; // 3String a4 = "abcdefg"; // 7System.out.println(a3.compareTo(a4)); // -4 比较长度 3-7
测试
已知 String str = “this is a text”;
- 将 str 中的单词单独获取出来
- 将 str 中的text替换为 practice
- 在 text 前面插入一个 easy
- 将每个单词的首字母改为大写
public class Test {public static void main(String[] args) {String str = "this is a text";// 1. 将 str 中的单词单独获取出来String[] arr =str.split(" ");// System.out.println(arr);for (String s:arr) {System.out.println(s);}System.out.println("----------------");// 2. 将 str 中的text替换为 practiceString str2 = str.replace("text","practice");System.out.println(str2);System.out.println("----------------");// 3. 在 text 前面插入一个 easyString str3 = str.replace("text","easy text");System.out.println(str3);System.out.println("----------------");// 4. 将每个单词的首字母改为大写for (int i = 0; i < arr.length; i++) {char first = arr[i].charAt(0);// 把第一个字符转为大写char upperfirst = Character.toUpperCase(first);//System.out.println(upperfirst); // 把所有首字母大写 遍历String str4 = upperfirst + arr[i].substring(1);System.out.println(str4);}}
}运行结果:
1.
this
is
a
text
2.
this is a practice
3.
this is a easy text
4.
This
Is
A
Text
可变字符串
StringBuffer: 可变长字符串,JDK 1.0 提供,运行效率慢、线程安全
StringBuilder: 可变长字符串,JDK 5.0 提供,运行效率快、线程不安全
StringBuffer 和 StringBuilder 的使用 与String的区别:
1. 效率比String高
1. 效率比String高
StringBuffer sb1 = new StringBuffer();StringBuilder sb2 = new StringBuilder();// 1. append(); 追加sb1.append("java ");System.out.println(sb1.toString());sb1.append("javascript ");System.out.println(sb1.toString());sb1.append("c++ ");System.out.println(sb1.toString());System.out.println("---------------------");// 2. insert(); 添加sb1.insert(0,"我要学");sb1.insert(sb1.length(),"做一个高级程序员");System.out.println(sb1.toString());System.out.println("---------------------");// 3. replace(); 替换sb1.replace(0,3,"hello ");System.out.println(sb1.toString());System.out.println("---------------------");// 4. delete(); 删除sb1.delete(0,3);System.out.println(sb1.toString());System.out.println("--------------------------");// 清空sb1.delete(0,sb1.length());System.out.println(sb1.toString());System.out.println("------------------------------==");运行结果:
java
java javascript
java javascript c++
---------------------
我要学java javascript c++ 做一个高级程序员
---------------------
hello java javascript c++ 做一个高级程序员
---------------------
lo java javascript c++ 做一个高级程序员
--------------------------------------------------------==
package OOP.Class_6;public class Demo03 {public static void main(String[] args) {double num1 = 0.9;double num2 = 0.8;System.out.println(num1 - num2);//0.09999999999999998double result = (1.4 - 0.5) / 0.9;System.out.println(result);//0.9999999999999999}
}
/*
0.09999999999999998
0.9999999999999999
*/
BigDecimal类
位置: Java.math 包中
作用:精确计算浮点数
创建方法:BigDecimal bd = new BigDecimal (“1.0”);
方法:
BigDecimal add(BigDecimal bd); 加
BigDecimal subtract(BigDecimal bd); 减
BigDecimal multiply(BigDecimal bd); 乘
BigDecimal divide(BigDecimal bd); 除
除法:divide(BigDecimal bd,int scal,RoundingMode mode)
参数:scal: 指定精确到小数点后几位
mode: 指定小数部分的取舍模式,通常采用四舍五入的模式
取值为BigDecimal.ROUND_HALF_UP
下面是代码演示:
public static void main(String[] args) {// 思考:double d1 = 1.0;double d2 = 0.9;System.out.println(d1-d2); // 0.09999999999999998double result = (1.4-0.5)/0.9;System.out.println(result); // 0.9999999999999999
// double res = (d1*d2);
// System.out.println(res); // 0.9// 这些结果都丢失了精度// 在很多实际应用中需要精确计算,而double是近似值存储,不在符合要求,需要借助 BigDecimal 进行精确计算// BigDecimal 大的浮点数精确计算BigDecimal bd1 = new BigDecimal("1.0");BigDecimal bd2 = new BigDecimal("0.9");// 减法 subtractBigDecimal r1 = bd1.subtract(bd2);System.out.println(r1); // 0.1// 加法 addBigDecimal r2 = bd1.add(bd2);System.out.println(r2); // 1.9// 乘法 multiplyBigDecimal r3 = bd1.multiply(bd2);System.out.println(r3); // 0.90// 除法 divideBigDecimal r4 = new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));System.out.println(r4); // 1// BigDecimal r5 = new BigDecimal("10").divide(new BigDecimal("3"));// System.out.println(r5); // ArithmeticExceptionBigDecimal r5 = new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_UP);System.out.println(r5); // 6.67 // " 2,BigDecimal.ROUND_UP " 保留俩位小数 向上取}
Date类
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法取代
时间单位:
- 1秒=1000毫秒
- 1毫秒=1000微秒
- 1微秒=1000纳秒
创建一个今天的此时此刻
// 今天 此时此刻(这是我当时打代码的时间)Date date1 = new Date();System.out.println(date1.toString()); // Thu Dec 12 15:06:35 CST 2024System.out.println(date1.toLocaleString()); // 2024-12-12 15:07:14 toLocaleString 已过时
昨天
// 昨天 此时此刻(今天的时间-一天的毫秒数)Date date2 = new Date(date1.getTime()-(60*60*24*1000)); // (60秒 * 60分 * 24时 * 1000毫秒)System.out.println(date2.toLocaleString()); // 2024-12-11 15:09:31
方法:
after与before
boolean b1 = date1.after(date2);boolean b2 = date1.before(date2);System.out.println(b1); // trueSystem.out.println(b2); // false
比较 compareTo();
int d = date1.compareTo(date2);int d1 = date1.compareTo(date1);int d2= date2.compareTo(date1);System.out.println(d); // 1 date1 > date2System.out.println(d1); // 0 date1 = date2System.out.println(d2); // -1 date1 < date2
是否相等 equals
boolean b3 = date1.equals(date2);System.out.println(b3); // false
Calendar类
Calendar提供了获取或设置各种日历字段的方法
构造方法:
protected Calendar(); 由于修饰符是protected ,所以无法直接创建该对象
其他方法:
方法名 | 说明 |
---|---|
static Calendar getlnstance() | 使用默认时区和区域获取日历 |
void set (int year,int month,int date,int hourofday,int minute,int secong) | 设置日历的年,月,日,时,分,秒 |
int get(int field) | 返回给定日历字段的值,字段比如年月日等 |
void setTime(Date date) | 用给定的Date设置此日历的时间。Date-Calendar |
Date getTime() | 返回一个Date表示此日历的时间。Calendar-Date |
void add(int field,int amount) | 按照日历的规则,给指定字段添加或减少时间量 |
long getTimeInMillies() | 毫秒为单位返回该日历的时间值 |
// 1. 创建Calendar对象Calendar calendar = Calendar.getInstance();System.out.println(calendar.getTime().toLocaleString()); // 2024-12-12 15:35:53System.out.println(calendar.getTimeInMillis()); // 1733988983773 1970年距今毫秒数
获取时间信息
// 2. 获取时间信息// 获取 年int year = calendar.get(Calendar.YEAR); // 也可以直接输 1System.out.println(year); // 2024// 获取 月 0-11 相当于 1-12int month = calendar.get(Calendar.MONTH); // 也可以直接输 2System.out.println(month); // 11 相当于12月// 获取 日int date = calendar.get(Calendar.DAY_OF_MONTH); // DATE 或 5System.out.println(date); // 12// 获取 时int hour = calendar.get(Calendar.HOUR_OF_DAY); // HOUR_OF_DAY 是24小时制,HOUR 是12小时制System.out.println(hour); // 15// 获取 分int minute = calendar.get(Calendar.MINUTE);System.out.println(minute); // 44// 获取 秒int secod = calendar.get(Calendar.SECOND);System.out.println(secod); // 35System.out.println(year+"年"+(month+1)+"月"+date+"日 "+hour+"时"+minute+"分"+secod+"秒"); // 2024年12月12日 15时51分46秒
修改时间
Calendar calendar2 = Calendar.getInstance();calendar2.set(Calendar.DAY_OF_MONTH,11);System.out.println(calendar2.getTime().toLocaleString()); // 2024-12-11 15:53:53
add方法修改时间
calendar2.add(Calendar.HOUR,-1);System.out.println(calendar2.getTime().toLocaleString()); // 2024-12-11 14:55:17
补充方法
calendar2.add(Calendar.MONTH,1);int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);System.out.println(max); // 31System.out.println(min); // 1
完整代码:
package com.object.Calendar;import java.util.Calendar;public class Demo01 {public static void main(String[] args) {// 1. 创建Calendar对象Calendar calendar = Calendar.getInstance();System.out.println(calendar.getTime().toLocaleString()); // 2024-12-12 15:35:53System.out.println(calendar.getTimeInMillis()); // 1733988983773 1970年距今毫秒数// 2. 获取时间信息// 获取 年int year = calendar.get(Calendar.YEAR); // 也可以直接输 1System.out.println(year); // 2024// 获取 月 0-11 相当于 1-12int month = calendar.get(Calendar.MONTH); // 也可以直接输 2System.out.println(month); // 11 相当于12月// 获取 日int date = calendar.get(Calendar.DAY_OF_MONTH); // DATE 或 5System.out.println(date); // 12// 获取 时int hour = calendar.get(Calendar.HOUR_OF_DAY); // HOUR_OF_DAY 是24小时制,HOUR 是12小时制System.out.println(hour); // 15// 获取 分int minute = calendar.get(Calendar.MINUTE);System.out.println(minute); // 44// 获取 秒int secod = calendar.get(Calendar.SECOND);System.out.println(secod); // 35System.out.println(year+"年"+(month+1)+"月"+date+"日 "+hour+"时"+minute+"分"+secod+"秒"); // 2024年12月12日 15时51分46秒// 3. 修改时间Calendar calendar2 = Calendar.getInstance();calendar2.set(Calendar.DAY_OF_MONTH,11);System.out.println(calendar2.getTime().toLocaleString()); // 2024-12-11 15:53:53// 4. add方法修改时间calendar2.add(Calendar.HOUR,-1);System.out.println(calendar2.getTime().toLocaleString()); // 2024-12-11 14:55:17// 5. 补充方法calendar2.add(Calendar.MONTH,1);int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);System.out.println(max); // 31System.out.println(min); // 1}
}
SimpleDateFormat类
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类
进行格式化(日期 -> 文本)、解析(文本 -> 日期)
常用的时间模式字母
字母 | 日期或时间 | 示例 |
---|---|---|
y | 年 | 2024 |
M | 月 | 12 |
d | 日/天 | 12 |
H | 小时(0-23) | 19 |
m | 分钟 | 13 |
s | 秒 | 59 |
S | 毫秒 | 357 |
package com.object.SimpleDateFormat;import java.text.SimpleDateFormat;
import java.util.Date;public class Demo01 {public static void main(String[] args) throws Exception{// 1. 创建SimpleDateFormat对象 y 年 M 月// SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");// 2. 创建DateDate date = new Date();// 3. 格式化date(把日期转成字符串)String str = sdf.format(date);System.out.println(str); // 2024年12月12日 16:50:18// 4. 解析 (把字符串转成日期)Date date2 = sdf.parse("2018年12月12日");System.out.println(date2); // Wed Dec 12 00:00:00 CST 2018}
}
System类
System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的
方法名 | 说明 |
---|---|
static void arraycopy(…); | 复制数组 |
static long currentTimeMillis(); | 获取当前系统时间,返回的是毫秒值 |
static void gc(); | 建议JVM赶快启动垃圾回收器回收垃圾 |
static void exit(int status); | 退出JVM,如果参数是0表示正常退出jvm,非0表示异常退出jvm |
代码验证
package com.object.System;public class Demo01 {public static void main(String[] args) {// arraycopy 数组的复制// src 原数组// srcPos 从哪个位置开始复制// dest 目标数组// destPos 目标数组的位置// length 复制的长度int[] arr = {22,4,69,52,33,95,10,71,43};int[] dest = new int[9];System.arraycopy(arr,1,dest,0,5);for (int i = 0; i < dest.length; i++) {System.out.print(dest[i]+" "); // 4 69 52 33 95 0 0 0 0}// currentTimeMillis 从1970 到现在的毫秒数System.out.print("\n");System.out.println(System.currentTimeMillis()); // 1733998980366long start = System.currentTimeMillis();for (int i = 0; i < 99999; i++) {for (int j = 0; j < 99999; j++) {int result = i+j;}}long end = System.currentTimeMillis();System.out.println("用时:"+ (end-start)); // 用时:0 // 我这里设置的数小,电脑性能高的可以往大设}
}
总结
内部类
- 在一个类的内部再定义一个完整的类
- 成员内部类、静态内部类、局部内部类、匿名内部类
Object类
- 所有类的直接或间接父类,可存储任何对象
包装类
- 基本数据类型所对应的引用数据类型,可以使Object统一所有数据
String类
- 字符串是常量,创建之后不可改变,字面值保存在字符串池中,可以共享
BigDecimal类
- 可以精确计算浮点数
Date
- 特定时间
Calendar
- 日历
SimpleDateFormat
- 格式化时间
System
- 系统类
相关文章:
Java常用类(完整版)
其他类 Object类 超类、基类,所有类的直接或间接父类,位于继承树的最高层 任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类 Object类中所定义的方法,是所有对象都具备的方法 Object类型可以存储…...
【JAVA】Java项目实战—Java SE进阶项目:在线考试系统
在数字化教育中,在线考试系统的需求日益增加。它不仅提高了考试的效率,还能方便学生随时随地进行学习和测试。Java作为一种强大的编程语言,因其平台无关性、丰富的类库和强大的社区支持,成为开发在线考试系统的理想选择。 在线考…...
仿iOS日历、飞书日历、Google日历的日模式
仿iOS日历、飞书日历、Google日历的日模式,24H内事件可自由上下拖动、自由拉伸。 以下是效果图: 具体实现比较简单,代码如下: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…...
机器人构建详解:售前售后服务客服机器人与广告生成机器人的微调数据处理方法
引言 大模型(如BERT、GPT等)在自然语言处理任务中展现了强大的能力,但为了使其更贴合特定应用场景,通常需要进行微调。本文将详细讲解如何为售前售后服务的客服机器人和广告生成机器人准备高质量的微调数据,并通过具体…...
【飞机纵向动力学建模与分析】
飞机纵向动力学建模与分析 文章目录 飞机纵向动力学建模与分析前言坐标系定义及转换机体坐标系定义机体坐标系定义气流角定义气流坐标系与机体坐标系相互转化 纵向动力学方程建立力的分解动力学方程的建立纵向动力学方程纵向动力学方程状态空间表达形式纵向运动分析短周期简化处…...
【机器人】控制之稳定性判定: 李雅普诺夫Lyapunov (7) 判定是否是李函数,思维导图
要判断一个函数 V(x)是否可以作为某个动力学方程的 Lyapunov 函数,需要满足特定的数学和物理条件。以下是详细说明: 1. 满足 Lyapunov 函数的基本条件 一个函数 V(x)能否作为 Lyapunov 函数,需要满足以下基本条件: 1.1 正定性 …...
Qwen 论文阅读记录
本文仅作自己初步熟悉大模型,梳理之用,慢慢会更改/增加/删除,部分细节尚未解释,希望不断学习之后,能够完善补充。若有同道之人,欢迎指正探讨。 关于后面的code-qwen and math-qwen,我个人认为依…...
ViewModel
ViewMode是MVVM架构模式中VM层对应的类,它的作用是存储界面数据,并和界面发生数据交互。ViewModel能感知生命周期,并且在界面由于配置问题发生重建时候,可以保持当前的数据不变。生命周期如下: ViewMode由ViewModePr…...
AI和SEO的完美结合关键词策略解析
内容概要 在当今数字营销环境中,AI与SEO的结合已成为提升网站流量和转化率的重要策略。为了更好地理解这一主题,本文将首先介绍AI技术在数字营销中的多种应用,其次分析SEO的基础知识和重要性,以便为后续讨论建立坚实的基础。 提示…...
网络基础 - TCP/IP 五层模型
文章目录 一、OSI 参考模型中各个分层的作用1、应用层2、表示层3、会话层4、传输层5、网络层6、数据链路层7、物理层 二、OSI 参考模型通信处理示例 一、OSI 参考模型中各个分层的作用 1、应用层 2、表示层 负责设备固有数据格式和网络标准数据格式间的转换 实际生活中&#…...
pyenv 管理多个 Python 版本(1)
引言 你是否曾希望参与一个支持多个 Python 版本的项目,但又不知道如何轻松地测试所有这些版本?你是否对 Python 的最新版本感到好奇?或许你想尝试这些新功能,但又不想冒险破坏你的开发环境。幸运的是,如果你使用 pyen…...
LLMs之ICL:《Bayesian scaling laws for in-context learning》翻译与解读
LLMs之ICL:《Bayesian scaling laws for in-context learning》翻译与解读 导读:这篇论文的核心议题是理解和建模大型语言模型(LLM)的上下文学习(ICL)能力。文章从贝叶斯学习的角度出发,提出了一…...
泷羽Sec学习笔记-Bp中ip伪造、爬虫审计
ip伪造与爬虫审计 ip伪造 下载插件:burpFakeIP 地址:GitHub - TheKingOfDuck/burpFakeIP: 服务端配置错误情况下用于伪造ip地址进行测试的Burp Suite插件 python版需要配置jython:下载地址:Maven Central: org.python:jython-…...
常用vim命令行-linux008
Vim 是一款功能强大的文本编辑器,广泛应用于编程、配置文件编辑以及日常文本处理。Vim 在其命令行模式下提供了丰富的操作命令,这些命令能够大幅提升编辑效率。以下是 Vim 中常用的命令及操作的总结,覆盖了 Vim 中的基本操作、查找、替换、文…...
Linux相关概念和易错知识点(24)(认识信号、信号捕捉)
目录 1.认识信号 (1)后台进程和前台进程 ①为什么Ctrl C能终止前台进程? ②如何终止这个后台程序? (2)信号、异步和同步 ①同步 ②异步 (3)信号的处理 2.信号捕捉 &#x…...
Scala的导入
//导入 //(1) 创建包:在src上右键,新建软件包 //(2)填写包名:小写 //(3)在包上右键,创建类。自动加入包名 //(4)导入。import 包名.类名 //导入多个类 //import jh.yuanlixueyuan.bigdata.scala03.{A,B,C} //导入包下的所有的类 /…...
strace,tcmalloc,asan使用
1、strace使用 1.1、编译strace strace开源库 解压strace-4.21.tar.xz 编译./configure --hostarm-ca9-linux-gnueabihf --prefix~/out make&&make install 1.2、参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息…...
C++中多态性在实际项目中的应用场景;C++中面向对象编程实现数据隐藏的方法
1. C中多态性在实际项目中的应用场景 C中多态性是面向对象编程中的一个重要概念,它允许我们在使用基类指针或引用的情况下,调用派生类对象的特定方法。这种灵活性使得多态性在实际项目中有着广泛的应用场景,具体包括但不限于以下几个方面&am…...
【QT常用技术讲解】使用QMovie+QLabel播放gif动态图片,实现“正在加载”功能(源代码在资源中下载)
前言 界面在实现事件等待时,通过会显示一个转圈圈的动态图片,表示“正在加载”,事件完成之后关闭图片,QT中可以使用QMovieQLabel完成gif动态图片的播放及关闭的效果。 效果图 功能讲解 1、加载动画 void MainWindow::addloadgi…...
iPhone苹果相册视频怎么提取音频?
在数字时代,视频已成为我们记录生活、分享故事的重要方式。然而,有时候我们只想保留视频中的音频部分,比如一段动人的背景音乐或是一段珍贵的对话。那么,苹果相册视频怎么提取音频呢?本文将介绍三种简单且实用的方法&a…...
【PyTorch】动态调整学习率 torch.optim.lr_scheduler.StepLR 调度器
文章目录 1. torch.optim.lr_scheduler.StepLR 官方文档详解2. 使用示例2.1 官方提供使用示例2.2 自己写代码测试方法2.2.1 get_last_lr() 方法2.2.2 state_dict() 方法2.2.3 load_state_dict() 保存和加载调度器 3. 思考3.1 为什么需要state_dict()3.2 get_lr() 与 get_last_l…...
完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最…...
在销售管理中,客户跟进时会出现什么问题?如何解决?
客户跟进表是销售工作中重要的一部分,用于记录与客户的每次沟通、执行计划和合作动态。然而,在实际使用中,客户跟进表经常会出现一些问题,导致效率低下甚至客户流失。本文就从常见问题出发,一一提供措施,让…...
【代码随想录|动态规划】
一、动态规划理论基础 |、动态规划包含题目类型 (1)背包问题 (2)打家劫舍 (3)股票问题 (4)子序列问题 ||、做一道题需要掌握(动态规划5步曲)࿱…...
时间敏感网络与工业通信的融合:光路科技电力专用交换机和TSN工业交换机亮相EP电力展
12月7日,第三十一届中国国际电力设备及技术展览会(EP Shanghai 2024)暨上海国际储能技术应用展览会在上海新国际博览中心圆满落幕。本届展会以“数字能源赋能新质生产力”为主题,系统地呈现了电力设备行业在技术融合、转型升级及上…...
初识Linux · 系统编程done
目录 前言: 死锁 可重入函数 读写锁 自旋锁 前言: 本文作为Linux系统编程的收尾工作,介绍的是些零碎的概念,比如死锁,可重入函数,自旋锁,读写锁等,其中死锁概念要重要些&#…...
JavaScript函数式编程: 实现不可变数据结构
# JavaScript函数式编程: 实现不可变数据结构 什么是不可变数据结构 在计算机编程中,不可变数据结构指的是数据一旦创建就不可更改或者修改。这意味着我们不能在原始数据上进行增删改操作,而是需要创建一个新的数据结构来代替原始数据进行操作。 为什么要…...
union find算法 c++
1.原理参考 labuladong-fucking-algorithm/算法思维系列/UnionFind算法详解.md at master jiajunhua/labuladong-fucking-algorithm GitHub 2.初级模式 #include <iostream>class UF {public:// 记录连通分量/* 构造函数,n 为图的节点总数 */UF(int n) {…...
路径规划 | 改进的人工势场法APF算法进行路径规划(Matlab)
目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 改进的人工势场法(APF)路径规划算法 在路径规划中,人工势场法(APF)是一种常见的方法,但传统的APF算法容易陷入局部极小值,导致路径规…...
ES语句——DSL(kibana语句)
一、查询操作 查看当前索引的数据结构 _mapping Get ai-open-log*/_mapping 查询当前索引下的文档数以及分片信息 _count Get ai-open-log*/_count { "count": 12345, //当前索引下的文档总数 "_shards": { //分片信息 "total&…...
y3编辑器教学5:触发器2 案例演示
文章目录 一、探索1.1 ECA1.1.1 ECA的定义1.1.2 使用触发器实现瞬间移动效果 1.2 变量1.2.1 什么是变量1.2.2 使用变量存储碎片收集数量并展现 1.3 if语句(魔法效果挂接)1.3.1 地形设置1.3.2 编写能量灌注逻辑1.3.3 编写能量灌注后,实现传送逻…...
MVC配置文件及位置
配置文件位置 默认位置 WEB-INF目录下,文件名:<servlet-name>-servlet.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.…...
【razor】echo搭配relay功能分析
echo 要搭配relay 实现作者说relay在linux上跑,可以模拟丢包、延迟目前没看到如何模拟。relay监听9200,有俩作用 echopeer1 发relay,replay 把peer1的包给peer2 ,实现p2p能力。 接收端:采集后发送发给relay的 接收端的地址就是自己,的地址就是本地的9200,因此是让relay接…...
C++类的运算符重载
目标 让自定义的类直接使用运算符运算 代码 头文件及类定义 #include <iostream>using namespace std; class Complex {int rel;int vir; public:void show(){cout <<"("<<this->rel<<","<<this->vir<<&quo…...
Motionface RTASR 离线实时语音识别直播字幕使用教程
软件使用场景: 直播、视频会议、课堂教学等需要实时字幕的场景。 1:系统要求 软件运行支持32位/64位windows 10/11系统,其他硬件要求无,无显卡也能实时识别字幕。 2:下载安装 链接:百度网盘 请输入提取码 提取码&#…...
【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究
文章目录 概述:摘要1. 引言2. 相似误差订正算法(核心)3. 订正实验3.1 相似因子选取3.2 相似样本数试验3.3 时间窗时长实验 4. 订正结果分析4.1 评估指标对比4.2 风速曲线对比4.3 分风速段订正效果评估4.4 风速频率统计 5. 结论与讨论 概述&am…...
learn-(Uni-app)输入框u-search父子组件与input输入框(防抖与搜索触发)
1.父子组件u-search (1)父组件 <!-- 父组件 --> <template> <div><searchBar change"change" search"search"></searchBar> </div> </template> <script> // 子组件搜索 import…...
UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案
UNIX系统常见故障表现: 1、存储结构出错; 2、数据删除; 3、文件系统格式化; 4、其他原因数据丢失。 UNIX系统常见故障解决方案: 1、检测UNIX系统故障涉及的设备是否存在硬件故障,如果存在硬件故障…...
c#动态更新替换json节点
需求项目json作为主模板,会应用到多个子模版,当后续项目变更只需要修改主模板中节点,并且能够动态更新到原来的子模版中去。 主模板示例: {"A": {"A1": "","A2": false,"A3"…...
kubernetes的可靠性测试或者故障测试有哪些?
kubernetes的可靠性测试或者故障测试有哪些? 在 Kubernetes (K8s) 集群中,可靠性测试和故障性测试旨在确保系统能够稳定运行并具备应对各种故障的能力。这些测试主要针对集群的组件、应用程序和基础设施。以下是详细的测试内容和方法: 一、可靠性测试 1. 高可用性测试 目…...
datax和datax-web打包成docker运行
概述 datax和datax-web从一台机器迁移到另一台时,要重新搭建一套运行环境,比较麻烦;打包成docker镜像后迁移就方便多了; 因为我的mysql版本是8,需要在datax的read和write中手动添加8的jdbc驱动 所以我先各自下载好了datax和data…...
ThreadLocal原理解析
ThreadLocal原理解析 本篇将带大家了解ThreadLocal的使用方法,并且深度剖析其原理和作用,通过阅读源码的方式,进一步了解其内部原理 ThreadLocal 是 Java 提供的一个工具类,用于为每个线程维护一个独立的变量副本。每个线程可以访…...
Android 分析 Activity 与 Fragment 的区别,部分使用的差异
一、基本概念 Activity:Activity 是应用中单独一个界面的一个组件,通常一个 Activity 对应一个界面(或屏幕)。Activity 控制了一个应用界面的生命周期,并且能够处理用户的输入和交互。 Fragment:Fragment …...
前端(Ajax)
1.客户端请求 向https://jsonplaceholder.typicode.com/users发送get请求 const xhr new XMLHttpRequest();console.log(xhr.readyState);xhr.open(get, https://jsonplaceholder.typicode.com/users)console.log(xhr.readyState);xhr.send();console.log(xhr.readyState);xh…...
【C++】约瑟夫环问题:深度解析与高级优化
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言约瑟夫环问题:深度解析与高级优化💯题目描述💯解决方案详解直接模拟法(基于 C 实现)代码解析示例执行过程 💯高级优…...
总结拓展十七:SAP 采购订单行项目“交货“页签解析
《 SAP采购订单行项目“交货”页签字段解析》 在 SAP 系统的采购流程中,采购订单行项目的“交货”页签承载着关键的信息,其中的字段更是对整个交货环节的精准描述和把控的重要元素。理解和正确解析这些字段,对于确保采购流程的顺利进行、优化…...
作业Day2: 多文件编译; 思维导图
目录 ①文件代码 及其所需头文件分析 main.c文件 1.h文件 1.c文件 ②运行结果: ③代码分析 结构体成员 数据类型的设定: 信息录入函数 信息删除 成绩排序 信息显示 自定义初始化函数 ④思维导图:编辑 ①文件代码 及其所需头文…...
Kioptrix Level 1通关攻略
目录 修改靶机Kioptrix:Level 1 的网络模式 探测靶机IP地址 得到端口信息 扫描TCP端口 扫描UDP端口 脚本扫描 指纹探测 漏洞探测 目录枚举扫描 发现利用脚本 执行exp链接shell 修改靶机Kioptrix:Level 1 的网络模式 Kioptrix: Level 1靶机的默认网络模式是桥接&#x…...
01 下载opencv并配置vs开发环境
01 下载opencv并配置vs开发环境 01 下载windows版本的opencv 下载地址:点击 WIndows版本的是编译好的代码。 当然国外网站下载很慢,可以通过我分享的网盘链接下载 opencv-4.10.0-windows.exe https://www.alipan.com/s/wV7z4YsmXgN 点击链接保…...
Ubuntu22.04 docker如何发布镜像(和用git差不多)
在dockerhub上创建远程仓库:https://hub.docker.com/ 将本地镜像打tag,并修改成可以上传到 dockerhub 的形式 # 查看本地镜像# 修改镜像 ## docker tag 镜像名称:标签 新的镜像名称(要和远程仓库dockerhub上的一致):新的标签pus…...