Java初学总结
1.對(duì)象的比較
- ?? “==”操作符用于比較兩個(gè)對(duì)象的內(nèi)存地址值是否相等
- ?? equals() 方法用于比較兩個(gè)對(duì)象的內(nèi)容是否一致
?如下列:
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 }運(yùn)行結(jié)果為:
str1 != str2 str2 == str3str1與str2的內(nèi)容完全一樣,為什么會(huì)不等于呢? 這兩個(gè)對(duì)象指向不同的內(nèi)存空間,所以它們的內(nèi)存地址是不一樣的。用“==”比較的是內(nèi)存地址值。
如要比較內(nèi)容,可用“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 }運(yùn)行結(jié)果為:
str1 == str2 str2 == str3?2.兩種String對(duì)象的聲明方式到底有什么不同?
??????? 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 }運(yùn)行結(jié)果:
str1 == str2 ? -->false str1 == str3 ? -->true str3 == str2 ? -->falsestr1與str3相等,則證明str1與str3是指向同一個(gè)內(nèi)存空間的。
String對(duì)象的內(nèi)容一旦聲明則不能輕易改變。
如果想改變一個(gè)String對(duì)象的值,則第一步要做的是先將原有的String引用斷開(kāi),之后再開(kāi)辟新的內(nèi)存空間。
用new關(guān)鍵字開(kāi)辟String對(duì)象的內(nèi)存空間的話(huà),則實(shí)際上就開(kāi)辟了兩個(gè)內(nèi)存空間。
3.類(lèi)對(duì)象的產(chǎn)生
格式:
類(lèi)名 對(duì)象名 = new 類(lèi)名();創(chuàng)建屬于某類(lèi)的對(duì)象,需要通過(guò)如下兩個(gè)步驟來(lái)實(shí)現(xiàn):
舉例:創(chuàng)建Person類(lèi)的對(duì)象
Person p; //先聲明一個(gè)Person類(lèi)的對(duì)象p p = new Person(); //用new關(guān)鍵字實(shí)例化Person的對(duì)象p當(dāng)然也可以用如下方式來(lái)聲明變量:
Person p = new Person() ; // 聲明Person對(duì)象p并直接實(shí)例化此對(duì)象????? 對(duì)象只有在實(shí)例化之后才能被使用,而實(shí)例化對(duì)象的關(guān)鍵字就是new。
4.訪(fǎng)問(wèn)對(duì)象中某個(gè)變量或方法
訪(fǎng)問(wèn)屬性: 對(duì)象名稱(chēng)。屬性名 訪(fǎng)問(wèn)方法: 對(duì)象名稱(chēng)。方法名()如:想訪(fǎng)問(wèn)Person類(lèi)中的name和age屬性
p.name; //訪(fǎng)問(wèn)Person類(lèi)中的name屬性 p.age; //訪(fǎng)問(wèn)Person類(lèi)中的age屬性5.類(lèi)的屬性封裝(private)
要設(shè)置或取得屬性值,則只能用setXxx()、getXxx()方法,這是一個(gè)明確且標(biāo)準(zhǔn)的規(guī)定。
封裝類(lèi)中的屬性或方法:
封裝屬性: private 屬性類(lèi)型 屬性名 封裝方法: private 方法返回類(lèi)型 方法名稱(chēng)(參數(shù))加入一些setXxx()、getXxx()方法,主要用來(lái)設(shè)置和取得類(lèi)中的私有屬性,解決封裝問(wèn)題,如下列:
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 }運(yùn)行結(jié)果:
wo shi: zhang san, jinnian: 0sui?6.內(nèi)部類(lèi)
定義內(nèi)部類(lèi)的格式:
標(biāo)示符 class 外部類(lèi)的名稱(chēng) {//外部類(lèi)的成員標(biāo)示符 class 內(nèi)部類(lèi)的名稱(chēng){//內(nèi)部類(lèi)的成員 } }外部類(lèi)是無(wú)法找到內(nèi)部類(lèi)中所聲明的屬性,而內(nèi)部類(lèi)則可以訪(fǎng)問(wèn)外部類(lèi)的屬性。
用static聲明的內(nèi)部類(lèi)則變成外部類(lèi),但是用static聲明的內(nèi)部類(lèi)不能訪(fǎng)問(wèn)非static的外部類(lèi)屬性。(《Java基礎(chǔ)教程》P193)
?7.類(lèi)的繼承
類(lèi)的繼承格式:
class 父類(lèi) //定義父類(lèi) { }class 子類(lèi) extends 父類(lèi) // 用extends關(guān)鍵字實(shí)現(xiàn)類(lèi)的繼承 { }在java中只允許單繼承,不允許多重繼承,也就是說(shuō)一個(gè)子類(lèi)只能有一個(gè)父類(lèi),但java中卻允許多層繼承。
多層繼承如:
class A { } class B extends A { } class C extends B { }子類(lèi)對(duì)象在實(shí)例化時(shí)會(huì)默認(rèn)先去調(diào)用父類(lèi)中的無(wú)參構(gòu)造方法,之后再調(diào)用本類(lèi)中的相應(yīng)構(gòu)造方法。
?
super 主要的功能是完成子類(lèi)調(diào)用父類(lèi)中的內(nèi)容,也就是調(diào)用父類(lèi)中的屬性或方法。
用super調(diào)用父類(lèi)中的構(gòu)造方法,只能放在程序的第一行。
super調(diào)用屬性或方法:
super.父類(lèi)中的屬性; super.父類(lèi)中的方法();8.this與super的比較
this:
- 1.表示當(dāng)前對(duì)象
- 2.調(diào)用本類(lèi)中的方法或?qū)傩?/li>
- 3.調(diào)用本類(lèi)中的構(gòu)造方法時(shí),放在程序首行
super:
- 1.子類(lèi)調(diào)用父類(lèi)的方法或?qū)傩?/li>
- 2.調(diào)用父類(lèi)中的構(gòu)造方法時(shí),放在程序首行
從上表中發(fā)現(xiàn),用super或this調(diào)用構(gòu)造方法時(shí)都需要放在首行。所以,super與this調(diào)用構(gòu)造方法的操作時(shí)不能同時(shí)出現(xiàn)的。
9.抽象類(lèi)定義規(guī)則
- 抽象類(lèi)和抽象方法都必須用abstract關(guān)鍵字來(lái)修飾
- 抽象類(lèi)不能被實(shí)例化,也就是不能用new關(guān)鍵字去產(chǎn)生對(duì)象
- 抽象方法只需聲明,而不需實(shí)現(xiàn)
- 含有抽象方法的類(lèi)必須被聲明為抽象類(lèi),抽象類(lèi)的子類(lèi)必須復(fù)寫(xiě)所有的抽象方法后才能被實(shí)例化,否則這個(gè)子類(lèi)還是個(gè)抽象類(lèi)
10.final關(guān)鍵字
在Java中聲明類(lèi)、屬性和方法時(shí),可使用關(guān)鍵字final來(lái)修飾。
- final標(biāo)記的類(lèi)不能被繼承。
- final標(biāo)記的方法不能被子類(lèi)復(fù)寫(xiě)。
- final標(biāo)記的變量(成員變量或局部變量)即為常量,只能賦值一次。
轉(zhuǎn)載于:https://www.cnblogs.com/heyonggang/archive/2013/05/13/3075747.html
總結(jié)
- 上一篇: 高质量程序设计指南c++/c语言(33)
- 下一篇: 什么叫碎片,碎片对io的影响以及什么叫物