心得體會(huì)
- 似乎自己真的不夠努力,因?yàn)椴粔蚺Γ陨险n不能很好的吸收當(dāng)天的知識(shí),java對我來說真的挺難的,好像至今我還深陷于c語言的思維無法自拔。但是,實(shí)際說,我覺得java要更加有趣一點(diǎn),寫一個(gè)demo前進(jìn)行一次邏輯分析,挺有用的,能讓自己編程的思路更加清晰一點(diǎn)。
技術(shù)
- 1.給對象賦值的方式
- 2.setter/getter方法
- 3.構(gòu)造方法
- 4.變量作用域
- 5.this指針
- 6.static
具體操作
1.給對象賦值的方式
- a.對于public修飾的屬性 使用對象直接調(diào)用
p.number='A';
- b.對于private修飾的屬性 不能直接調(diào)用 只能間接使用,可以用
getter/setter方法和構(gòu)造方法
- 2.setter/getter方法
class Poker{
private String number;
private String color;
public boolean bigerThen(String number) {//比較大小
return true;
}
//什么時(shí)候用this
//需要明確指定調(diào)用的是自己對象的方法
public void t1(int... ages){
bigerThen(null);
this.bigerThen(null);
}
上圖中的number、color屬性由private修飾,不能直接調(diào)用,只能間接調(diào)用
//給外部提供一個(gè)set方法 通過這個(gè)方法間接給number賦值
//可以對外部給的值進(jìn)行控制
public void setNumber(String num){
number=num;
}
//給外部提供一個(gè)get方法 訪問某個(gè)變量的值
public String getNumber(){
return "number";
}
public void setColor(String color) {
this.color = color;
}
public String getColor() {
return color;
}
- 上圖中給外部提供一個(gè)
set方法 通過這個(gè)方法間接給number,color賦
值,可以對外部給的值進(jìn)行控制,- 給外部提供一個(gè)
get方法 訪問某個(gè)變量的值- 通過
setter/getter方法,于是poker類中的成員屬性number,color可以在外部間接調(diào)用
public class Test {
public static void main(String[] args){
Poker p=new Poker();//創(chuàng)建對象
p.setNumber("jacker");
System.out.println(p.getNumber());
}
}

注意:通常
setter/getter方法不需要手動(dòng)添加,可以通過系統(tǒng)直接添加。首先把光標(biāo)放在setter/getter方法要添加的位置,然后快捷鍵Alt+Insert。(ps:我的電腦快捷鍵是這樣的,如果你的電腦快捷鍵不是這樣的,可以點(diǎn)擊code,然后看Generate,看一下快捷鍵是什么)
image.png
建議?。?!: 建議將setter/getter方法定義在類的最后面 避免干擾閱讀
3.構(gòu)造方法
- a.構(gòu)造方法的定義
構(gòu)造方法:創(chuàng)建一個(gè)類的一個(gè)對象的時(shí)候 就會(huì)被調(diào)用的方法
- b.類的默認(rèn)構(gòu)造方法
- 創(chuàng)建一個(gè)類的具體對象
Poker pp=new Poker();- 每個(gè)類會(huì)默認(rèn)提供一個(gè)構(gòu)造方法
1.無參數(shù)的默認(rèn)構(gòu)造方法
public Poker(){
System.out.println("構(gòu)造方法");
}
2.有參數(shù)的默認(rèn)構(gòu)造方法
public Poker(){
number='2';
color='?';
System.out.println("構(gòu)造方法");
}
public class Test {
public static void main(String[] args){
Poker pp=new Poker();
System.out.println(pp.getNumber());
System.out.println(pp.getColor());
}
}
class Poker {
private String number;
private String color;
//類的默認(rèn)構(gòu)造方法
public Poker(){
number="2";
color="黑桃";
System.out.println("構(gòu)造方法");
}
public boolean bigerThen(String number) {
return true;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
為什么會(huì)打印上述結(jié)果:
因?yàn)?code>Poker pp=new Poker();這里創(chuàng)建了一個(gè)對象,創(chuàng)建這個(gè)對象它默認(rèn)會(huì)調(diào)用這個(gè)對象里面的默認(rèn)構(gòu)造方法,這個(gè)構(gòu)造方法里面先賦值,然后打印的System.out.println("構(gòu)造方法");這句話就會(huì)執(zhí)行完畢。執(zhí)行完畢,這個(gè)對象創(chuàng)建完畢,然后再調(diào)用
System.out.println(pp.getNumber());
System.out.println(pp.getColor());
方法,把“2”,“ 黑桃”打印出來
-
c.構(gòu)造方法的重載
1.方法重載
同一個(gè)類里面有多個(gè)同名的方法 但是返回值或者參數(shù)不同
public int nextInt()
public int nextInt(int i);
這兩個(gè)方法方法名相同,但執(zhí)行的內(nèi)容不同,參數(shù)不同,返回值一樣,這就是重載
2.自定義的構(gòu)造方法
public class Test {
public static void main(String[] args){
Poker pp2=new Poker("k","?");
System.out.println(pp2.getNumber());
System.out.println(pp2.getColor());
Poker pp3=new Poker("Q","?");
System.out.println(pp3.getNumber());
System.out.println(pp3.getColor());
}
}
class Poker {
private String number;
private String color;
//自定義的構(gòu)造方法
public Poker(String num,String col){
//調(diào)用
number=num;
this.color=col;
System.out.println("自定義的構(gòu)造方法");
}
public boolean bigerThen(String number) {
return true;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}

- 通常給一個(gè)屬性賦值 形參名盡量和屬性名一致
變量在使用的時(shí)候有就近原則構(gòu)造方法的時(shí)候 這個(gè)對象在內(nèi)存里面已經(jīng)分配好了
- d.什么時(shí)候使用構(gòu)造方法**
a.希望在對象創(chuàng)建的時(shí)候 做點(diǎn)其他事情
(這個(gè)時(shí)候用默認(rèn)的構(gòu)造方法就可以了,用自定義的構(gòu)造方法也是可以的)
b.在對象創(chuàng)建的時(shí)候 需要給屬性賦值
(這個(gè)時(shí)候需要寫一個(gè)自定義的構(gòu)造方法)
4.變量作用域
- a.成員變量的作用域,從對象創(chuàng)建到對象銷毀
- b.方法的變量作用域在這個(gè)方法內(nèi)部,出了這個(gè)方法就無法訪問
- 變量在使用時(shí)有就近原則
public Poker(String
number,String color){
//調(diào)用
number=number;//錯(cuò)誤?。?!
此時(shí)沒有賦值成功?。。?/p>
public Poker(String
num,String col){
//調(diào)用
number=num;
這是正確的
5.this指針
- 什么時(shí)候用this
需要明確指定調(diào)用的是自己對象的方法
public void t1(int... ages) {
bigerThen(null);
this.bigerThen(null);
}
在構(gòu)造方法里面,這個(gè)this指的是創(chuàng)建的這個(gè)對象
public Poker(String number,String color){
//調(diào)用
this.number=number;
this.color=color;
System.out.println("自定義的構(gòu)造方法");
}
除構(gòu)造方法的任意一個(gè)方法里面調(diào)用this指的是 調(diào)用這個(gè)方法的對象
public void setColor(String color) {
this.color = color;
}
6.static
- static 修飾的屬性和方法都會(huì)在對象創(chuàng)建之前優(yōu)先加載
- 屬性 靜態(tài)屬性
方法 靜態(tài)方法
實(shí)例方法/對象方法:必須創(chuàng)建某一個(gè)對象才能調(diào)用的方法
類方法/靜態(tài)方法: 不需要?jiǎng)?chuàng)建對象 直接用這個(gè)類來調(diào)用
class MyClass{
public void test(){
System.out.println("這是對象方法");
}
public static void test2(){
System.out.println("這是靜態(tài)方法");
}
}
class T2{
public static void main(String[] args){
MyClass c1=new MyClass();//使用類的實(shí)例方法/對象方法
c1.test();
MyClass.test2();//使用類/靜態(tài)方法
}
什么情況下需要寫靜態(tài)方法:
- 1.當(dāng)不需要記錄數(shù)據(jù)的時(shí)候 只關(guān)心功能就可以使用靜態(tài)方法
- 2.注意:靜態(tài)方法里面不能調(diào)用靜態(tài)這個(gè)類里面的屬性和非
