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类的构造器创建对象时,需要传入一个模板字符串。
Java面向对象笔记 • 【第6章 Java常用类】的更多相关文章
- Java学习笔记整理第一章 java基本数据类型、修饰符、运算符
Java关键字: Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量.Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的 ...
- [core java学习笔记][第四章对象与类]
4.3 用户自定义类 4.3.1 类数组的声明 需要两次new Employee[]=staff=new Employedd[3]; staff[0]=new Employedd(参数列表); sta ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- Java面向对象程序设计第14章3-8和第15章6
Java面向对象程序设计第14章3-8和第15章6 3.完成下面方法中的代码,要求建立一个缓冲区,将字节输入流中的内容转为字符串. import java.io.*; public class tes ...
- Java面向对象程序设计第9章1-9
Java面向对象程序设计第9章1-9 1. 线程和进程的联系和区别是什么? 联系: 一个进程可以包括多个线程. 区别: 进程: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统 ...
- Java面向对象程序设计第8章3-5
Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...
- Java面向对象程序设计第7章1-8
Java面向对象程序设计第7章1-8 1."程序中凡是可能出现异常的地方必须进行捕获或拋出",这句话对吗? 不对. 异常分两类,runtime异常和非runtime异常. runt ...
- java学习笔记6--类的继承、Object类
接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...
- Java 面向对象概述原理: 多态、Object类,转型(8)
Java 面向对象概述原理: 多态.Object类,转型(8) http://docs.oracle.com/javase/tutorial/java/IandI/override.html Java ...
随机推荐
- Virtual Destructor
Deleting a derived class object using a pointer to a base class that has a non-virtual destructor re ...
- ReactiveCocoa操作方法-线程\时间
ReactiveCocoa操作方法-线程 deliverOn: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用. subscribeOn: 内容传递和副作用 ...
- SQL count和sum
count(1).count(*)与count(列名)的执行区别 count(1) and count(字段) 两者的主要区别是 (1) count(1) 会统计表中的所有的记录数,包含字段为null ...
- Maven配置大全
maven项目打jar包(带依赖) <build> <plugins> <plugin> <artifactId>maven-assembly-plug ...
- 使用JSP实现输出
一.在JSP页面添加java代码,实现输出,java代码写在<% %>中. 代码示例1: <body> <!-- HTML注释 --> <%-- JSP注释 ...
- Jenkins多分支构建
目录 一.创建多分支pipeline 二.根据分支部署 gitlab触发与多分支 Generic Webhook多分支 一.创建多分支pipeline 在实际中,需要多分支同时进行开发.如果每个分支都 ...
- pipeline groovy
目录 一.变量 一.变量 1.直接定义 def x="abc" 2.从脚本执行结果赋值变量 branch = "/jen_script/return-branch.sh ...
- Nginx区分浏览器
目录 一.简介 二.配置 一.简介 场景: 不同浏览器对网页的兼容性是不一样的,所以针对火狐和curl,返回不同内容 原理: 使用if对http_user_agent变量进行判断,这个变量会显示访问时 ...
- ios获取文件MD5值
一般我们在使用http或者socket上传或者下载文件的时候,经常会在完成之后经行一次MD5值得校验(尤其是在断点续传的时候用的更 多),校验MD5值是为了防止在传输的过程当中丢包或者数据包被篡改,在 ...
- AtCoder Beginner Contest 173 题解
AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...