Java常用类

Java常用类

Object类

  1. 超类、基类,所有类的直接或者间接父类,位于继承树的最顶层
  2. 任何类如果没有extends显示继承某个类,就默认继承Object类,否则就是间接继承
  3. Object类中定义的方法,是所有对象都具备的方法,Object类型可以存储任何对象,作为参数可以接收任何对象;作为返回值,可返回任何对象。

1. getClass()

public class application{    
   public static void main(String[] args){        
       Student student =new Student("小明",23);        
       Student student1 = new Student("小王",24);        
       Class class1 = student.getClass();        
       Class class2 = student1.getClass();        
       System.out.println(class1);       
       System.out.println(class2);        
       if(class1==class2){            
           System.out.println("两者属于同一个类");        
       }else{            
           System.out.println("两者不属于同一个类");       
       }    
   }
}

在这里插入图片描述

2. hashCode()
public int hasCode(){}
根据对象的地址或者字符串或者数字使用hash算法计算出来的int类型的数值,一般情况下相同对象返回相同的哈希值

System.out.println(student.hashCode());
System.out.println(student1.hashCode());
Student student3 = student1;
System.out.println(student3.hashCode());

在这里插入图片描述

3. toString()
public String toString(){}
返回该对象的字符串表示,可以根据程序需要覆盖该方法。

System.out.println(student.toString());
System.out.println(student1.toString());

在这里插入图片描述

@后的值即为2中展示的hash值
重写toString方法

@Override
public String toString() {    
return "Student{" + "name='" + name + '\'' +  ", age=" + age + '}';}

在这里插入图片描述

4. equals()
public boolean equals(Object obi){}

System.out.println(student.equals(student1));
Student student4 = new Student("小张",12);
Student student5 = new Student("小张", 12);
System.out.println(student4.equals(student5));

在这里插入图片描述

equals重写

  1. 比较两个引用是否指向同一个对象
  2. 判断obj是否为null
  3. 判断两个引用指向的实际对象类型是否一致
  4. 强制类型转换
  5. 依次比较各个属性值是否相同
public boolean equals(Object obj){   
    //1.判断两个对象是否是同一个引用    
    if(this==obj)        
        return true;    
    //2.判断obj是否为空    
    if(obj==null)       
        return false;    
   //3. 判断对象是否为Student    
   if(obj instanceof Student){       
        //4. 强制类型转换        
        Student s = (Student) obj;        
        //5. 比较属性        
        if(this.name.equals(s.getName())&&this.age==s.getAge()){           
            return true;        
        }    
   }    
   return false;
}
System.out.println(student.equals(student1));
Student student4 = new Student("小张",12);
Student student5 = new Student("小张", 12);
System.out.println(student4.equals(student5));

在这里插入图片描述

5. finalize()
当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
垃圾对象:没有有效引用指向此对象时,为垃圾对象。
垃圾回收:由GC销毁垃圾对象,释放数据存储空间。
自动回收机制:JVM内存耗尽,一次性回收所有垃圾对象。
手动回收机制:使用System.gc(),通知JVM执行垃圾回收。

包装类

基本数据类型所对应的引用数据类型,包装类的默认值为null
基本数据类型放在栈中,一旦包装为对象,就会放到堆中

基本数据类型包装类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
charCharacter

装箱与拆箱

装箱 将基本数据类型转为引用数据类型
拆箱 将引用数据类型转为基本数据类型


JDK1.5之前的装箱拆箱方式

//装箱
int num = 10;//存放在栈中
Integer integer1 = new Integer(num); //方式一
Integer integer2 =Integer.valueOf(num);//方式二
//拆箱
Integer integer3 = new Integer(100);
int i = integer3.intValue();

JDK1.5之后提供自动装箱拆箱方式

//自动装箱
int age = 24;
Integer age1 = age;
//自动拆箱
int age2 = age1;

数据转换

基本类型转成字符串
//基本数据类型转为字符串 
int num = 10;
//方式一
String num1 = 10+"";
//方式二
String num2 = Integer.toString(num); 
System.out.println(Integer.toBinaryString(num));//转为二进制字符串 
System.out.println(Integer.toHexString(num));  //转为十六进制字符串
System.out.println(Integer.toOctalString(num));//转为八进制字符串
字符串转为基本类型
String str = "100";
Integer.parseInt(str);

boolean类型的字符串,只有true能够转为基本类型的true,其余全为false

String s = "true";
boolean s1 = Boolean.parseBoolean(s); 
System.out.println(s1);

Integer缓冲区

Java预先创建了256个常用的整数包装类型对象 -127-128,在实际应用中,对已创建的对象进行复用。

Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);

//通过构造函数来构建,相当于创建了两个对象,栈中存放着指向堆中对象的地址,地址是不一样的

Integer integer3 = 100;//自动装箱  相当于 Integer.valueOf(100)
Integer integer4 = 100;
System.out.println(integer3==integer4);

//valueOf中已经定义了范围,Integer缓冲区已经定义了-127-128的对象,只要在这个范围内,栈中的地址都是指向堆中的同一地址

Integer integer5 = 200;
Integer integer6 = 200;
System.out.println(integer5==integer6);
//范围超出了-127-128,会新定义一个对象,两个对象的地址不一样

在这里插入图片描述

String类

字符串是常量,创建后不能修改

String name = "zhangsan";
name = "lisi";
String name1 = "lisi";

刚开始创建变量name为zhangsan,之后重新赋值为lisi,此时zhangsan并没有在字符串池中消失,而是变成了垃圾,当再创建name1为lisi时,会去字符串池中去找lisi。
在这里插入图片描述

字符串的字面值存储在字符串池中,可以共享
String s = “hello”; //产生一个对象,字符串池中存储
String s1 = new String(“java”); //产生两个对象,堆、字符串池中各存储一个

String str1 = new String("Java");
String str2 = new String("Java");
System.out.println(str1==str2); //结果为false

当创建Java字符串时,会在字符串池中创建Java,又因为有new,所以在堆中创建一个对象,str1在栈中保存对象在堆中的地址,当再次创建str2时,字符串池中有Java,所以在堆中新创建一个对象,实际上在执行过程中,堆中的不存在,还是指向字符串池中的字符串。

在这里插入图片描述

常用方法

public int length():返回字符串长度
public char charAt(int index):根据下标获取字符
public boolean contains(String str):判断当前字符串中是否含有str

String str = "我正在学习Java"; 
System.out.println(str.length()); //输出长度为9
System.out.println(str.charAt(4)); //输出 习
System.out.println(str.contains("学")); //输出 true
System.out.println(str.contains("php"));//输出 false

public char[] toCharArray():将字符串转为数组
public int indexOf(String str):查找str首次出现的下标,存在返回;不存在,返回-1
public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引

String str = "Java我正在学习Java,我能学好Java";
char[] chars = str.toCharArray();
System.out.println(Arrays.toString(chars));
for (char aChar : chars) {   
    System.out.print(aChar+"");
}
System.out.println();
System.out.println(str.indexOf("Java"));
System.out.println(str.indexOf("Java", 4));
System.out.println(str.lastIndexOf("Java"));

在这里插入图片描述

public String trim():去掉字符串前后的空格
public String toUpperCase():将小写转为大写
public String toLowerCase():将大写转为小写
public boolean endsWith(String str):判断字符串是否以str结尾
public boolean startsWith(String str):判断字符串是否以str开头
public String replace(char olfChar,char newChar):将旧字符或者字符串替换成新的字符或字符串
public String[] split(String str):根据str做拆分

split(“[ ,]+”):以空格或者逗号拆分 加上加号后会以多个空格或者逗号拆分

equals:用于字符串值的比较 equalsIgnoreCase:忽略大小写字符串比较

//s1的ascll减去s2
String s1 ="abc";
String s2 ="xyz";
System.out.println(s1.compareTo(s2));//输出为-23
//s3的长度减去s4
String s3 = "abc";
String s4 = "abcxyz";
System.out.println(s3.compareTo(s4));//输出-3

练习

String str = "this is a text";
//1. 将str中的单词单独提取出来  
String[] s = str.split(" ");  
for (String s1 : s) {      
     System.out.println(s1); 
}  
System.out.println("================================");  
//2. 将text替换为practice  
System.out.println(str.replace("text", "practice"));    
System.out.println("================================");  
//3. 在text前插入一个easy  java是没有insert的  
System.out.println(str.replace("text", "easy test"));  
//4. 将每个单词的首字母大写  
for (String s1 : s) {      
    char c = s1.charAt(0);      
    char first = Character.toUpperCase(c);      
    String s2 = first+s1.substring(1);      
    System.out.println(s2);  
}

StringBuffer,StringBuilder

StringBuffer:可变长字符串,JDK1.0提供,运行效率慢,线程安全
StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全

两者比String执行效率要高,节省内存

StringBuffer stringBuffer = new StringBuffer();
//1. 追加append
stringBuffer.append("你好啊");
System.out.println(stringBuffer);
//2. 添加
insertstringBuffer.insert(0,"在前面,");
System.out.println(stringBuffer);
//3. 替换 replace   含头不含尾
stringBuffer.replace(0,3,"已替换");
System.out.println(stringBuffer);
//4. 删除 
deletestringBuffer.delete(0,3);
System.out.println(stringBuffer);
//5. 清空
stringBuffer.delete(0,stringBuffer.length());
System.out.println(stringBuffer.length());

在这里插入图片描述

StringBuilder与StringBuffer一样,只要一替换即可。

BigDecimal

double a = 1.0;double b = 0.9; 
System.out.println(a-b); 
//面试题 
double result = (1.4-0.5)/0.9; 
System.out.println(result);

在这里插入图片描述

这是因为double、float在存储时用的是近似值

BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.3");
//1.  加法
BigDecimal bd3 = bd1.add(bd2);
System.out.println(bd3);
//2. 减法
BigDecimal bd4 = bd1.subtract(bd2);
System.out.println(bd4);
//3. 乘法
BigDecimal bd5 = bd1.multiply(bd2);
System.out.println(bd5);
//4. 除法  除不尽时会报错,使用重载方法,指明保留多少位小数,采取四舍五入
BigDecimal bd6 = bd1.divide(bd2,2,BigDecimal.ROUND_UP);
System.out.println(bd6);
// 计算(1.4-0.5)/0.9
System.out.println(new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9")));

在这里插入图片描述

Date

Data表示特定的瞬间,精确到毫秒,大部分方法已被Calendar类中的方法所取代
1秒=1000毫秒,1毫秒=1000微秒,1微秒=1000纳秒

//今天
Date date1 = newDate();
System.out.println(date1.toString());
System.out.println(date1.toLocaleString());
//昨天    getTime() 是从1970年1月1日0点起 距离现在多少毫秒
Date date2 = new Date(date1.getTime() - (24 * 60 * 60 * 1000));
System.out.println(date2.toLocaleString());
// before after
System.out.println(date1.before(date2));//true
System.out.println(date1.after(date2)); //false
// equals
System.out.println(date1.equals(date2));//false
//compareTo
System.out.println(date1.compareTo(date2));// 1
System.out.println(date2.compareTo(date1));// -1

在这里插入图片描述

Calendar

提供了获取或者设置各种日历字段的方法
构造方法为:protected Calendar() protented修饰,无法直接创建对象

方法名说明
static Calendar getInstance()使用默认的时区或者区域获得日历
void set(int year,int month,int date,int hourofday,int minute,int second设置日历的年月日时分秒
int get(int field)返回给定日历字段的值
void setTime(Date date)用给定的Date设置此日历的时间
Date getTime()返回一个Date表示此日历的时间
void add(int field,int amount)按照日历的规则,给指定字段添加或减少时间量
long getTimeInMillies()毫秒为单位返回该日历的时间值
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.toString());
System.out.println(calendar.getTime().toLocaleString());
int year = calendar.get(Calendar.YEAR);
//月从0-11
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
//HOUR 12  HOUR_OF_DAY 24
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println("现在是"+year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);
//修改时间
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.DAY_OF_MONTH,9);
System.out.println(calendar1.getTime().toLocaleString());
//add 修改时间 当前小时增加3个小时
calendar1.add(Calendar.HOUR_OF_DAY,3);
System.out.println(calendar1.getTime().toLocaleString());
//当前时间减少5个小时
calendar1.add(Calendar.HOUR_OF_DAY,-5);
System.out.println(calendar1.getTime().toLocaleString());
//获取当月的最小天数
System.out.println(calendar1.getActualMinimum(Calendar.DAY_OF_MONTH));
//获取当月最大天数
System.out.println(calendar1.getActualMaximum(Calendar.DAY_OF_MONTH));

在这里插入图片描述

SimpleDateFormat

进行格式化:日期->文本 解析:文本->日期

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date date = new Date();
System.out.println(date.toLocaleString());
//格式化日期  日期转为字符串
System.out.println(sdf.format(date));
//字符串转为日期
String date1 = "2022年1月1日 12:20:23";
Date parse = null;
try {
    parse = sdf.parse(date1);
} catch (ParseException e) {
    e.printStackTrace();
}
System.out.println(parse);

在这里插入图片描述

System

System是系统类,构造方法是私有的,不需要new

方法名说明
static void arraycopy()复制数组
static long currentTimeMillis()获取当前系统时间,返回值为毫秒
static void gc()建议JVM启动垃圾回收器回收垃圾
static void exit(int status)退出JVM,如果参数为0表示正常退出,非0表示异常退出
@Override
protected void finalize() throws Throwable {
    System.out.println("回收了name="+this.name+", age="+this.age);
}
int[] array1 = {5,8,4,1,2,4,1,3,6};
int[] array2 = new int[array1.length];
//参数分别为 原数组、原数组开始位置、目的数组、目的数组开始位置、复制个数
// Arrays.copyOf();中调用的也是arraycopy方法
System.arraycopy(array1,5,array2,3,2);
for(int i :array2){
    System.out.print(i+" ");
}
System.out.println();
long start = System.currentTimeMillis();
String s ="";
for(int i = 0;i<99999;i++){
    s+=i;
}
long end = System.currentTimeMillis();
System.out.println((end-start));

new Student("aaa",12);
new Student("bbb",13);
new Student("ccc",14);
System.gc();

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值