JAVA常用类的常用方法(Object,Date,Date Format,Calendar,System,StringBuilder,Math)

Object类

toString方法

直接使用

String toString() 返回该对象的字符串表示

示例:

public static void main(String[] args){
	Person person = new Person("小美", 20);
	String s = person.toString();
	System.out.println(s);
}

运行后输出结果为包路径以及person对象的地址
删掉toString方法这行后输出不变
故直接打印对象的名字,就是调用对象的toString方法。

重写后使用

直接打印对象的地址值在大多数情况下并没有什么用处,所以我们需要重写toString方法。

比如:

public static void main(String[] args){
	Person person = new Person("小美", 20);
	String s = person.toString();
	System.out.println(s);
}

@Override
public String toString(){
	return 111;
}

这时候不管上面的对象里是什么内容
下面你写了return 111,它就会返回111
你写什么,它返回什么

但这么写似乎也没什么意义,
我们用它是想按自己的格式来输出对象信息

所以我们会这样做:

public static void main(String[] args){
	Person person = new Person("小美", 20);
	String s = person.toString();
	System.out.println(s);
}
public String toString(){
	return "name:" + name + ",age:" + age;
}

这时打印出的结果就是:
name:小美,age:20

equals方法

指示其他某个对象是否与此对象“相等”。

方法详解

在源码中,该方法写成:

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

注意它用 == 这一比较运算符
对于基本数据类型(直接用,比如int long……)

==比较的是值

对于引用数据类型(需要new出对象使用的)

==比较的是两个对象的地址值

直接使用
public static void main(String[] args){
	Person person1 = new Person("小美", 20);
	Person person2 = new Person("小红", 18);
	boolean a = person1.equals(person2);
	System.out.println(a);
}

显然二者地址不同,
输出结果为false

重写后使用

equals方法默认比较两个对象的地址值,一般情况下没有意义

所以我们需要重写该方法,使其能进行对象属性之间的比较。

那么问题又来了:

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

该方法的传入参数为Object类
所以传入的对象也被转换为了Object
原理如下

Object obj = person2 = new Person("小红", 18);

经过这一转换
我们无法直接看到person2中的特有属性name和age

以上是多态的弊端

解决:我们使用向下转型来处理,把Object类型转换为Person。

重写代码示例
@Override
public boolean equals(Object obj){
	//传入的参数如果是this本身,直接返回true
	if(obj == this){
		return true;
	}
	//如果传入的参数为null,直接返回false
	if(obj == nall){
		return false;
	}
	//向下转型
	if(obj instanceof Person){
		Person p = (Person)obj;
		//比较两个对象的属性,一个是this(person1),另一个是p(obj -> person2)
		boolean a = this.name.equals(p.name) && this.age == p.age;
		return a;
	}
	//if条件不成立代表两个比较的对象不属于一个类,直接输出false
	return false;
	
}
拓展

Objects类可防止空指针异常(解决null不能调用方法的问题)

时间日期类

Date类

java.util.Date:表示日期和时间的类
类 Date 表示特定的瞬间,精确到毫秒

public static void main(String[] args){
	//获取时间原点(1970-01-01 00:00:00英国格林威治时间)到目前系统时间共经历了多少毫秒)
	//中国属于东八区,需要加八个小时
	long a = System.currentTimeMillis();
	//一天 = 24 x 60 x 60 = 86400秒
}
构造方法与成员方法
空参数构造

获取当前系统日期和时间

Date date = new date();
带参构造

传递毫秒值,将其转换为Date日期

Date date = new date(long date);
getTime()方法

时间→毫秒
相当于System.currentTimeMillis()

Date date = new Date();
long time = date.getTime();

DateFormat类

日期/时间格式化子类的抽象类
作用:格式化(日期→文本),解析(文本→日期)

因为是抽象类,所以不能直接创建对象,需通过子类进行方法调用👇

SimpleDateFormat子类

构造方法
SimpleDateFormat(String pattern)

用给定的模式和默认语言环境的日期格式符号构造
String pattern:传递指定的模式(区分大小写)

y
M
d
H
m
s

写对应的模式,会把模式替换为对应的日期和时间
比如:
“yyyy-MM-dd HH:mm:ss”

成员方法

String format(Date date)

按照指定的模式,把Date日期,格式化为符合模式的字符串

Date parse(String source)

把符合模式的字符串,解析为Date日期

Calendar类

Calendar类是一个抽象类,里边提供了很多操作日历字符的方法(YEAR, MONTH, DAY_OF_MONTH, HOUR)
Calendar类无法直接创建对象使用,里边有一个静态方法叫getInstance(),该方法返回了Calendar类的子类对象,包含各种信息👇
Calendar c = Calendar.getInstance();

常用方法

参数说明

int field:日历类的字段,可以使用Calendar类的静态成员变量获取

变量名意义
YEAR
MONTH
DATE月中的某一天
DAY_OF_MONTH月中的某一天
HOUR
MINUTE
SECOND

以上变量修饰符均为public static final int

int value:给指定字段设置的值

int amount:增加/减少指定的值(增加:正数,减小:负数)

public int get(int field)方法

返回给定日历字段的值。

//使用getInstance方法获取Calendar对象
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);

运行后year值为当前年份。
ps:西方月份为0-11

public void set(int field, int value)方法

将给定的日历字段设置为定值。

//使用getInstance方法获取Calendar对象
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2001)

将年份设置为2001年👆
也可以同时设置年月日👇

//使用getInstance方法获取Calendar对象
Calendar c = Calendar.getInstance();
c.set(2001,2,14);
public abstract void add(int field,int amount)方法

根据日历的规则,为给定的字段添加或减去指定的时间量。

public Date getTime()方法

返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。

通俗来讲,就是获取当前时间。

System类

currentTimeMillis()方法

返回以毫秒为单位的当前时间,常用来测试程序的效率

arraycopy(Object src, int srcPos, Object dest, int destPose, int length)方法

将数组中的指定数据拷贝到另一个数组中
参数说明:

  • src - 源数组
  • srcPos - 源数组中的起始位置
  • dest - 目标数组
  • destPos - 目标数组中的起始位置
  • length - 要复制的数组元素的数量

StringBuilder类

对于String类:
字符串是常量;它们在创建后不能改变
字符串的底层是一个被final修饰的数组,不能改变,是一个常量
源码:private final byte[] value;
进行字符串的相加,内存中就会有多个字符串,占用空间多,效率低下

对于StringBuilder类:
又被叫做字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
其底层也是一个数组,但是没有被final修饰,可以改变长度。
源码:byte value = new byte[16];

StringBuilder在内存中始终是一个数组,占用空间少,效率高

如果超出了StringBuilder的容量,会自动扩容

构造方法

StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符。

StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容。

常用方法

append(…)方法
添加任意类型数据的字符串形式,并返回当前对象自身。
无需接收返回值,自动返回👇

StringBuilder a = new StringBuilder(str);
a.append(12);
a.append("aaa");
a.append("hello");
//链式编程:返回方法值是一个对象,可以继续调用方法
a.append("aaa").append(111).append(true);

toString()方法
将StringBuilder转化为String

StringBuilder a = new StringBuilder(str);
String b = a.toString();

Math类

话不多说,直接上代码👇

      public static void main(String args[]){ 
        /** 
         *Math.sqrt()//计算平方根
         *Math.cbrt()//计算立方根
         *Math.pow(a, b)//计算a的b次方
         *Math.max( , );//计算最大值
         *Math.min( , );//计算最小值
         */
        System.out.println(Math.sqrt(16));  //4.0 
        System.out.println(Math.cbrt(8));  //2.0
        System.out.println(Math.pow(3,2));   //9.0
        System.out.println(Math.max(2.3,4.5));//4.5
        System.out.println(Math.min(2.3,4.5));//2.3
        /** 
         * abs求绝对值 
         */
        System.out.println(Math.abs(-10.4));  //10.4 
        System.out.println(Math.abs(10.1));   //10.1 
        /** 
         * ceil天花板的意思,就是返回大的值
         */
        System.out.println(Math.ceil(-10.1));  //-10.0 
        System.out.println(Math.ceil(10.7));  //11.0 
        System.out.println(Math.ceil(-0.7));  //-0.0 
        System.out.println(Math.ceil(0.0));   //0.0 
        System.out.println(Math.ceil(-0.0));  //-0.0 
        System.out.println(Math.ceil(-1.7));  //-1.0
        /** 
         * floor地板的意思,就是返回小的值 
         */
        System.out.println(Math.floor(-10.1)); //-11.0 
        System.out.println(Math.floor(10.7));  //10.0 
        System.out.println(Math.floor(-0.7));  //-1.0 
        System.out.println(Math.floor(0.0));  //0.0 
        System.out.println(Math.floor(-0.0));  //-0.0 
        /** 
         * random 取得一个大于或者等于0.0小于不等于1.0的随机数 
         */
        System.out.println(Math.random()); //小于1大于0的double类型的数
        System.out.println(Math.random()*2);//大于0小于1的double类型的数
        System.out.println(Math.random()*2+1);//大于1小于2的double类型的数
        /** 
         * rint 四舍五入,返回double值 
         * 注意.5的时候会取偶数  
         */
        System.out.println(Math.rint(10.1));  //10.0 
        System.out.println(Math.rint(10.7));  //11.0 
        System.out.println(Math.rint(11.5));  //12.0 
        System.out.println(Math.rint(10.5));  //10.0 
        System.out.println(Math.rint(10.51));  //11.0 
        System.out.println(Math.rint(-10.5));  //-10.0 
        System.out.println(Math.rint(-11.5));  //-12.0 
        System.out.println(Math.rint(-10.51)); //-11.0 
        System.out.println(Math.rint(-10.6));  //-11.0 
        System.out.println(Math.rint(-10.2));  //-10.0 
        /** 
         * round 四舍五入,float时返回int值,double时返回long值 
         */
        System.out.println(Math.round(10.1));  //10 
        System.out.println(Math.round(10.7));  //11 
        System.out.println(Math.round(10.5));  //11 
        System.out.println(Math.round(10.51)); //11 
        System.out.println(Math.round(-10.5)); //-10 
        System.out.println(Math.round(-10.51)); //-11 
        System.out.println(Math.round(-10.6)); //-11 
        System.out.println(Math.round(-10.2)); //-10 
      } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸运的小何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值