1. 程式人生 > >Java基礎知識--第四篇

Java基礎知識--第四篇

一、Java的三大特性:封裝、繼承、多型
 二、 封裝:是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。
    優點
A:提高了程式碼的複用性、提高安全性。

將不需要對外提供的內容都隱藏起來。
   做法:
把屬性隱藏,提供公共方法對其訪問。
         為了讓使用者使用方法來給成員變數賦值,就不能允許它們直接去訪問成員變數。
為了解決這種情況,java就提供了一個修飾符關鍵字:private
private:
私有的意思。
可以修飾成員變數和成員方法。
特點:被private修飾的內容,只能在本類中訪問。
構造setXXX()和getXXX()來訪問成員變數。
2.this關鍵字
    區域性變數如果有一個變數和成員變數名稱一致,那麼優先使用的是區域性變數。(就近原則)
這樣的話,就造成了區域性變數隱藏了成員變數。
為了解決這種情況,java就提供了一個代表本類物件的關鍵字:this
三:構造方法
a.構造方法:
作用:給物件的資料進行初始化
格式特點:
A:方法名和類名相同。
public void Student() {}
B:沒有返回值型別。
修飾符 返回值型別 方法名(...) {...}
C:沒有返回值。
沒有用return帶明確的值回來。
return;
b.構造方法注意事項
不提供構造方法,系統會給出預設無參構造方法
提供了構造方法,系統將不再提供預設無參構造方法
建議:建議自己給出無參構造(構造方法可以是過載的)
給成員變數賦值:
A:通過setXxx()方法
B:通過帶參構造方法
成員方法:
去掉static的方法。
根據返回值型別:
void型別
非void型別
根據引數列表:
無參
帶參
四、標準程式碼的寫法:
練習:
學生類:
成員變數:
id,name,age,sex
構造方法:無參,帶參

成員方法:getXxx()/setXxx()
 show(),study()
public class student {
private int id;
private String name;
private int age;
private String sex;

public student() {
super();
// TODO Auto-generated constructor stub
}
public student(int id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
Eclipse中,可自動給定義的屬性生成setXXX()和getXXX()程式碼
  方法:右鍵--選擇source--Generate getters and setter--想要給那個屬性生成setXXX和getXXX()方法,就選擇哪個屬性即可
  無參有參構造的生成:右鍵--source--Generate Constructor using Fields(有參構造)
                                  --Generate Constructor from Superclass(無參構造)
五、static關鍵字
為了體現共用的資料,java就提供了一個關鍵字:static。
static:
作用:可以修飾成員變數和成員方法
特點:
A:隨著類的載入而載入
B:優先於物件存在
C:被類的所有物件共享
也是我們判斷該不該使用靜態修飾一個數據的依據。
D:可以通過類名呼叫
靜態變數:類變數
非靜態變數:例項變數,物件變數
非靜態的:建立物件訪問
靜態的:可以通過類名,也可以通過物件訪問。
static關鍵字注意事項
A:在靜態方法中是沒有this關鍵字的
原因:靜態的內容隨著類的載入而載入,this是隨著物件的建立而存在,所以,static中不能有this。
B:靜態方法只能訪問靜態的成員變數和靜態的成員方法
靜態方法只能訪問靜態的成員。
六、  String類講解
(1) 是由多個字元組成的一串資料。(字元序列)
其實字串可以看成是一個字元陣列。

(2)構造方法:
  public String():無參構造方法
  public String(byte[] bytes):把位元組陣列轉換為字串
  public String(char[] value):把字元陣列轉換為字串
  public String(char[] value,int offset,int count):把字元陣列的一部分轉換為字串
  public String(String original):把一個字串轉換為字串
      成員方法:
  public int length():返回此字串的長度

(3)String的特點及面試題
A:String s = new String("hello")和String s = "hello"的區別
前者建立了1個或者2個物件
字尾建立了0個或者1個物件
B:面試題(看程式寫結果)
A:new和直接賦值的區別
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1==s2);//建立了兩個物件--false
System.out.println(s1.equals(s2));true


String s3 = new String("hello");
String s4 = "hello";
System.out.println(s3==s4);false
System.out.println(s3.equals(s4));true


String s5 = "hello";
String s6 = "hello";
System.out.println(s5==s6);true
System.out.println(s5.equals(s6));true

(4)String類的成員方法
A:判斷功能
 boolean equals(Object obj):比較兩個字串的內容是否相同,嚴格區分大小寫。(使用者名稱,密碼)
 boolean equalsIgnoreCase(String str):比較兩個字串的內容是否相同,忽略大小寫。(驗證碼)
 boolean contains(String str):判斷字串中是否包含一個子串。
 boolean startsWith(String str):判斷是否以指定的字串開頭
 boolean endsWith(String str):判斷是否以指定的字串結尾
 boolean isEmpty():判斷字串的內容是否為空

B:獲取功能
 String類的獲取功能:
 int length():返回字串的長度。其實就是字元的個數。
 char charAt(int index):返回字串中指定索引處的字元。
 int indexOf(int ch):返回指定的字元在字串中第一次出現的索引。
明明說的是字元,為什麼是int呢?
原因是int型別還可以接收char型別。
97,'a'是一樣的效果。
但是如果引數是char型別,你就不能寫97了。
 int indexOf(String str):返回指定的字串在字串中第一次出現的索引。
 int indexOf(int ch,int fromIndex):從指定的索引處開始,返回指定的字元在字串中第一次出現的索引。
 int indexOf(String str,int fromIndex):從指定的索引處開始,返回指定的字串在字串中第一次出現的索引。
 String substring(int start):擷取從start開始到末尾的字串。
 String substring(int start,int end):擷取從start開始到end結束的字串。

C:轉換功能
 byte[] getBytes():把字串轉換為位元組陣列
 char[] toCharArray():把字串轉換為字元陣列
 static String valueOf(char[] chs):把字元陣列轉換為字串
 static String valueOf(int i):把int型別的資料轉換為字串
valueOf():可以把任意型別的資料轉換為字串。
 String toLowerCase():把字串轉成小寫
 String toUpperCase():把字串轉成大寫
 String concat(String str):拼接字串,前面我們使用過+進行字串的拼接,不夠專業。


D:其他功能
 A:替換功能
String replace(char old,char new)
String replace(String old,String new)
 B:去除字串兩端空格
String trim()
七、StringBuiffer和StringBuilder
   StringBuffer:
   執行緒安全的可變字元序列。
 * 
 * String和StringBuffer的區別?
 * A:String的內容不可變
 * B:StringBuffer的內容可變
 * 
 * StringBuffer和StringBuilder的區別?
 * A:StringBuffer 執行緒安全,效率低
 * B:StringBuilder 執行緒不安全,效率高
 * 
 * 執行緒安全:(同步),效率低
 * 執行緒不安全:(不同步),效率高
 * 
 * 構造方法:
 * StringBuffer():構造一個其中不帶字元的字串緩衝區,其初始容量為 16 個字元。
 * StringBuffer(int capacity):構造一個其中不帶字元的字串緩衝區,其初始容量為 capacity個字元。
 * StringBuffer(String str):構造一個其中帶字元的字串緩衝區,其初始容量為??? 個字元。
 * 
 * 成員方法:
 * public int length():返回長度(字元數)。實際值
 * public int capacity():返回當前容量。 理論值 
 * 新增功能:新增元素,並返回本身的物件。
 * A:public StringBuffer append(String str):追加資料,在末尾新增
 * B:public StringBuffer insert(int offset,String str):插入資料,在指定位置新增
 * 刪除功能:
 * public StringBuffer deleteCharAt(int index):刪除指定索引處的字元
 * public StringBuffer delete(int start,int end):刪除從start開始到end結束的資料,包左不包右
 * 替換功能:
 * public StringBuffer replace(int start,int end,String str):用str替換從start到end的資料
 * 
 * 反轉功能:
 * public StringBuffer reverse()
 * 擷取功能:返回值型別是String型別,本身沒有發生改變
 * public String substring(int start)
 * public String substring(int start,int end) 
 * 相互轉換:
 * 
 * String -- StringBuffer
 * String s = "hello";
// 方式1
StringBuffer sb1 = new StringBuffer(s);
// 方式2
StringBuffer sb2 = new StringBuffer();
sb2.append(s);
 * 
 * StringBuffer  --  String
 * StringBuffer sb = new StringBuffer("world");
//方式1
String s1 = sb.substring(0);
//方式2
String s2 = sb.toString();
//方式3
String s3 = new String(sb);