全部章節 >>>>
本章目錄
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類的構造器創建對象時,需要傳入一個模板字符串。