- Object對象
面向對象的核心思想:“找合適的對象,做適合的事情”。
合適的對象:
- 自己描述類,自己創建對象。
- sun已經描述了好多常用的類,可以使用這些類創建對象。
API(Application Program Interface)
sun定義的那麼多類的終極父類是Object。Object描述的是所有類的通用屬性與方法。
-
- toString方法
toString() 返回對象的描述信息 java.lang.Object@de6ced 類名@哈希碼值的十六進制形式。
直接輸入一個對象的時候,會調用對象的toString方法。
練習:自定義一個Person類,打印該對象的描述信息,要求描述信息爲:姓名 — 年齡
問題:調用p的toString方法時,打印出來的信息是類名+內存地址值。不符合要求。根據我們之前學的繼承,假如父類的指定的功能不能滿足要求,那麼子類可以複寫父類的功能函數。那麼該對象再調用toString()方法時,則會調用子類複寫的toString方法。
編程習慣:開發者要對自定義的類重寫toString(),對對象做詳細的說明
-
- equals方法
equals() 返回的是比較的結果 如果相等返回true,否則false,比較的是對象的內存地址值。
問題:比較兩個人是否是同一個人,根據兩個人的名字判斷。
問題:如果根據名字去作爲判斷兩個人是否是同一個時,明顯p與p1是同一個人,但是程序輸入卻不是同一個人。不符合我們現實生活的要求。
解決: 根據我們學的繼承中的函數複寫,如果父類的函數不能滿足我們目前的要求,那麼就可以在子類把該功能複寫,達到複合我們的要求。
編程習慣:開發者要對自定義的類重寫equals(),使得比較兩個對象的時候比較對象的屬性是否相等,而不是內存地址。
-
- hashCode方法
hashCode() 返回該對象的哈希碼值: 採用操作系統底層實現的哈希算法。 同一個對象的哈希碼值是唯一的。
java規定如果兩個對象equals返回true,那麼這兩個對象的hashCode碼必須一致。
- String類
String類描述的是文本字符串序列。 留言 QQ 寫日誌。
創建String類的對象的兩種方式:
- ""直接賦值法
- new關鍵字法
- 字符串對象的比較
String Str = “jack”這個語句會先檢查字符串常量池是否存放這個”jack1”這個字符串對象,如果沒有存在,那麼就會在字符串常量池中創建這個字符串對象,如果存在直接返回該字符串的內存地址值。
String str3 = new String(“jack”) 該語句會創建兩個對象,首先會先檢查字符串常量池中存不存在jack這個字符串對象,如果不存在就會創建,如果存在就返回內存地址值。創建了出來之後,new String這個語句就會在堆內存中開闢一個字符串對象。總共兩個對象。
-
- 獲取方法
int length() 獲取字符串的長度 char charAt(int index) 獲取特定位置的字符 (角標越界) int indexOf(String str) 獲取特定字符的位置(overload) int lastIndexOf(int ch) 獲取最後一個字符的位置 |
-
- 判斷方法
boolean endsWith(String str) 是否以指定字符結束 boolean isEmpty()是否長度爲0 如:“” null V1.6 boolean contains(CharSequences) 是否包含指定序列 應用:搜索 boolean equals(Object anObject) 是否相等 boolean equalsIgnoreCase(String anotherString) 忽略大小寫是否相等 |
-
- 轉換方法
String(char[] value) 將字符數組轉換爲字符串 String(char[] value, int offset, int count) Static String valueOf(char[] data) static String valueOf(char[] data, int offset, int count) char[] toCharArray() 將字符串轉換爲字符數組 |
-
- 其他方法
String replace(char oldChar, char newChar) 替換 String[] split(String regex) 切割 String substring(int beginIndex) String substring(int beginIndex, int endIndex)截取字串 String toUpperCase() 轉大寫 String toLowerCase() 轉小寫 String trim() 去除空格 |
-
- 練習
- 去除字符串兩邊空格的函數。
public class Demo1 { // 定義一個祛除字符串兩邊空格的函數 public static String trim( String str ){
// 0、定義求字串需要的起始索引變量 int start = 0; int end = str.length()-1; // 1. for循環遍歷字符串對象的每一個字符 for (int i = 0; i<str.length() ; i++ ) { if ( str.charAt(i) == ' ' ) { start++; }else{
break; } } System.out.println( start ); for (; end<str.length() && end >= 0; ) { if ( str.charAt(end) == ' ' ) { end--; }else{ break; } } System.out.println( end ); // 2. 求子串 if( start < end ){
return str.substring( start , (end+1) ); }else{
return "_"; } |
- 獲取上傳文件名 "D:\\20120512\\day12\\Demo1.java"。
public static String getFileName2( String path ){ return path.substring( path.lastIndexOf("\\") + 1 ); } } |
- 將字符串對象中存儲的字符反序。
// 將字符串對象中存儲的字符反序 public static String reaverseString( String src ){
// 1. 將字符串轉換爲字符數組 char chs[] = src.toCharArray(); // 2. 循環交換 for ( int start = 0 , end = chs.length - 1; start < end ; start++,end-- ) { // 3. 數據交換 char temp = chs[end]; chs[end] = chs[start]; chs[start] = temp; } // 4. 將字符數組轉換爲字符串 return new String( chs ); } |
4. 求一個子串在整串中出現的次數
public static int getCount( String src , String tag ){ // 0. 定義索引變量和統計個數的變量 int index = 0; int count = 0; // 1. 寫循環判斷 while ( ( index = src.indexOf(tag) ) != -1 ) // jackjava { // 2. 求字串 System.out.println( src ); src = src.substring( index + tag.length() ); // index 4 + 4 = 8 System.out.print( src.length() + " : " + index + " : " + tag.length() ); // 3. 累加 count++; } return count; } |
- StringBuffer
StringBuffer : 由於String是不可變的,所以導致String對象氾濫,在頻繁改變字符串對象的應用中,需要使用可變的字符串緩衝區類。
特點:
- 默認緩衝區的容量是16。
- StringBuffer : 線程安全的所有的緩衝區操作方法都是同步的。效率很低。
- 添加方法
StringBuffer("jack") 在創建對象的時候賦值 append() 在緩衝區的尾部添加新的文本對象 insert() 在指定的下標位置添加新的文本對象 |
StringBuffer sb = new StringBuffer("jack"); sb.append(true); sb.append('a'); sb.append(97).append(34.0).append(new char[]{'o','o'}); // 鏈式編程 System.out.println( sb.toString() ); // 輸出緩衝區的中文本數據 sb = new StringBuffer("jack"); sb.insert( 2, "java" ); // jajavack System.out.println( sb.toString() ); |
-
- 查看
toString() 返回這個容器的字符串 indexOf(String str) 返回第一次出現的指定子字符串在該字符串中的索引。 substring(int start) 從開始的位置開始截取字符串 |
-
- 修改(U)
replace(int start int endString str) 使用給定 String 中的字符替換此序列的子字符串中的字符。該子字符串從指定的 start 處開始,一直到索引 end - 1 處的字符 setCharAt(int index char ch) 指定索引位置替換一個字符 |
-
- 刪除(D)
-
- 反序
reverse() 把字符串反序輸出。
- StringBuilder
StringBuilder 是JDK1.5之後提出的,線程不安全,但是效率要高。用法與StringBuffer類似。
- System
System 可以獲取系統的屬性。
- Runtime
Runtime 類主要描述的是應用程序運行的環境。
- Date
Date 類封裝的是系統的當前時間.。但是Date已經過時了,sun推薦使用Calendar類。
Calendar: 該類是一個日曆的類,封裝了年月日時分秒時區。
日期格式化類:SimpleDateFormat
- Math
Math:類封裝了很多數學的功能。
練習:生成一個隨機碼
其他:
面向對象 java初學 https://blog.csdn.net/fei8888888/article/details/84451429
static關鍵字 封裝、繼承和多態 java初學-面向對象二 https://blog.csdn.net/fei8888888/article/details/84537367
抽象類、多實現、多繼承 java初學-面向對象三 https://blog.csdn.net/fei8888888/article/details/84537551
內部類、異常 java初學-面向對象四 https://blog.csdn.net/fei8888888/article/details/84579208
包機制、訪問修飾符、Jar包 java初學 面向對象五 https://blog.csdn.net/fei8888888/article/details/84579699