​​全部章节   >>>>​​


本章目录

​6.1 Object类​

​6.1.1 Object类概述​

​6.1.2 Object的常用方法​

​6.1.3 实践练习​

​6.2 String类和StringBuffer类​

​6.2.1 String类构造方法​

​6.2.2 String类常用方法​

​6.2.3 StringBuffer类常用方法​

​6.2.4 实践练习(一)​

​6.2.5 实践练习(二)​

​6.3 Math类​

​6.3.1 Math类运算操作​

​6.3.2 实践练习​

​6.4 日期处理类​

​6.4.1 Date类​

​6.4.2 Calendar类​

​6.4.3 SimpleDateFormat类​

​6.4.4 实践练习​

​总结:​


6.1 Object类

6.1.1 Object类概述

Java可以把任何类型的对象赋值给Object类型的变量。

如果一个类在声明时没有使用extends关键字为其显示指定父类,则该类默认继承Object类。

所有数组类型都继承于Object类(包括对象数组和基本数据类型数组)。

Java面向对象笔记 • 【第6章 Java常用类】_编程语言

6.1.2 Object的常用方法


方法名



返回类型



说明



equals(Object obj)



boolean



判断指定对象与该对象是否相等



hashCode()



int



返回该对象的哈希码值



toString



String



使用字符串表示该对象信息



说明:

默认情况下,Object类的hashCode()方法根据该对象的内存地址来计算,但很多类都重写了Object类的hashCode()方法。

当使用System.out.println()方法输出一个对象,或者将某个对象和字符串进行连接运算时,系统会自动调用该对象的toString()方法,返回该对象的字符串信息。

Object类的toString()方法默认返回“运行时类名+@+十六进制的hashCode值”格式的字符串。

Java面向对象笔记 • 【第6章 Java常用类】_string类_02


示例:演示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方法"; }

Java面向对象笔记 • 【第6章 Java常用类】_jdk_03

​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(intbeginIndex,intendIndex)



获取从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); }

Java面向对象笔记 • 【第6章 Java常用类】_字符串_04


注意:

==”比较的是两个对象的内存地址是否相同,而Object中的equals()方法默认比较的也是两个对象的内存地址是否相同。

但由于String类重写了Object类的equals()方法,重写的逻辑是比较当前调用对象与被比较对象的字符串字面值,如果相同则返回true,否则返回false。



思考:

比较以下创建字符串对象的两种方式

  String str1="hello";

  String str2=new String("hello");


Java面向对象笔记 • 【第6章 Java常用类】_编程语言_05


分析:

虽然引用变量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));

Java面向对象笔记 • 【第6章 Java常用类】_编程语言_06

​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));

Java面向对象笔记 • 【第6章 Java常用类】_java_07

​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);

Java面向对象笔记 • 【第6章 Java常用类】_编程语言_08


注意:

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)+"天"); //这一天是一年中的第几天

Java面向对象笔记 • 【第6章 Java常用类】_java_09

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();}
}

Java面向对象笔记 • 【第6章 Java常用类】_java_10

​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类的构造器创建对象时,需要传入一个模板字符串。