1. 程式人生 > >JAVA總結篇四(類、方法、物件與變數)

JAVA總結篇四(類、方法、物件與變數)

類、方法、物件與變數

在這裡記錄的是部分常見的方面,至於其它方面就不多說了。

一、類(屬性與方法的載體)

這裡主要說的是具體類,抽象類,介面;

1.具體類:

具體類也是我們最常用到的類,主要有是由以下形式出現:

[訪問許可權修飾符]  [修飾符]  class   類名  {   類體  };其中修飾符可有可無。

示列:public class test{

    public static void main(String[] args){

        System.out.println("這是一個具體類的main方法");

    }

}

2.抽象類:

抽象類是在具體類的基礎上加了一個為abstract的修飾符;因此抽象類大致具有以下特性:

1、不能例項化;

2、抽象類中既可以有普通方法,也可以有抽象方法;

3、繼承了抽象類的類必須重寫抽象類中的抽象方法;至於普通方法,可以不重寫,如果重寫了的話,呼叫的就是繼承了抽象類的類重寫了後的方法,反則呼叫的是抽象類中的方法。

示列:

package com.test;

public abstract class Abstract {// 抽象類
    public void test() {
        System.out.println("抽象類");
    }

    public void test0() {
        System.out.println("抽象類0");
    }

    abstract void test1();// 抽象方法

}

package com.test;

public class Classes extends Abstract {
    public void test0() {
        System.out.println("具體類");
    }

    @Override

    void test1() {

        System.out.println("抽象方法");

    }

}

package com.test;

public class Main {
    public static void main(String[] args) {
        Classes classes = new Classes();
        classes.test();
        classes.test0();
        classes.test1();
    }
}

最後打印出來的結果便是:抽象類
                                        具體類

                                        抽象方法

3.介面:

將具體類的class部分用interface替換了之後便是一個介面類

介面具有以下特性:

1、比抽象類更抽象,它的類體中只能有抽象類;

2、介面類體中的屬性預設都是被public、static、final修飾的,而它的方法則預設都是被public、abstract修飾的;

3、介面只能被實現,不能被繼承;由於JAVA中是單一繼承多重實現,因此利用介面可以實現多重繼承;

示列:

package com.test;

public interface Interface {
     String a="1";//相當於 public static final String a = "1";
     void test2();//相當於 public abstract void test();

}

package com.test;

public interface Interface0 {
    void test3();

}

package com.test;

public class Classes extends Abstract implements Interface , Interface0{
    public void test0(){
        System.out.println("具體類");
    }

    @Override
    void test1() {
        System.out.println("抽象方法");
    }

    @Override
    public void test2() {
        System.out.println("第一個介面實現類");
    }

    @Override
    public void test3() {
        System.out.println("第二個介面實現類");
        
    }
    

}

package com.test;

public class Main {
    public static void main(String[] args) {
        Classes classes = new Classes();
        classes.test2();
        classes.test3();
    }

}

最後打印出來的結果便是:第一個介面實現類
                                        第二個介面實現類

二、方法(即抽象出來的物件的行為)

方法的組成部分:[訪問許可權修飾符]+[修飾符] +返回型別+方法名(引數)+{方法體}

注:抽象方法的修飾符為 abstract 且無方法體;而一般的方法的返回型別預設都為空,即返回型別為void。

在這裡主要說的則是方法重寫、方法過載以及構造方法;

1.方法重寫:

方法重寫一般都是子類繼承了父類後重寫父類的方法;重寫後的方法後,在子類中重寫的方法將覆蓋父類的方法;且重寫的方法除了方法體可以不同外,其他部分都是相同的;

示列:

package com.test;

public class Classes{
    public void test4(){
        System.out.println("方法重寫");
    }
    
}
package com.test;

public class Classes1 extends Classes{
    @Override
    public void test4() {
        System.out.println("子類方法重寫");
    }

}

package com.test;

public class Main {
    public static void main(String[] args) {
        Classes1 clasese1 = new Classes1();
        clasese1.test4();
    }
}

最後打印出來的結果便是:子類方法重寫

2.方法過載:

只要類名相同引數不完全相同的兩個方法都屬於方法過載;

示列:

package com.test;

public class Classes{

    public void test4() {
        System.out.println("子類方法重寫");
    }
    public void test4(int i){
        
    }
    public void test4(String str){
        
    }
    public void test4(String str,int i){
        
    }
    public void test4(int i ,String str){
        
    }
}

3.構造方法:

每個類都會預設一個引數空的構造方法,在例項化該類的時候便會預設呼叫該構造方法;但也可以寫一個引數不為空的構造方法,如果要呼叫的話,在例項化該類的時候新增一個對應型別的值便可,此時呼叫的便不是預設的構造方法而是自己寫的構造方法;

示列:

package com.test;

public class Classes{
    public Classes(){
        System.out.println("String");
    }
    public Classes(int i){
        System.out.println("int");
    }

}

package com.test;

public class Main {
    public static void main(String[] args) {
        Classes classese = new Classes();
        Classes classese1=new Classes(1);
    }

}

最後打印出來的結果為:String

                                      int

三、物件與變數

這裡主要說的是物件與變數的區別:

簡單的來說物件new了一個例項化物件而變數沒有,也就是說物件開闢了一個新的記憶體空間,而變數使用的是棧記憶體;因此,物件可以呼叫方法與屬性,而變數不能;從某種意義上來說,變數只是起到了傳值的作用而已,所以變數可以說只能用八大基本資料型別來定義;同時在這裡說說八大基本資料型別的包裝類以及拆箱與裝箱,與包裝類相對的便是基本型別;

八大基本資料型別的包裝類:

byte--Byte

short--Short

int--Integer

long--Long

char--Character

float--Float

double--Double

boolean--Boolean

示列:

double i=1.2; //定義了一個double型別的變數;基本型別。

Double iii=1.2//double型別的物件;由於是用Double直接定義的,所以為自動裝箱。

Double iii=new  Double(1.2);//double型別的物件;由於是new出來的物件,所以為手動裝箱。

double ie=iii+i;//由於i是基本資料型,iii是包裝類,如果要和基本資料型別i進行運算就得自動拆箱成基本資料型別;這就是自動拆箱。

int a=(int) i;//double變數轉換為int型別,強制轉換;

int aa=ii.intValue();//double物件轉換為int型別

注:高精度的轉為低精度,多出的小數部分不是四捨五入,而是直接捨棄。

Emma,最後再加一個命名規範吧:

類名:首字母大寫+駝峰命名法(單詞與單詞間的首字母大寫);

方法名:首字母小寫+駝峰命名法;

物件與類:首字母小寫+駝峰命名法。