java常见api用法

一 Object类

在一个类没有继承其他类的情况下,则当前类默认继承Object类作为父类。在Object类中,有一个无参构造。此外,作为java工程师,必须知道Object类中的以下方法:
请添加图片描述

1.1 toString介绍

返回对象的字符串表示形式。类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号十六进制表示形式组成。其底层实现如下:

``String.valueOf(x);
return (obj==null)? "null":obj.toString();

即通过三元表达式判断对象是否为null,若为null则返回一个空字符串,不为空则调用父类中的toString();换句话说,此方法返回一个等于值的字符串:

getClass().getName()+'@'+Integer.toHexString(hashCode())

1.2 重写toString():

@override
public String toString(){
     return "name:"+name+",age:"+age; //重写的内容
}

toString方法中的目的就是给对象进行重写的,输出对象中所有成员属性值。在做测试时,可以直接重写此方法。

二 equals方法

2.1 equals方法判断字符串是否相等

char只能保存单个字符,String则可以保存字符串。String的底层是基于数组实现的。

判断两个字符串是否相等,返回值为布尔类型。

String str1 = "value1";
String str2 = "value2";
System.out.println(str1.equals(str2));

输出结果为false,表明str1和str2不相等。

然而,对于下面这种情况:

String str3 = null;
System.out.println(str3.equals(str2));

运行后会报错。如果使用null.equals(字符串),则会报空指针错误。字符串.equals(null)不报错。

2.2 equals判断两个自定义对象

对于两个自定义对象,需要重写equals才能判断两个值是否相等。

Student s1 = new Student();
Student s2 = new Student();
System.out.println(s1.equals(s2));

此时返回false。在Object父类中,equals方法的实现是比较两个对象的内存地址是否相同,而不是两个对象的成员属性值是否相同。底层源码如下:

public boolean equals(Object obj){
    return (this == obj);
}

那么,如何才能利用equals方法判断两个自定义对象是否相等呢?这就需要在子类中对equals方法进行重写。

2.3 重写equals方法

若要比较两个对象的值是否相同,必须在子类中对equals方法进行重写。以子类为Student为例,子类中有(int age)和(String name)属性。

@override
public boolean equals(Object obj){
    if(this == obj) return true;
    if(obj == null || this.getClass()!=obj.getClass()) return false;
    Student s2 = (Student) obj; //强转类型
    return this.age == s2.age && this.name.equals(s2.name);
}

重写后,比较的是两个类中的成员属性值,重新运行如下代码:

Student s1 = new Student("zhang",18);
Student s2 = new Student("zhang",18);
System.out.println(s1.equals(s2));

输出结果为true,因为此时比较的是构造函数内的两组形参是否一致。

三 instanceof

instanceof通过返回一个布尔值来指出,某个对象是否是某个类或者是该特定类的子类的一个实例。也就是说,instanceof用来判断一个对象是不是属于一个类。

public class Animal{
    Animal cat = new cat();
    if(cat instanceof Dog){
       //false
        sout("猫是狗类");
    }else{
       //true
        sout("猫不是狗类");
    }
}
public class Cat extends Animal{}
public class Dog extends Animal{}

这种方法的作用是判断能否强转。例如,欲将cat对象强转为Dog类,即执行如下代码:

Dog dog = (Dog) cat;

在编译时程序不报错,但运行时程序会报错。为了避免程序在运行时报错,增加debug的工作量,提前用instanceof判断能否具备强转资格,不具备则执行else语句。

四 String类

4.1 replace替换方法

replace方法将字符串中的指定内容换成新内容。例如:将字符串中的“1111”替换为“2222”:

String str = "my1111";
String newStr = str.replace("1111","2222");

此时,newStr的值为“my2222”。若有一字符串为“my1111and1111”,需要替换为“my2222and1111”,则使用replaceFirst方法,即:

String str = "my1111and1111";
String newStr = str.replaceFirst("1111","2222");

此时newStr的值为“my2222and1111”。同理,若替换全部,则使用replaceAll。

4.2 spilt分隔方法

通过制定符号将字符串分隔,最终返回数组类型,例:

String str = "北京|天津|上海|广州";
String[] arrays = str.split("\\|");

即可按照|进行分隔,结果为:

arrays[0] = "北京" arrays[1] = "天津" arrays[2] = "上海" arrays[3] = "广州"

注意:"\"为转译符,若不添加,则程序可能出错。

4.3 indexOf方法

indexOf方法用来判断字符串中是否存在指定的字符,若存在则返回开始的下标,不存在则返回-1,例:

String str = "aoligei";
System.out.println(str.indexOf("li")); //存在,返回2
System.out.println(str.indexOf("wang")); //不存在,返回-1

如果想要从某一处开始查找,只需知道起点的下标index,执行如下代码:

System.out.println(str.indexOf("li",index)); 

五 Math类

Math类没有提供公开访问的构造函数,因为在其源码中,无参构造函数是私有的。且提供的api方法都加上了static关键字,因此使用该方法,可写:类名称.方法名称,例:

Math.abs(数); // 返回绝对值
Math.ceil(double类型的数); // 向上取整
Math.floor(double类型的数); // 向下取整
Math.round(double类型的数); // 四舍五入
Math.max(sum1,sum2); // 返回大的数
Math.min(sum1,sum2); // 返回小的数
Math.pow(a,b); // 返回a的b次幂,double类型
Math.random(); // 返回一个随机数,范围是[0.0,1.0)

六 System类

受final修饰,是最终类,无法被继承。其方法均为final,无参构造方法是私有的,故没有提供公开访问的构造函数。主要api:

System.exit(0); // 正常停止jvm,下面的代码不继续运行。设定值零表示正常退出,非零表示异常退出
System.currentTimeMillis(); // 获取当前系统时间,1970年1月1日至当前时间,返回long类型,以毫秒为单位

例如,要判断for循环执行了多长时间:

long start = System.currentTimeMillis();
for(){}
long end = System.currentTimeMillis();

那么,for循环的执行时间就是end-start(单位:毫秒)。

七 Arrays类

Arrays是util包下的类,此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法。

int arrs = {94,88,25,36,4};
System.out.println(arrs); // 输出的是内存地址
String str = Arrays.toString(arrs); // 将数组转化成字符串
System.out.println(arrs); // 输出的是[94,88,25,36,4]
Arrays.sort(arrs); // 排序,底层封装好了快速排序,传递的数组是引用类型的
System.out.println(Arrays.toString(arrs)); // 输出的是[4,25,36,88,94]

那么Arrays类就相当于一个工具类。众所周知,java是一个面向对象的语言,如果工程师不满足jdk提供的工具类,也可自行构造和封装工具类,便于以后直接使用。在构造工具类时,要注意:

构造方法用private关键字修饰,即构造方法为私有类型,不提供公开访问的构造函数。

用public static关键字修饰工具类的方法,可直接通过类名.构造方法使用该工具。

八 基本数据类型对应的包装类

Java中的基本数据类型:四种整数型(byte,short,int,long),两种浮点型(float,double),一种字符型(char),布尔类型(boolean),对应包装类:

请添加图片描述

8.1 Integer

int属于基本数据类型,Integer包装了int类型。包装类就是对原始基本数据类型进行包装,基本方法是相同的,目的是便于与字符串类型之间相互转化。

Integer.MAX_VALUE; // int的最大值 2147483647
Integer.MIN_VALUE; // int的最小值 -2147483648

Integer的构造方法:

Integer a = new Integer(数); // 传递数值,已过时
Integer.valueOf(数); // 传递数值
Integer b = new Integer("数字"); // 传递数字型的字符串,强转成整数类型,已过时
Integer.valueOf("数字"); // 传递数字型的字符串,强转成整数类型

8.2 String类中的valueOf方法

将int类型转为字符串类型:

int a = 5;
String a1 = ""+a; // 第一种方式
String a2 = String.valueOf(a); // 第二种方式。valueOf方法重载,可将int,char,char[],long,float,double,boolean,Object类型转为字符串

使用String中的valueOf方法,可将多种类型直接转换成String类型。

8.3 int和String相互转换

将String类型转换成int类型,前提条件是String类型存放的字符串必须是数字。

String str = "12345";
Integer sum = Integer.valueOf(str); // 字符串转数字
int i = sum.intValue(); // 返回int类型

intValue不是静态方法,需要先new出对象,通过“对象实例.intValue”方法,sum是一个对象。还可使用parseInt方法:

String str = "12345";
int a = Integer.parseInt(str); // a = 12345

8.4 int和Integer的区别

int属于基本数据类型,Integer属于int的包装类,是一个类,需要new对象。

基本数据类型 存放在栈中,包装类 存放在堆中。

在输出包装类时,底层会调用toString方法。

Integer默认值为null,int默认值为0。

包装类通过引用传递,数据类通过值传递。

在实际开发中,往往使用包装类,很少使用基本数据类型。

8.5 java的装箱和拆箱

装箱:自动将基本数据类型转换为包装类型。

拆箱:自动将包装类型转换为基本数据类型。

Integer a = 100; // 装箱 基本数据类型->为包装类型
int b = a; // 拆箱 包装类型->为基本数据类型

装箱的底层是Integer.valueOf(int i),拆箱的底层是intValue()。

九 Date类

使用Date类时,应引入java.util.Date,注意不要引到别的包。

Date date = new Date();
System.out.println(date); // 输出一串描述时间的字符串

9.1 常用方法

Date date = new Date();
date.getTime(); // 返回的是从1970年1月1日零点 到 现在的毫秒数 时间戳
long time = 1000*60*60; //一小时
date.setTime(time); // 此时date表示的时间为初始时间+time,要考虑时差

9.2 SimpleDateFormat

SimpleDateFormat可以将Date对象转化为便于阅读的时分秒格式字符串,也可把字符串转化为对象。

Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); // 无参构造
String strDate = simpleDateFormat.format(date); // 22-09-11 下午3:50

SimpleDateFormat simpleDateFormat = new SimpleDateFormat(yyyy年MM月dd日HH小时mm分ss秒); // 有参构造
String strDate = simpleDateFormat.format(date); // 2022年9月11日15小时50分31秒

SimpleDateFormat.format方法 将date日期转化为字符串。相反,若将字符串转化为date,则:

String strDate = "2022-09-11 15:50:31";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式一定要对上
Date date = simpleDateFormat.parse(strDate); // 字符串转换为date

十 Calendar类

抽象类,不能被new出来,可以去new它的子类。

Calendar c = Calendar.getInstance(); // 遵循多态机制
int year = c.get(Calendar.TEAR); // 获取年
int month = c.get(Calendar.MONTH) +1 ; // 获取月
int date = c.get(Calendar.DATE); // 获取日

Calendar常用api方法:

Calendar c = Calendar.getInstance(); // 遵循多态机制
c.add(Calendar.YEAR,2); // 加两年
c.add(Calendar.MONTH,-3); // 减三个月
c.add(Calendar.DATE,6); // 加六天
c.set(年,月,日); // 自己设置时间
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值