JAVA之類和對象

一:對象的概念:

    我們都說萬物皆對象,客觀存在的事物都是對象。

二:什麼是面向對象?

     把數據及對數據的操作方法放在一起,作爲一個相互依存的整體——對象。對同類對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部接口與外界發生關係,對象與對象之間通過消息進行通信。程序流程由用戶在使用中決定。

既然在這裏提到了類,那麼類究竟是什麼呢?接下來我們就來說什麼是類。

三:什麼是類?

    簡單點來說,類就是模子,確定對象將會擁有的特徵(屬性)和行爲(方法)。

類的特點:1):類是對象的類型

                     2):具有相同屬性和方法的一組對象的集合

類中具有屬性和方法,那麼接下來我們就來說一說類的屬性和方法。

四:對象的屬性--對象具有的各種特徵。

    就比如說手機有屏幕大小,CPU內存大小,內核等特徵,也就是手機的屬性

五:對象的方法--對象執行的操作

     比如說手機又發短信,打電話的功能。那麼發短信和打電話就是手機的方法

六:類和對象有什麼區別?

   類是抽象的概念,僅僅是一個模板,對象是一個實體。比如"手機"對象是一個你能夠看得着,摸得到的實體。


下面,我們就看如何用代碼來創建對象和類以及對象的屬性和方法。

---------------------------------------------------------------------------------------------------------------------------------

1:定義類

    主要包括三個步驟: 定義類名,編寫類的屬性,編寫類的方法    

public class Telphone{//定義類名
    //屬性
    float screen;
    float cpu;
    float memory;
    //方法
    void call(){
      System.out.println("有打電話的功能");
    }
    void sendMessage(){
      System.out.println("screen:"+screen+",cpu:"+cpu+",memory"+memory+",並且有發短信的功能");
    }
}

2:使用對象

     使用對象有兩個步驟:

        創建對象: 類名  對象名=new 類名();

        使用對象 :對象名.屬性/方法

public class InintTelpone{
     public static void main(String[] args){
         //創建對象
         Telphone phone=new Telphone();
         //給實例變量賦值
         phone.screen=254.2f;
         phone.cpu=1.4f;
         phone.memory=2.0f;
         //調用實例變量的方法
         phone.sendMessage();
     }
}

七: 成員變量和局部變量的區別

1:作用域的不同:

           1): 局部變量的作用域僅限於用在定義他的方法中

           2): 成員變量的作用域在整個類內部都是可見的。

:2:初始值不同:

           1): java會給成員變量一個初始值

            2):java不會給局部變量一個初始值

在同一個方法中不允許有同名的局部變量,但是在不同的方法中可以允許有同名的局部變量。並且如果局部變量跟成員變量重名,則局部變量的優先級更高。

public class Telphone {
	float screen;
	float cpu;
	float mem;
	float var;
	void call(){
		int localVar=2;
		System.out.println(var);
		System.out.println(localVar);
		System.out.println("telephone 可以用來打電話");
	}
	void sendMessage(){
		int localVar=3;
		System.out.println(localVar);
		System.out.println(var);
		System.out.println("screen:"+screen+",cpu:"+cpu+",mem:"+mem+"Tel可以用來發短信");
	}
}
public class InitTelphone {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Telphone phone=new Telphone();
		phone.screen=2.0f;
		phone.cpu=1.4f;
		phone.mem=8.0f;
		phone.call();
		phone.sendMessage();
	}

}

運行結果爲:

八:靜態變量

     我們知道,我們可以基於一個類創建多個對象,每個對象的屬性都是獨立的。然而,在有的時候,我們希望該類的所有對象都能夠共用一個成員,此時就需要定義靜態變量,用static修飾。

    靜態的東西在對象產生之前就已經存在了,所以靜態的東西與對象無關,靜態變量在類被加載時就執行了,在編譯實現時靜態變量只有一份備份。

    靜態變量可以用類名來訪問,也可以用對象名來訪問。

public class HelloWorld {
        //設置靜態變量
	static String className = "高二一班";
	public static void main(String[] args) {
	    //通過類名來訪問
	    System.out.println(HelloWorld.className);
	    //創建新的對象
	    HelloWorld hello=new HelloWorld();
	    //使用對象名來訪問
	    System.out.println(hello.className);
	    //使用對象名的形式來修改靜態變量的值
	    hello.className="高二二班";
	    //再次使用類名來訪問靜態變量,值已經被改變
	    System.out.println(HelloWorld.className);
	}
}

    運行結果:

    

九:實例變量

    實例變量是類聲明中沒有使用static修飾聲明的一個字段,實例變量是在類實例化時纔會分配內存,因此同一個實例變量在類的不同實例化而產生的對象中是不同的。

十:構造方法

構造方法是定義在java類中的一個用來初始化對象的方法。並且構造方法的名稱跟類名相同沒有返回值。

構造方法的幾個特點:

        1:當沒有指定構造方法的時候,系統會默認的調用構造方法。

        2:當有指定構造方法,無論是有參的還是無參的,都不會自動添加無參的構造方法

         3:構造方法的重載跟普通方法的重載一樣。

         4:構造方法不但可以給對象的屬性賦值,還可以保證給對象的屬性賦一個合理的值。

無參的構造方法:

public class Telphone {
	public Telphone(){
		System.out.println("無參的構造方法");
	}
}

	public static void main(String[] args) {
		Telphone phone=new Telphone();
	}
}

   有參的構造方法:

public class Telphone {
	float cpu;
	float screen;
	public Telphone(float newScreen,float newCpu){
		screen=newScreen;
		cpu=newCpu;
		System.out.println("有參的構造方法");
	}
}

	public static void main(String[] args) {
		Telphone phone=new Telphone(2.0f,1.4f);
	}
}

十一:靜態方法

    靜態方法的使用需要注意以下幾點:

    1:靜態方法中可以直接調用同類中的靜態變量,但是不可以直接調用非靜態成員。

    2:如果希望能夠調用非靜態成員,可以通過創建類的對象,然後通過對象來訪問非靜態成員。

    3:在普通方法中,可以直接訪問同類中的靜態和非靜態成員

    4:靜態方法中不可以直接調用非靜態方法,需要通過類創建的對象來訪問。

        總結起來就是,在靜態方法中不可以使用非靜態的成員和方法,因爲非靜態的成員和方法是在實例化的時候纔會分配空間,所以要通過類創建的對象來訪問

public class HelloWorld {
    
    // 定義靜態變量score1
    static int score1 = 86;
    // 定義靜態變量score2
    static int score2 = 92; 

    // 定義靜態方法sum,計算成績總分,並返回總分
	public  static   int sum() { 
          return score1+score2;
	}
	public static void main(String[] args) {  
                // 調用靜態方法sum並接收返回值
		int allScore = HelloWorld.sum();
		System.out.println("總分:" + allScore);
	}
}

十二:靜態初始化塊

      靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量

public class HelloWorld {
    int num1;
    int num2;
    static int num3;
  //通過構造方法初始化num1;
    public HelloWorld(){
    	num1=1;
    	System.out.println("通過構造方法給num1賦值");
    }
  //通過代碼塊給num2賦值
    {
    	num2=2;
    	System.out.println("通過代碼塊給num2賦值");
    }
  //通過靜態代碼塊給num3賦值
    static {
    	num3=3;
    	System.out.println("通過靜態代碼塊給num3賦值");
    }
    void show(){
    	System.out.println("num1:"+num1+",num2:"+num2+",num3:"+num3);
    }
    public static void main(String[] args) {
		HelloWorld hello=new HelloWorld();
    	hello.show();
	}
}

運行結果爲: 

  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章