常用类
Object类
- 超类、基类,所有类的直接或间接父类,位于继承树的最顶层
- 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
- Object类中所定义的方法,是所有对象都具备的方法
- Object类型可以存储任何对象
- 作为参数,可接收任何对象
- 作为返回值,可返回任何对象
Object类常用方法
getClass()方法
public final Class<?> get(){}
//返回引用中存储的实际对象类型
//应用:通常用于判断两个引用中实际存储对象类型是否一致
/*
Student s1=new Student();
Student s2=new Student();
//判断s1和s2是不是同一个类型
Class class=s1.getClass();
Class class=s2.getClass();
*/
hashCode()方法
public int hashCode(){}
//返回该对象的哈希码值
//哈希值根据对象的地址或字符串或数字使用hash算法计算出来的int类型的数值
//一般情况下相同对象返回相同的哈希码
Student s1=new Student();
Student s2=new Student();
System.out.println(s1.hashCode())
System.out.println(s2.hashCode())
//对象不同,堆内的地址也不同,所以哈希值也不同
Student s3=s1;
System.out.println(s3.hashCode())//哈希值的地址s1与s3相同
toString()方法
public String toString(){}
//返回该对象的字符串表示(表现形式)
//可以根据程序需求覆盖该方法,重写toString的方法
package com.MHP.Object1;
import org.w3c.dom.ls.LSOutput;
public class TestStudent {
public static void main(String[] args) {
Student s1 = new Student("zhangsan");
Student s2 = new Student("lisi");
System.out.println(s1.toString());
System.out.println(s2.toString());//如果没有重写toString的方法的话,会出现地址
}
/*
package com.MHP.Object1;
public class Student extends Person {
String name;
public Student(String name){
this.name=name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}
*/
}
equals()方法
- ==比较的是对象的地址是否相同,equals比较的是值
public boolean equals(Object obj){}
//默认实现为(this==obj),比较两个对象地址是否相同
//可进行覆盖,比较两个对象的内容是否相同
Student s1 = new Student("zhangsan");
Student s2 = new Student("lisi");
System.out.println(s1.equals(s2));//地址不同,所以返回false
//参数的值是相同的话,它的的地址也是不同的,所以返回了也是false
Student s3 = new Student("lisi");
Student s4 = new Student("lisi");
System.out.println(s3.equals(s4));
finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收列表
包装类
什么是包装类
基本数据类型所对应的引用数据类型 例如:int num=10; num是不可以使用方法的
Object可统一所有数据,包装类的默认值是null;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UNQ2TlYg-1631871375210)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20210915203252674.png)]
类型转换与装箱、拆箱
基本数据类型存在栈中,引用数据类型存在堆中
package com.MHP.Object1;
import org.w3c.dom.ls.LSOutput;
public class Demo1 {
public static void main(String[] args) {
//类型转换:装箱,基本类型转换成引用类型的过程(从栈到堆)
//基本类型
int num1=10;
//使用Interger类创建对象
Integer integer1=new Integer(num1);
Integer integer2=Integer.valueOf(num1);
//类型转换:拆箱,引用类型转换成基本类型
Integer integer3=new Integer(100);
int num2=integer3.intValue();
System.out.println("=========================================");
//JDK1.5后,提供了自动装箱和拆箱
int age=10;
//自动装箱
Integer integer4=age;
//自动拆箱
int age2=integer4;
}
}
基本类型和字符串转换
8种包装类提供不同类型间的转换方式:
- Number父类中提供的6个共性方法
- paeseXXX()静态方法
- valueOf()静态方法
注意:需保证类型兼容,否则抛出NumberFormatException异常
package com.MHP.Object1;
import org.w3c.dom.ls.LSOutput;
public class Demo02 {
public static void main(String[] args) {
//基本类型与字符串的转换
//基本类型转换成字符串
int n1=100;
//使用+"";
String s1=n1+"";
//使用Integer中的toString()方法
String s2=Integer.toString(n1);
System.out.println(s1);
System.out.println(s2);
System.out.println("=====================================");
//字符串转换成基本类型
String s3="150";
//使用integer.parseXXX();
int n2 = Integer.parseInt(s3);
System.out.println(n2);
System.out.println("=====================================");
//boolean字符串形成基本类型"true"--->true,非"true"----》false
String s4="false";
boolean b1 = Boolean.parseBoolean(s4);
System.out.println(b1);
}
}
整数缓冲区
package com.MHP.Object1;
public class Demo03 {
public static void main(String[] args) {
//面试题
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);//false, 虽然它们的值是相同的,但是它们在堆内的地址是不同的
Integer integer3=Integer.valueOf(100);//自动装箱
Integer integer4=100;
System.out.println(integer3==integer4);//true,实际上自动装箱是等于:Integer integer3=Integer.valueOf(100);在堆中是有100的对象的,对应的栈中的integer是相同的
/*
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)//low是-127,high是128
return IntegerCache.cache[i + (-IntegerCache.low)];//cache是缓冲区
return new Integer(i);
}
* */
Integer integer5=200;//自动装箱
Integer integer6=000;
System.out.println(integer3==integer4);//false,超出了缓冲区的值,最高是128,所以在栈中没有找到对应的对象,所以返回false
}
}
String类
- 字符串是常量,创建后不可改变
- 字符串字面值存储在字符串池中,可以共享
- String s=“Hello”; 产生一个对象,字符串池中存储
- String s=new String(“Hello”)//产生两个对象,堆、池各存储一个
- 之后JDK1.7后更新了,方法区在堆中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcxMWMi1-1631871375214)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20210917153533141.png)]
常用方法
length()
返回字符串的长度
String content="Java";
System.out.println(content.length());//返回4
charAt(int index)
根据下标获取字符
String content="Java";
System.out.println(content.charAt(content.length()-1);//返回a
contains(String str)
判断当前字符串中是否包含str
String content="Java";
System.out.println(content.contains("ava"));ture
System.out.println(content.contains("php"));false
toCharArray()
将字符串转换成数组
String content="Java";
System.out.println(content.toCharArray());//会返回一个地址
System.out.println(Array.toString(content.toCharArray()));
indexOf(String str)
查找str首次出现的下标,存在,则返回下标;不存在,则返回-1
String content="Java是全世界最好的语言,java真好啊";
System.out.println(content.indexOf("java"));//返回下标
System.out.println(content.indexOf("java",4));//返回下标,从4后开始寻找
lastIndexOf(String str)
查找字符串在当前字符串中最后一次出现的下标索引
String content="Java是全世界最好的语言,java真好啊";
System.out.println(content.lastIndexOf("java"));//返回下标
trim()
去掉字符串前后的空格
toUpperCase()/toLowerCase()
toUpperCase(): 将小写转换成大写
toLowerCase():将小写转换成大写
endsWith(String str)
判断字符串是否以str结尾
String fileName="hello.world";
System.out.println(fileName.endsWith(".world"));//true
replace(char oldChar,char newChar)
将旧字符串代替成新字符串
split(String str)
根据str做拆分
可变字符串
Stringbutter
- 可变长字符串,运行效率慢,线程安全,JDK1.0提供
- 和String的区别
- 效率比String高
- 比String节省内存
StringButter sb=new StringButter();
//StringBuilder sb=new StringBuilder();都是一样的
//append();追加
sb.append("java");
System.out.println(sb.toString());
//insert();添加,插入
sb.insert(0,"我在最前面");
System.out.println(sb.toString());
//replace();代替
sb.replace(0,5,"hello");//含头不含尾
System.out.println(sb.toString());
//delete();删除
sb.delete(0,5);
System.out.println(sb.toString());
Stringbuilder
可变长字符串,运行效率快,线程不安全,JDK5.0提供
BigDecimal类
- 位置:java.math包中
- 作用:精确计算浮点数
- 创建方式:BigDecimal bd=new BigDecimal(“1.0”);
- 方法:加减乘除
Date类
Data表示特定的瞬间,精确到毫秒。Date类中的大部分方法都被Calendar类中的方法所取代
- 方法after before
- 比较:compareTo()
Calendar类
- Calendar提供了获取或设置各种日历字段的方法
- 构造方法:protected Calendar(): 由于修饰符是protected,所以无法直接创建该对象
Calendar cd=Calendar.getInstance();
- 其他方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eRfE7oz-1631871375216)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20210917170501374.png)]
SimpleDataFormat类
- SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类
- 进行格式化(日期->文本)、解析(文本-> 日期)
- 常用的时间模式字母
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OgXyTXxp-1631871375219)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20210917170813547.png)]
//创建SimpleDateFormat对象y年M月d日
SimpleDateFormat sdf=new SimpleDataFormat("yyyy/MM/dd HH:mm:ss")
//创建Date
Date date=new Date();
//格式化date(把日期转换成字符串)
String str=sdf.format(date);
System.out.println(str);//2021/9/17 .....
//解析(把字符转成日期)
Date date2=sdf.parse("1990/05/01");
System.out.println(date2);
System类
System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQhJwz4j-1631871375220)(C:\Users\maybe3032\AppData\Roaming\Typora\typora-user-images\image-20210917172803667.png)]
总结
- 内部类
- 在一个类的内部再定义一个完整的类
- Object类:
- 所有类的直接或间接父类,可存储任何对象
- 包装类
- 基本数据类型所对应的引用数据类型,可以使Object统一所有数据
- String类
- 字符串是常量,创建之后不可改变,字面值保存在字符串池中,可以共享
- BigDecimal类
- 可精确计算浮点数
- Date类
- 特定时间
- Calendar类
- 日历
- SimpleDateFormat类
- 格式化时间
- System
- 系统类