Java面向对象笔记 • 【第6章 Java常用类】
全部章节 >>>>
本章目录
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://www.cnblogs.com/vmuu/p/15663586.html
公众号:【明金同学】