1.Object类
-
超类、基类,所有类的直接或者间接父类,位于继承树的最顶层;
-
任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。
-
Object类中所定义的方法,是所有对象都具备的方法。
-
Object类型可以存储任何对象
-
作为参数,可接受任何对象
-
作为返回值,可以返回任何对象
-
2.getClass方法
-
public final Class<?> getClass(){}
-
返回引用存储的实际对象类型
-
应用:通常用于判断两个引用中实际存储对象类型是否一致
public class GetClass {
public static void main(String[] args) {
Student s1 = new Student("keyi",12);
Student s2 = new Student("ke",12);
Class<? extends Student> s1Class = s1.getClass();
Class<? extends Student> s2Class = s2.getClass();
if(s1Class==s2Class){
System.out.println("s2和s2属于同一个类型:"+s1Class);
//s2和s2属于同一个类型:class com.yu.CommonClass.Student
}else{
System.out.println("s2和s2不属于同一个类型");
}
}
}
public class Student {
public String name;
public int age;
public Student() {
}
public Student(String name, int age) {
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;
}
}
3.hashCode()方法
-
public int hashCode () {}
-
返回该对象的哈希码值
-
哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
-
一般情况下相同对象返回相同哈希码
public class GetClass {
public static void main(String[] args) {
Student s1 = new Student("keyi",12);
Student s2 = new Student("ke",12);
Class<? extends Student> s1Class = s1.getClass();
Class<? extends Student> s2Class = s2.getClass();
//判断s1和s2是不是同一个类型
if(s1Class==s2Class){
System.out.println("s1和s2属于同一个类型:"+s1Class);
//s1和s2属于同一个类型:class com.yu.CommonClass.Student
}else{
System.out.println("s1和s2不属于同一个类型");
}
//hashCode
System.out.println("=====================================");
System.out.println(s1.hashCode()); //460141958
System.out.println(s2.hashCode()); //1163157884
Student s3=s1;
System.out.println(s3.hashCode()); //460141958
}
}
4.toString()方法
-
public String toString () {}
-
返回该对象的字符串表示(表现形式)
-
可以根据程序需求覆盖该方法,如:展示对象各个属性值
public class Student {
public String name;
public int age;
public Student() {
}
public Student(String name, int age) {
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class GetClass {
public static void main(String[] args) {
Student s1 = new Student("keyi",12);
Student s2 = new Student("ke",12);
//1.getClass()方法
Class<? extends Student> s1Class = s1.getClass();
Class<? extends Student> s2Class = s2.getClass();
//判断s1和s2是不是同一个类型
if(s1Class==s2Class){
System.out.println("s1和s2属于同一个类型:"+s1Class);
//s1和s2属于同一个类型:class com.yu.CommonClass.Student
}else{
System.out.println("s1和s2不属于同一个类型");
}
//2.hashCode()方法
System.out.println("=====================================");
System.out.println(s1.hashCode()); //460141958
System.out.println(s2.hashCode()); //1163157884
Student s3=s1;
System.out.println(s3.hashCode()); //460141958
//3.toString()方法
System.out.println("=====================================");
System.out.println(s1.toString()); //Student{name='keyi', age=12}
System.out.println(s2.toString()); //Student{name='ke', age=12}
}
}
5.equals()方法
-
public boolean equals (Object obj) {}
-
默认实现为(this == obj),比较两个对象地址是否相同
-
可进行覆盖,比较两个对象的内容是否相同
public class GetClass {
public static void main(String[] args) {
Student s1 = new Student("keyi",12);
Student s2 = new Student("keyi",12);
//1.getClass()方法
Class<? extends Student> s1Class = s1.getClass();
Class<? extends Student> s2Class = s2.getClass();
//判断s1和s2是不是同一个类型
if(s1Class==s2Class){
System.out.println("s1和s2属于同一个类型:"+s1Class);
//s1和s2属于同一个类型:class com.yu.CommonClass.Student
}else{
System.out.println("s1和s2不属于同一个类型");
}
//2.hashCode()方法
System.out.println("=====================================");
System.out.println(s1.hashCode()); //460141958
System.out.println(s2.hashCode()); //1163157884
Student s3=s1;
System.out.println(s3.hashCode()); //460141958
//3.toString()方法
System.out.println("=====================================");
System.out.println(s1.toString()); //Student{name='keyi', age=12}
System.out.println(s2.toString()); //Student{name='ke', age=12}
//4.equals()方法
System.out.println("=====================================");
System.out.println(s1.equals(s2)); //false
System.out.println(s1 == s2); //false
int a = 10;
int b = 10;
System.out.println(a == b); //true
}
}
6.finalize()方法
-
当对象被判定为垃圾对象时,由JVM自动条用此方法,用以标记垃圾对象,进入回收队列;
-
垃圾对象:没有有效引用指向此对象时,为垃圾对象;
-
垃圾回收:由GC销毁垃圾对象,释放数据存储空间;
-
自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象;
-
手动回收机制:使用System.gc();通知JVM执行垃圾回收。
public class CommonClass02 {
public static void main(String[] args) {
// Student s1 = new Student("A",20);
// Student s2 = new Student("B",20);
// Student s3 = new Student("C",20);
// Student s4 = new Student("D",20);
// Student s5 = new Student("E",20);
System.out.println("======================");
new Student("A",20);
new Student("B",20);
new Student("C",20);
new Student("D",20);
new Student("E",20);
//垃圾回收
System.gc();
System.out.println("垃圾回收!");
}
}
public class Student {
public String name;
public int age;
public Student() {
}
public Student(String name, int age) {
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
protected void finalize() throws Throwable{
System.out.println(this.name+"对象被回收了!");
}
}
7.String
(1).String
-
字符串是常量,创建之后不可改变
public class String01 {
public static void main(String[] args) {
String name = "hello"; //"hello" 常量存储在字符串池中
name = "zhangsan"; //"zhangsan"赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
String name2 = "zhangsan";
String str = new String("java");
String str2 = new String("java");
System.out.println(str==str2);
System.out.println(str.equals(str2));
}
}
(2).字符串的使用
-
public int length():返回字符串的长度;
-
public char charAt(int index) : 根据下表获取字符;
-
public boolean contains(String str) : 判断当前字符串中是否包含str
public class String01 {
public static void main(String[] args) {
String name = "hello"; //"温润如玉" 常量存储在字符串池中
name = "zhangsan"; //"大山"赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
String name2 = "zhangsan";
String str = new String("java");
String str2 = new String("java");
System.out.println(str==str2);
System.out.println(str.equals(str2));
/*
字符串的使用
1.length();返回字符串的长度
2.charAt(int index);返回某个位置的字符
3.contains(String str);判断是否包含某个字字符串
*/
System.out.println("========================================");
String con = "Java是世界上做好的编程语言!Java是面向对象编程!";
System.out.println(con.length());
System.out.println(con.charAt(con.length()-1));
System.out.println(con.contains("Java"));
System.out.println(con.contains("Python"));
/*
4.toCharArray();返回字符串对应的数组
5.indexOf();返回字符串首次出现的位置
6.lastIndexOf();返回字符串最后一次出现的位置
*/
System.out.println("========================================");
System.out.println(Arrays.toString(con.toCharArray()));
System.out.println(con.toCharArray());
System.out.println(con.indexOf("Java"));
System.out.println(con.indexOf("Java",4));
System.out.println(con.lastIndexOf("Java"));
/*
7.trim();去掉字符串前后的空格
8.toUpperCase(); 把小写转换为大写;toLowerCase();把大写转换成小写;
9.endWith(str);判断是否str结尾,startWith(str);判断是否str开头
*/
System.out.println("========================================");
String con02 = " Java是世界上做好的编程语言!";
System.out.println(con02);
System.out.println(con02.trim());
System.out.println(con02.toLowerCase());
System.out.println(con02.toUpperCase());
System.out.println(con02.startsWith(" "));
System.out.println(con02.endsWith("!"));
/*
10.replace(char old,char new); 用新的字符或字符串替换旧的字符或字符串
11.split();对字符串进行拆分
*/
System.out.println("========================================");
System.out.println(con.replace("Java","Python"));
System.out.println(con.split(","));
String Java = "Java is the best programing language,Java xiang";
String[] arr = Java.split("[ ,]+"); //空格可以使数组按照空格拆分,逗号使数组可以按照逗号进行拆分,+可以识别输入多个空格和逗号
for (String s: arr) {
System.out.println(s);
}
}
}
8.可变字符串
-
StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全;
-
StringBuilder:可变长字符串,JDK1.5提供,运行效率快、线程不安全。
-
和String的区别:效率比String高;比String节省内存;
public class StringBuffer01 {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
//1.append();追加
stringBuffer.append("Java最好的编程语言!");
System.out.println(stringBuffer); //Java最好的编程语言!
stringBuffer.append("Java最好!");
System.out.println(stringBuffer); //Java最好的编程语言!Java最好!
//2.insert();添加
stringBuffer.insert(0,"Python、");
System.out.println(stringBuffer); //Python、Java最好的编程语言!Java最好!
//3.replace();替换
stringBuffer.replace(0,6,"Hello");
System.out.println(stringBuffer); //Hello、Java最好的编程语言!Java最好!
//4.delete();删除
stringBuffer.delete(0,6);
System.out.println(stringBuffer); //Java最好的编程语言!Java最好!
//5.delete();清空
stringBuffer.delete(0,stringBuffer.length());
System.out.println(stringBuffer); //为空,没有输出
}
}
public class String04 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
String num = "";
for (int i = 0; i < 99999; i++) {
num += i;
}
System.out.println(num);
long endTime = System.currentTimeMillis();
System.out.println("循环用时:"+(endTime-startTime)); //循环用时:36899
}
}
public class String05 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < 99999; i++) {
stringBuffer.append(i);
}
System.out.println(stringBuffer);
long endTime = System.currentTimeMillis();
System.out.println("循环用时:"+(endTime-startTime)); //循环用时:59
}
}
9.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
-
import java.math.BigDecimal;
public class BigDecimal01 {
public static void main(String[] args) {
double a = 1.0;
double b = 0.9;
System.out.println(a-b); //0.09999999999999998
//面试题
double result01 = (0.9)/0.9;
double result02 = (1.4-0.5)/0.9;
System.out.println(result01); //1.0
System.out.println(result02); //0.9999999999999999
BigDecimal bigDecimal01 = new BigDecimal(1.0);
BigDecimal bigDecimal02 = new BigDecimal(0.9);
//减法
BigDecimal subtract = bigDecimal01.subtract(bigDecimal02);
System.out.println(subtract); //0.09999999999999997779553950749686919152736663818359375
//加法
BigDecimal add = bigDecimal01.add(bigDecimal02);
System.out.println(add); //1.90000000000000002220446049250313080847263336181640625
//乘法
BigDecimal multiply = bigDecimal01.multiply(bigDecimal02);
System.out.println(multiply); //0.90000000000000002220446049250313080847263336181640625
//除法
BigDecimal big = new BigDecimal("1.4").subtract(new BigDecimal("0.5")).divide(new BigDecimal("0.9"));
System.out.println(big); //1
BigDecimal big02 = new BigDecimal("20").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
System.out.println(big02); //6.67
}
}
10.Date
-
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类的额方法取代;
-
时间单位
-
1秒 = 1000毫秒
-
1毫秒 = 1000微秒
-
1微秒 = 1000纳秒
-
import java.util.Date;
public class Date01 {
public static void main(String[] args) {
//今天
Date date = new Date();
System.out.println(date); //Thu Dec 23 23:05:06 CST 2021
System.out.println(date.getTime()); //1640271906975
//昨天
Date date1 = new Date(date.getTime()-(60*60*24*1000));
System.out.println(date1.toLocaleString()); //2021-12-22 23:05:06
}
}