全部章节 >>>>
本章目录
6.1 Object类
6.1.1 Object类概述
Java可以把任何类型的对象赋值给Object类型的变量。
如果一个类在声明时没有使用extends关键字为其显示指定父类,则该类默认继承Object类。
所有数组类型都继承于Object类(包括对象数组和基本数据类型数组)。
6.1.2 Object的常用方法
方法名 |
返回类型 |
说明 |
equals(Object obj) |
boolean |
判断指定对象与该对象是否相等 |
hashCode() |
int |
返回该对象的哈希码值 |
toString |
String |
使用字符串表示该对象信息 |
说明:
默认情况下,Object类的hashCode()方法根据该对象的内存地址来计算,但很多类都重写了Object类的hashCode()方法。
当使用System.out.println()方法输出一个对象,或者将某个对象和字符串进行连接运算时,系统会自动调用该对象的toString()方法,返回该对象的字符串信息。
Object类的toString()方法默认返回“运行时类名+@+十六进制的hashCode值”格式的字符串。
示例:演示Object常用方法
-
UserInfo userInfo=
new UserInfo();
-
//当前对象与行创建的UserInfo对象比较内存地址
-
boolean flag=
this.equals(userInfo);
-
System.out.println(
"equals()返回值:"+flag);
-
//调用本类中重写父类的toString()方法
-
String tsResult=
this.toString();
-
System.out.println(
"toString()返回值:"+tsResult);
-
//调用hashCode()方法
-
int hashCode=
this.hashCode();
-
System.out.println(
"hashCode()返回值:"+hashCode);
-
//重写Object类的toString()
-
public String toString(){
return
"重写了父类的toString方法"; }
6.1.3 实践练习
6.2 String类和StringBuffer类
String类和StringBuffer类主要用于处理字符串,这两个类提供了许多字符串的实用处理方法。
String类是一个不可变类(被final修饰),一个String对象所包含的字符串内容永远不会被改变。
StringBuffer类是可变类,一个StringBuffer对象所包含的字符串内容可以被 添加或修改。
6.2.1 String类构造方法
构造方法 |
说明 |
String() |
创建一个内容为空的字符串 |
String(String value) |
初始化一个新创建的String对象,使其表示一个与参数相同的字符序列 |
String(byte[]bytes,Charset charset) |
使用指定的字符编码,将指定的byte[]数组构造成一个字符串 |
String(char[] char) |
将制定的char[]数组构造成一个字符串 |
6.2.2 String类常用方法
方法名 |
说明 |
char charAt(index) |
获取字符串中指定位置的字符。其中,参数index指的是字符串的序数,字符串的序数从0开始到length()-1 |
String concat(String str) |
将该String对象与str连接在一起。与Java提供的字符串连接运算符“+”的功能相同 |
Boolean equals(Object anObject) |
将该字符串与指定对象相比,如果两者包含的字符序列相等,则返回true;否则返回false |
byte[] getBytes() |
将该String对象转换成byte数组 |
int indexOf(String str) |
找出str子字符串在该字符串中第一次出现的位置 |
int length() |
返回当前字符串的长度 |
String replace(char oldChar,char newChar) |
将字符串中的第一个oldChar替换成newChar |
boolean endsWith(String sufffix) |
该String对象是否以sufffix结束 |
String substring(int beginIndex,int endIndex) |
获取从beginIndex位置开始到endIndex(不包括)位置的子字符串 |
char[] toCharArray() |
将该String对象转换成char数组 |
String toUpperCase() |
将字符串转换成大写 |
示例:演示String类常用方法的使用
-
int index=value.indexOf(
"A");
//第一次出现指定字符串的下标,如果未出现,则返回-1
-
System.out.println(
"第一次出现字母A的下标:"+index);
-
int length=value.length();
//字符串的长度
-
System.out.println(
"输入字符串的长度:"+length);
-
boolean flag=
"Hello String".equals(value);
//判断两个字符串字面值是否相等
-
System.out.println(
"控制台输入的字符串是否与Hello String字面值相等:"+flag);
-
boolean tag=value.endsWith(“.java”);
//判断结尾处是否包含“.java”
-
System.out.println(
"控制台输入的字符串是否以.java结尾:"+tag);
-
String newValue=value.toUpperCase();
//转换大写字母
-
System.out.println(
"控制台输入字符串转换为大写字母值:"+newValue);
-
String val=value.substring(
0,
2);
//字符串截取
-
System.out.println(
"按照从0下标开始截取长度为2的子字符串:"+val);
-
String[] str=value.split(
"-");
//按照给定格式拆分字符串,返回一个String[]数组
-
System.out.println(
"将按照-拆分后返回的字符串数组遍历结果:");
-
for(String data:str){ System.out.println(data); }
注意:
==”比较的是两个对象的内存地址是否相同,而Object中的equals()方法默认比较的也是两个对象的内存地址是否相同。
但由于String类重写了Object类的equals()方法,重写的逻辑是比较当前调用对象与被比较对象的字符串字面值,如果相同则返回true,否则返回false。
思考:
比较以下创建字符串对象的两种方式
String str1="hello";
String str2=new String("hello");
分析:
虽然引用变量str1与引用Str2最终的字面值相等,但是str1与str2直接指向的不是同一对象。
使用new String(“hello”)在创建对象时,首先在堆内存中创建一个”hello“对象,然后再查找常量池中是否存在“hello”字符串对象,如果存在,则不会在常量池中再创建一个新的“hello”对象,否则则会创建一个新的“hello”对象。
6.2.3 StringBuffer类常用方法
StringBuffer代表一个字符序列可变的字符串。
StringBuffer提供的append()、insert()、reverse()以及setCharAt()等方法,可以改变该
StringBuffer对象的字符序列。
提醒:String是不可变类,如果使用String创建字符串,则会额外生成很多字符串,耗费系统资源。
方法名 |
说明 |
StringBuff append(String str) |
将字符串str追加到当前StringBuffer对象 |
StringBuffer insert (intoffset , String str) |
按顺序将字符串str插入到当前StringBuffer对象的 intoffset位置 |
StringBuffer reverse() |
将当前StringBuffer对象的字符序列用其反转形式取代 |
void setCharAt(int index, char ch) |
将index索引处的字符设置为ch |
示例:演示StringBuffer类常用方法的使用
-
StringBuffer stringBuffer=
new StringBuffer();
-
stringBuffer.append(
"Intelligence");
//追加字符串
-
System.out.println(
"当前stringBuffer对象值:"+stringBuffer);
-
System.out.println(
"在下标0插入Artificial后的值:"+stringBuffer.insert(
0,
"Artificial "));
//在指定位置添加字符串
-
stringBuffer.replace(
10,
11,
"-");
//将指定位置的内容进行替换
-
System.out.println(
"stringBuffer长度:"+stringBuffer.length());
-
System.out.println(
"翻转后的内容:"+stringBuffer.reverse());
//将内容进行反转
-
String str=
"Java";
-
String newStr=str+
" Android";
//将"Java"字符串与“ Android”字符串连接后赋值给newStr变量
-
System.out.println(
"str的值="+str);
-
System.out.println(
"newStr值="+newStr);
-
System.out.println(
"str==newString?="+(str==newStr));
-
StringBuffer sb=
new StringBuffer();
-
sb.append(
"Cloud");
-
System.out.println(
"sb的值="+sb);
-
StringBuffer sBuffer=sb.append(
" Computing");
-
System.out.println(
"sBuffer的值="+sBuffer);
-
System.out.println(
"sb==sBuffer?="+(sb==sBuffer));
6.2.4 实践练习(一)
6.2.5 实践练习(二)
6.3 Math类
6.3.1 Math类运算操作
Java提供“+”“-”“*”“/”和“%”等基本算术符运算符。
但对于较为复杂的运算,如三角函数、指数函数和绝对值函数等运算,基本运算符无法完成相关的操作。
Java提供了工具Math类来完成这些复杂的运算。
Math类的方法都是静态方法
示例:演示Math类常用方法的使用
-
System.out.println(
"27的算数立方根的值="+Math.cbrt(
27));
-
System.out.println(
"4的平方根的值="+Math.sqrt(
4));
-
System.out.println(
"3的2次方的值="+Math.pow(
3,
2));
-
System.out.println(
"-4.5的绝对值="+Math.abs(-
4.5));
-
System.out.println(
"8和10两个数的最大值="+Math.max(
10,
8));
-
//返回一个随机数,该值的范围在0.0~1.0之间
-
System.out.println(
"产生的随机数值="+Math.random());
-
System.out.println(
"5.5四舍五入后的值="+Math.round(
5.5));
-
System.out.println(
"弧度为π/6的正弦值="+Math.sin(Math.PI/
6));
6.3.2 实践练习
6.4 日期处理类
6.4.1 Date类
Java提供了java.util.Date类处理日期、时间,Date对象既包含日期,也包含时间。
Date类提供了两个构造器。
构造方法 |
说明 |
Date() |
创建一个代表当前日期时间的Date对象 |
Date(long time) |
根据指定long类型整数生成一个Date对象 |
说明:Date(long time),该构造器的参数表示创建的Date对象和GMT1970年1月1日00:00:00之间的时间差,以毫秒作为计算单位。
示例:演示Date类构造方法的使用
-
//使用无参构造方法创建Date对象
-
Date date=
new Date();
-
System.out.println(
"当前系统时间:"+date);
-
Date newDate=
new Date(
1000*
60*
60*
24*
20);
-
System.out.println(
"1970年1月1日的20天后的时间="+newDate);
注意:
Date类的很多方法已经不推荐使用了。例如,对时间进行加减运算,获取指定Date对象的年、月、日的所有方法都已被弃用。
如果需要对日期进行这些运算,则应该使用Calendar工具类。
6.4.2 Calendar类
- 由于Date类在设计上的一些问题,所以Java提供了Calendar类来更好地处理日期和时间
- Calendar类是一个抽象类,所以不能实例化Calendar对象。但是Calendar类提供过了静态的方法getInstance(),以获得Calendar对象。
- Calendar与Date类都是表示日期的工具类,两者可以直接相互转换。
通过getInstance()方法创建Calendar的子类对象
Calendar calendar=Calendar.getInstance();
从Calendar中获取Date对象
Date date=calendar.getTime();
通过Date对象获得对应的Calendar对象
calendar.setTime(new Date());
示例:使用Calendar类实现对日期的操作
-
Calendar calendar=Calendar.getInstance();
-
//创建一个距离1970年1月1日2天后的日期对象
-
Date date=
new Date(
1000*
60*
60*
24*
2);
-
System.out.println(date);
-
calendar.setTime(date);
//将date对象赋给Calendar对象
-
System.out.println(
"年:"+calendar.get(Calendar.YEAR)+
"年");
//获取年份
-
System.out.println(
"月:"+calendar.get(Calendar.MONTH)+
1+
"月");
//获取月份
-
System.out.println(
"日:"+calendar.get(Calendar.DATE)+
"日");
//获取日期
-
System.out.println(
"星期:"+(calendar.get(Calendar.DAY_OF_WEEK)-
1));
//获取星期
-
System.out.println(
"本年的第:"+calendar.get(Calendar.DAY_OF_YEAR)+
"天");
//这一天是一年中的第几天
6.4.3 SimpleDateFormat类
SimpleDateFormat是一个日期时间格式化类,该类位于java.text包中。
该类可以灵活地格式化Date对象,也可以用于解析各种格式的日期字符串。
使用String类型的SimpleDateFormat类的构造器创建对象时,需要传入一个模板字符串
日期格式化模板标记
标记 |
说明 |
y |
年。年份是4位数时,需要写成yyyy |
M |
年份中的月。年份是2位数时,需要写成MM |
d |
月中的天数。天数是2位数时,需要写成dd |
H |
一天中的24小时。小时是2位数,需要写成HH |
m |
小时中的分钟数。分钟是2位数,需要写成mm |
s |
分钟中的秒数。秒是2位数,需要写成ss |
示例:SimpleDateFormat类具体操作
-
public
class SimpleDateFormatUse {
-
private
static
final String PARRENT1 =
"yyyy-MM-dd HH:mm:ss";
-
private
static
final String PARRENT2 =
"yyyy年MM月dd日 HH时mm分ss秒";
-
public static void parse(String strDate) {
-
//创建SimpleDateFormat对象。y代表年、M代表月、d代表日,HH代表24小时制的时、m代表分、s代表秒
-
SimpleDateFormat sdf =
new SimpleDateFormat(PARRENT1);
-
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat(PARRENT2);
-
try {
-
//将字符串日期转换成Date对象
-
Date date = sdf.parse(strDate);
-
//将date对象重新转换成“yyyy年MM月dd日 HH时mm分ss秒”格式的日期字符串
-
String str = simpleDateFormat.format(date);
-
System.out.println(strDate +
":解析成的Date=" + date);
-
System.out.println(
"date对象按照"+PARRENT2+
"格式转换后的字符串日期:");
-
System.out.println(str);
-
}
catch (ParseException e) {e.printStackTrace();}
-
}
6.4.4 实践练习
总结:
- Object类是所有Java类的父类。可以根据具体的业务逻辑重写Object的equals()方法,用以判断两个对象是否相等。
- String类是一个不可变类(被final修饰),一个String对象所包含的字符串内容永远不会被改变。而StringBuffer类是可变类,一个StringBuffer对象所包含的字符串内容可以被添加或修改。
- Math类的random()方法随机生成一个0~1之间的double小数。
- Date类和Calendar类都是是时间处理类,但是Calendar类能更好地处理日期和时间。
- Calendar类是一个抽象类,所以不能实例化Calendar对象,可以通过Calendar类提供过的静态方法getInstance()来获得Calendar对象。
- SimpleDateFormat是一个日期时间格式化类,该类位于java.text包中。该类可以灵活地格式化Date对象,也可以用于解析各种格式的日期字符串,使用String类型的SimpleDateFormat类的构造器创建对象时,需要传入一个模板字符串。
转载:https://blog.csdn.net/weixin_44893902/article/details/106583330