常用的java类

本文深入讲解Java中的核心类,如Object、String、Math等的基本用法及特点,并介绍集合类如List、Set等的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Object类
2、String、StringBuffer StringBuilder类
3、包装类
4、Math类和Random类
5、处理日期的类
6、BigDecimal类

7、集合类

Object类

Object类是所有Java类的最终祖先,如果一个类在声明时没有包含extends关键词,那么这个类直接继承Object类。
Object类有一个默认构造方法,在构造子类实例时,都会先调用这个默认构造方法。
         public Object(){} //方法体为空


Object类有以下主要成员方法:
equals(Object obj):比较两个对象是否相等。仅当被比较的两个引用变量指向同一对象时,equals()方法才返回true。
notify():从等待池中唤醒一个线程,把它转移到s锁池。
notifyAll():从等待池中唤醒所有的线程,把他们转移到锁池。
wait():使当前线程进入等待状态,直到别的线程调用notify()或notifyAll()方法唤醒它。
hashCode():返回对象的哈希码。HashTable和HashMap会根据对象的哈希码来决定它的存放位置。
toString():返回当前对象的字符串表示,格式为“类名@对象的十六进制哈希码” 。
finalize():对于一个已经不被任何引用变量引用的对象,当垃圾回收器准备回收对象所占用的内存时,将自动调用该对象的finalize()方法。


String类

String类有以下构造方法:
String():创建一个内容为空的字符串“”。
String(String value):字符串参数指定字符串的内容。
String(char[] value):字符数组参数指定字符串的内容。
String(byte[] bytes):根据本地平台默认的字符编码,由字节数组构造一个字符串。
String(byte[] bytes,String charsetName):根据参数charsetName指定的字符编码,由字节数组构造一个字符串。
String类有以下常用方法:
length():返回字符串的字符个数。
char charAt(int index):返回字符串中index位置上的字符,其中index的取值范围是0~字符串长度-1。
getChars(int srcBegin,int srcEnd,char dst[],int dstbegin):从当前字符串中拷贝若干字符到参数指定的字符数组dst[]中。从srcBegin位置开始取字符,到srcEnd-1位置结束,dsbegin为提取的字符存放到字符数组中的起始位置。
见备注

String类与StringBuffer类

String类和StringBuffer类有以下相同点:
String类和StringBuffer类都用来处理字符串。
String类和StringBuffer类都提供了length()、toString()、charAt()和substring()方法,它们的用法在两个类中相同。
对于String 类和StringBuffer类,字符在字符串中的索引位置都从0开始。
两个类中的substring(int beginIndex,int endIndex)方法都用来截取子字符串,而且截取的范围都从beginIndex开始,一直到endIndex-1为止,截取的字符个数为endIndex-beginIndex

String类和StringBuffer类有以下不同点:


String类是不可变类,而StringBuffer类是可变类。
String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法
两个类都覆盖了Object类的toString()方法,但各自的实现方式不一样。
String类对象可以用操作符“+”进行连接,而StringBuffer类对象之间不能通过操作符“+”进行连接。


Math类

java.lang.Math类提供了许多用于数学运算的静态方法,包括指数运算、对数运算、平方根运算和三角运算等。Math类还有两个静态常量:E(自然对数)和PI(圆周率)。Math类是final类型的,因此不能有子类。另外,Math类的构造方法是private类型的,因此Math类不能够被实例化。
Math类的主要方法包括以下几种:
abs():返回绝对值。
ceil():返回大于或等于参数的最小整数。
floor():返回小于或等于参数的最大整数。
max():返回两个参数的较大值。
min():返回两个参数的较小值。
random():返回0.0和1.0之间的double类型的随即数,包括0.0,但不包括1.0。
round():返回四舍五入的整数值。
sqrt():平方根函数。
pow():幂运算。


Random类


java.util.Random类提供了一系列用于生成随即数的方法。
nextInt():返回下一个int类型的随即数,随即数的值大于或等于0。
nextInt(int n):返回下一个int类型的随即数,随即数的值大于或等于0,并且小于参数n。
nextLong():返回下一个long类型的随即数,随即数的值位于long类型的取值范围内。
nextFloat():返回下一个float类型的随即数,随即数的值大于或等于0,并且小于1.0。
nextDouble():返回下一个double类型的随即数,随即数的值大于或等于0,并且小于1.0。
nextBoolean():返回下一个boolean类型的随即数,随即数的值为true或false。


Date类和DateFormat类


Date类以豪秒来表示特定的日期。
Date类的默认构造方法调用System.currentTimeMillis()方法获取当前时间,new Date()语句等价于:new Date(System.currentTimeMillis());

例如:
Date date=new Date();//创建一个代表当前日期和时间的Date对象
System.out.println(date.getTime());   //getTime()方法返回Date对象包含的豪秒数
System.out.println(date);


以上程序打印结果为:
1143096401969
Thu Mar 23 14:46:41 CST 2006

java.text.DateFormat类提供了将日期/时间信息进行格式化处理的功能,主要是将日期/时间信息(Date类型数据)转换成人们所习惯的格式字符串以及反向转换的功能。

public static final DateFormat getDateInstance() 获得一个具有默认语言环境、默认格式化风格的DateFormat对象。
public static final DateFormat getDateInstance(int style,Locale aLocale)获得具有给定语言环境、给定格式化风格的DateFormat对象。

public static final DateFormat getTimeInstance() 获取具有默认语言环境、默认格式化风格的日期/时间DateFormat对象。
public final String format(Date date) 将一个Date对象格式化为日期/时间字符串。
DateFormat类中定义了相应的整型常量来标识各种转换风格,包括:DateFormat.SHORT、DateFormat.MEDIUM、DateFormat.LONG、DateFormat.FULL。

Calendar类

java.util.Calendar类的set()和get()方法可用来设置和读取日期的特定部分,比如年、月、日、时、分和秒等。Calendar类是抽象类,不能实例化,它有一个具体的子类,即java.util.GregorianCalendar。 GregorianCalendar采用格林尼治标准时间,

GregorianCalendar cal=new GregorianCalendar(); //表示当前日期
System.out.println(new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss EEEE”).format(cal.getTime()));
cal.clear(); //清除日期的各个部分
cal.set(Calendar.YEAR,2006);//重新设置年
cal.set(Calendar.MONTH,Calendar.JULY);//重新设置月
cal.set(Calendar.DAY_OF_MONTH,15);//重新设置日
cal.set(Calendar.HOUR_OF_DAY,12);//重新设置小时
cal.set(Calendar.MINUTE,33);//重新设置分
cal.set(Calendar.SECOND,55);//重新设置秒
System.out.println(new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss EEEE”).format(cal.getTime()));
以上程序打印结果如下:
2006-03-23 03:53:31 星期四
2006-07-15 12:33:55 星期六

BigDecimal类


如果实际应用程序允许存在适当的误差,那么可以使用float或double类型。如果需要进行精确运算,则应该使用java.math.BigDecimal类。BigDecimal类支持浮点数的精确加法、减法和乘法运算,对于浮点数的除法运算,可以满足用户指定的精度。BigDecimal类包括以下方法:
add(BigDecimal b):进行精确的加法运算
subtract(BigDecimal b):进行精确的减法运算
multiply(BigDecimal b):进行精确的乘法运算
divide(BigDecimal b,int scale,RoundingMode mode):进行除法运算。参数 scale指定需要精确到小数点以后几位。参数mode指定小数部分的舍入模式,如果取值为BigDecimal.ROUND_HALF_UP,则表示采用四舍五入模式。


集合类


Iterator接口

每个堪称容器的东西都提供了Iterator接口。
Iterator接口定义了枚举容器中的所有元素的标准方法
.hasNext()  是否还有下一个元素?
.next() 取得下一个元素


Vector是一个容器

它提供了Iterator接口
两种方法支持接口
implements 接口
返回代表接口的对象

Iterator x = v.iterator();


while(x.hasNext()){
   Object o = x.next();
   System.out.println(o);
}

集合与列表的区别


Set中的元素不能重复
类似数学中集合的概念,元素是唯一的
怎么叫做重复?
List中的元素允许重复
隐含地有个顺序关系
支持ListIterator迭代器,能回溯


列表的标准能力


在指定的位置插入
void add(int index, Obeject newElement)
取得某个索引的元素
Object get(int index)
设置某个索引的元素
Object set(int index, Object newElement)
删除某个索引的元素
Object remove(int index)


为什么分为接口和具体类?


接口指明了应当具有的功能

具体类用不同的手段来实现
不同的手段在不同的场合互有长短
具体类的不同,体现在性能上,而不是功能上。


List

 //创建集合对象
List<String> list = new ArrayList<String>();
//添加数据
list.add("three");
list.add("one");
list.add("two");
list.add(null);
list.add("a");
list.add("b");
list.add(null);
list.add("c");
list.add(null);
//通过迭代器,迭代数据
Iterator<String> lit = list.iterator();
while(lit.hasNext()){
System.out.println(lit.next());
}
//指定位置插入数据
list.add(1, "xxxx");//o(n-i)

//for循环迭代
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}

TreeSet


用Tree的技术实现的Set结构
可以保证元素的有序性
操作时间,可保证为log(n)
空间很节省


HashSet

用Hash技术实现的Set结构
不能保证顺序
操作时间为常数(与n无关)
空间很浪费
一般要设在2倍以上操作较快

Set<Employee> set = new HashSet<Employee>();
set.add(new Employee(1));
set.add(new Employee(2));
set.add(new Employee(3));
set.add(new Employee(4));
set.add(new Employee(1));


System.out.println("长度:::"+set.size());


Iterator<Employee> it = set.iterator();

while(it.hasNext()){
System.out.println(it.next().toString());
}

Vector


实现了List接口,可以作为能够自动增长的数组来使用
Vector的操作是线程安全的,内置了同步控制机制
使用“块链”结构,兼有链表,数组的优点。

Vector<String> v = new Vector<String>();//10

//同步
v.add("one");
v.add("two");
v.add("three");
v.add("one");
v.add("two");
v.add("three");
v.add("one");
v.add("two");
v.add("three");
v.add("one");
v.add("two");
v.add("three");


System.out.println(v.size()+"--");

LinkedList


双向链表技术实现的List接口
线程不安全,需要自己控制
除List接口外,还实现了:
在头,尾的添加和删除
可以实现 Stack, Queue, double-ended Queue


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值