Java初学总结
1.對象的比較
- ?? “==”操作符用于比較兩個對象的內存地址值是否相等
- ?? equals() 方法用于比較兩個對象的內容是否一致
?如下列:
1 public class text3 { 2 3 public static void main(String[] args) { 4 String str1 = new String("java"); 5 String str2 = new String("java"); 6 String str3 = str2; 7 8 if(str1 == str2) 9 { 10 System.out.println("str1 == str2"); 11 } 12 else 13 { 14 System.out.println("str1 != str2"); 15 } 16 if(str2 == str3) 17 { 18 System.out.println("str2 == str3"); 19 } 20 else 21 { 22 System.out.println("str2 != str3"); 23 } 24 25 } 26 27 }運行結果為:
str1 != str2 str2 == str3str1與str2的內容完全一樣,為什么會不等于呢? 這兩個對象指向不同的內存空間,所以它們的內存地址是不一樣的。用“==”比較的是內存地址值。
如要比較內容,可用“equals”。
1 public class text3 { 2 3 public static void main(String[] args) { 4 String str1 = new String("java"); 5 String str2 = new String("java"); 6 String str3 = str2; 7 8 if(str1.equals(str2)) 9 { 10 System.out.println("str1 == str2"); 11 } 12 else 13 { 14 System.out.println("str1 != str2"); 15 } 16 if(str2.equals(str3)) 17 { 18 System.out.println("str2 == str3"); 19 } 20 else 21 { 22 System.out.println("str2 != str3"); 23 } 24 25 } 26 27 }運行結果為:
str1 == str2 str2 == str3?2.兩種String對象的聲明方式到底有什么不同?
??????? String str1 = new String("java");
??????? String str2 = "java";
如下例:
1 public class text3 { 2 3 public static void main(String[] args) { 4 String str1 = "java"; 5 String str2 = new String("java"); 6 String str3 = "java"; 7 8 System.out.println("str1 == str2 ? -->"+(str1 == str2)); 9 System.out.println("str1 == str3 ? -->"+(str1 == str3)); 10 System.out.println("str3 == str2 ? -->"+(str3 == str2)); 11 12 } 13 }運行結果:
str1 == str2 ? -->false str1 == str3 ? -->true str3 == str2 ? -->falsestr1與str3相等,則證明str1與str3是指向同一個內存空間的。
String對象的內容一旦聲明則不能輕易改變。
如果想改變一個String對象的值,則第一步要做的是先將原有的String引用斷開,之后再開辟新的內存空間。
用new關鍵字開辟String對象的內存空間的話,則實際上就開辟了兩個內存空間。
3.類對象的產生
格式:
類名 對象名 = new 類名();創建屬于某類的對象,需要通過如下兩個步驟來實現:
舉例:創建Person類的對象
Person p; //先聲明一個Person類的對象p p = new Person(); //用new關鍵字實例化Person的對象p當然也可以用如下方式來聲明變量:
Person p = new Person() ; // 聲明Person對象p并直接實例化此對象????? 對象只有在實例化之后才能被使用,而實例化對象的關鍵字就是new。
4.訪問對象中某個變量或方法
訪問屬性: 對象名稱。屬性名 訪問方法: 對象名稱。方法名()如:想訪問Person類中的name和age屬性
p.name; //訪問Person類中的name屬性 p.age; //訪問Person類中的age屬性5.類的屬性封裝(private)
要設置或取得屬性值,則只能用setXxx()、getXxx()方法,這是一個明確且標準的規定。
封裝類中的屬性或方法:
封裝屬性: private 屬性類型 屬性名 封裝方法: private 方法返回類型 方法名稱(參數)加入一些setXxx()、getXxx()方法,主要用來設置和取得類中的私有屬性,解決封裝問題,如下列:
1 class Person 2 { 3 private String name; 4 private int age; 5 void talk() 6 { 7 System.out.println("wo shi: "+name+", jinnian: "+age+"sui"); 8 } 9 10 public void setName(String str) 11 { 12 name = str; 13 } 14 15 public void setAge(int a) 16 { 17 if(a > 0) 18 age = a; 19 } 20 21 public String getName() 22 { 23 return name; 24 } 25 26 public int getAge() 27 { 28 return age; 29 } 30 } 31 32 public class text17 { 33 34 public static void main(String[] args) { 35 36 Person p = new Person(); 37 p.setName("zhang san"); 38 p.setAge(-25); 39 p.talk(); 40 41 } 42 43 }運行結果:
wo shi: zhang san, jinnian: 0sui?6.內部類
定義內部類的格式:
標示符 class 外部類的名稱 {//外部類的成員標示符 class 內部類的名稱{//內部類的成員 } }外部類是無法找到內部類中所聲明的屬性,而內部類則可以訪問外部類的屬性。
用static聲明的內部類則變成外部類,但是用static聲明的內部類不能訪問非static的外部類屬性。(《Java基礎教程》P193)
?7.類的繼承
類的繼承格式:
class 父類 //定義父類 { }class 子類 extends 父類 // 用extends關鍵字實現類的繼承 { }在java中只允許單繼承,不允許多重繼承,也就是說一個子類只能有一個父類,但java中卻允許多層繼承。
多層繼承如:
class A { } class B extends A { } class C extends B { }子類對象在實例化時會默認先去調用父類中的無參構造方法,之后再調用本類中的相應構造方法。
?
super 主要的功能是完成子類調用父類中的內容,也就是調用父類中的屬性或方法。
用super調用父類中的構造方法,只能放在程序的第一行。
super調用屬性或方法:
super.父類中的屬性; super.父類中的方法();8.this與super的比較
this:
- 1.表示當前對象
- 2.調用本類中的方法或屬性
- 3.調用本類中的構造方法時,放在程序首行
super:
- 1.子類調用父類的方法或屬性
- 2.調用父類中的構造方法時,放在程序首行
從上表中發現,用super或this調用構造方法時都需要放在首行。所以,super與this調用構造方法的操作時不能同時出現的。
9.抽象類定義規則
- 抽象類和抽象方法都必須用abstract關鍵字來修飾
- 抽象類不能被實例化,也就是不能用new關鍵字去產生對象
- 抽象方法只需聲明,而不需實現
- 含有抽象方法的類必須被聲明為抽象類,抽象類的子類必須復寫所有的抽象方法后才能被實例化,否則這個子類還是個抽象類
10.final關鍵字
在Java中聲明類、屬性和方法時,可使用關鍵字final來修飾。
- final標記的類不能被繼承。
- final標記的方法不能被子類復寫。
- final標記的變量(成員變量或局部變量)即為常量,只能賦值一次。
轉載于:https://www.cnblogs.com/heyonggang/archive/2013/05/13/3075747.html
總結
- 上一篇: 高质量程序设计指南c++/c语言(33)
- 下一篇: Java基础(二) 程序格式