5.1、Java常用类
2021/4/29 20:55:49
本文主要是介绍5.1、Java常用类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
日期类
Date类
java.util.Date是用来处理日期、时间的一个类,并且自带toString方法
常用方法:
toString():显示当前的年、月、日、时、分、秒
getTime():获取当前Date对象对应的毫秒数。(时间戳)
SimpleDateFormat类
java.test.SimpleDateFormat
1、fomart方法,可以将Date类型的日期,转化为自定格式的字符串
2、parse方法,可以将字符串格式的日期,转化为Date类型的日期
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { public static void main(String[] args) throws ParseException { //Date类可以获取当前的日期 Date d1 = new Date(); //因为Date类有toString方法,所以可以直接输出 System.out.println(d1); //SimpleDateFormat类的format方法,可以将Date类型的日期,转化为自定格式的字符串 //其中yy-MM-dd hh-mm-ss中的字母格式固定 SimpleDateFormat s1 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒"); String str1 = s1.format(d1); System.out.println(str1); //SimpleDateFormat类的parse方法,可以将固定格式的字符串日期,转化为Date类型 String str2 = "2020-3-12 18-50-44"; SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss"); Date d2 = s2.parse(str2); System.out.println(d2); } } 输出 Tue Mar 30 12:18:27 CST 2021 2021年03月30日 12时18分27秒 Thu Mar 12 18:50:44 CST 2020
Calendar类
java.util.Calendar
Calendar类是一个抽象类,不可以被实例化,在程序中需要调用其静态方法getInstance()来得到一个Calendar对象,然后根据这个对象再调用其他的方法,例如:
Calendar calendar = Calendar.getInstance();
常用方法:
Object类
java.lang.Object
-
Object类是所Java类的根父类
-
如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类
-
Object类中的功能(属性、方法)就具通用性。
-
属性:无
-
方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()
/ wait() / notify() / notifyAll() -
Object类只声明了一个空参的构造器
equals()方法
-
是一个方法,而非运算符
-
只能适用于引用数据类型
-
Object类中equals()的定义:
public boolean equals(Object obj) { return (this == obj); }
-
说明:Object类中定义的equals()和==的作用是相同的:比较两个对象的地址值是否相同.即两个引用是否指向同一个对象实体
-
像String、Date、File、包装类等都重写了Object类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
-
通常情况下,我们自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,我们就需要对Object类中的equals()进行重写.
-
重写的原则:比较两个对象的实体内容是否相同.
-
如果equals方法比较两个对象返回为true,那么两个对象的hashcode一定相同
-
如果equals方法比较两个对象返回为false,那么两个对象的hashcode不一定不相同
==和equals的区别
-
==
既可以比较基本类型也可以比较引用类型。对于基本类型就是比较值,对于引用类型
就是比较内存地址 -
equals的话,它是属于java.lang.Object类里面的方法,如果该方法没有被重写过默认也
是==;我们可以看到String等类的equals方法是被重写过的,而且String类在日常开发中
用的比较多,久而久之,形成了equals是比较值的错误观点。 -
具体要看自定义类里有没有重写Object的equals方法来判断。
-
通常情况下,重写equals方法,会比较类中的相应属性是否都相等。
hashCode方法:
包装类
针对八种基本数据类型定义相应的引用类型—包装类(封装类)
基本数据类型、包装类和String类间的转化
自动装箱与自动拆箱
jdk5.0新加入特性
包装类的缓存机制
//a和b都使用的是Integer提供的缓存对象,所以地址一样 Integer a = 10; Integer b = 10; Sysout.out.println(a == b); 输出 true ***************************************************************** Integer a1 = new Integer(10); Integer b1 = new Integer(10); Sysout.out.println(a1 == b1); 输出 false ***************************************************************** //Integer提供了-128~127的缓存对象,所以在超过范围以后,会产生新的对象 Integer a2 = 128; Integer b2 = 128; Sysout.out.println(a2 == b2); 输出 false
除了Double和Float,其他包装类都有缓存对象!
整数:-128~127
Character:[0~127]
Boolean:true、false
缓存减少了频繁创建和销毁对象的次数!
String类
java.lang.String
概述
String:字符串,使用一对""引起来表示。
-
String声明为final的,不可被继承
-
String实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable接口:表示String可以比较大小
-
String内部定义了final char[] value用于存储字符串数据
-
通过字面量的方式(区别于new给一个字符串赋值,此时的字符串值声明在字符串常量池中)。
-
字符串常量池中是不会存储相同内容(使用String类的equals()比较,返回true)的字符串的。
常用方法:
boolean starsWith(String value): 判断一个字符串是否以value开始
boolean endsWith(String value): 判断一个字符串是否以value结尾
String类两种赋值方法的区别
一、通过字面量定义的方式
String s1 = "abc"; String s2 = "abc"; System.out.println(s1 == s2); 输出 true
此类赋值方法,会将"abc"存入字符串常量池中,由于字符串常量池内不会存放重复的字符串,在常量池中指向同一个"abc"对象,所以s1和s2的地址信息一样。
二、通过new + 构造器的方式
String s1 = new String("abc"); String s2 = new String("abc"); System.out.println(s1 == s2); 输出 false
此类赋值方法,s1和s2指向堆空间中的不同的String类型的对象,而这两个不同的String类型对象的char[
],指向常量池中的同一个“abc”对象,所以,s1和s2的地址信息不一样。
String s = new String("abc");方式创建对象,在内存中创建了几个对象?
两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:"abc"
两个字符串类型对象连接,如果在编译期,可以就确定值的情况下,那么连接的结果会放入字符串常量池;只要有一个是变量,连接的结果不会进入字符串常量池。
StringBuffer、StringBuilder类
三者的对比
-
String : 不可变的字符序列;底层使用char[]存储
-
StringBuffer : 可变的字符序列;线程安全的,效率低;底层使用char[]存储
-
StringBuilder :
可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
三者的执行效率对比
从高到低排列:StringBuilder > StringBuffer > String
常用方法(StringBuffer、StringBuilder)
-
增:append(xxx)
-
删:delete(int start,int end)
-
改:setCharAt(int n,char ch) / replace(int start,int end,String str)
-
查:charAt(int n )
-
插:insert(int offset , xxx)
-
长度:length();
-
缓冲区长度:capacity();
-
遍历:for() + charAt() / toString()
Math类
java.lang.Math
提供了一系列静态方法用于科学计算。其方法的参数和返回 值类型一般为double型。
常用方法
BigInteger类
java.math.BigInteger
BigInteger可以表示不可变的任意精度的整数。BigInteger 提供所有 Java
的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、
位操作以及一些其他操作。
构造器
BigInteger(String val):根据字符串构建BigInteger对象
BigDecimal类
java.math.BigDecimal
一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,
要求数字精度比较高,故用到BigDecimal类。BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
构造器:
public BigDecimal(double val)
public BigDecimal(String val)
常用方法:
比较器
自然排序:java.lang.Comparable
定制排序:java.util.Comparator
Comparable接口
重写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
使用方法:
//必须在需要排序的类中,实现Comparable接口,并且重写方法compareTo public class Goods implements Comparable<Goods>{ private double goodsPrice; @Override public int compareTo(Goods o) { return Double.compare(this.goodsPrice,o.goodsPrice); } }
Comparator接口
当元素的类型没实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用
Comparator 的对象来排序
重写compare(Object o1,Object o2)规则:
比较o1和o2的大小: 如果方法返回正整数,则表示o1大于o2;
如果返回0,表示相等;
返回负整数,表示o1小于o2。
使用方法:
//在新的类里面,进行Comparator接口的实现并且重写compare方法 public class GoodsesIdUp implements Comparator<Goods> { @Override public int compare(Goods o1, Goods o2) { return Double.compare(o1.getGoodsPrice(),o2.getGoodsPrice()); } }
两种排序方式对比
-
Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小。
-
Comparator接口属于临时性的比较。
UUID类
java.util.UUID
UUID是国际标准化组织(ISO)提出的一个概念。这个数值可以通过一定的算法计算出来。为了提高效率,常用的UUID可缩短至16位。UUID用来识别属性类型,在所有空间和时间上被视为唯一的标识。一般来说,可以保证这个值是真正唯一的任何地方产生的任意一个UUID都不会有相同的值。UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。
使用方法:
UUID.randomUUID()
这篇关于5.1、Java常用类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24怎么修改Kafka的JVM参数?-icode9专业技术文章分享
- 2024-12-23线下车企门店如何实现线上线下融合?
- 2024-12-23鸿蒙Next ArkTS编程规范总结
- 2024-12-23物流团队冬至高效运转,哪款办公软件可助力风险评估?
- 2024-12-23优化库存,提升效率:医药企业如何借助看板软件实现仓库智能化
- 2024-12-23项目管理零负担!轻量化看板工具如何助力团队协作
- 2024-12-23电商活动复盘,为何是团队成长的核心环节?
- 2024-12-23鸿蒙Next ArkTS高性能编程实战
- 2024-12-23数据驱动:电商复盘从基础到进阶!
- 2024-12-23从数据到客户:跨境电商如何通过销售跟踪工具提升营销精准度?