黑馬程序員_面向對象(二)

 ------- android培訓java培訓、期待與您交流! ----------

      在上一篇的博文中已經介紹了基本的面向對象的知識,今天這篇博文主要介紹的有以下幾個內容

             1、成員變量和局部變量

             2、匿名對象

             3、封裝

             4、this關鍵字

             5、構造方法

             6、static關鍵字

       1、成員變量和局部變量

              成員變量是定義在類中的變量,而局部變量是定義在方法上或某個代碼塊中,比如for中等等            

package day06;

public class ClassDemo01 {

	public static void main(String[] args) {
		Demo d = new Demo();
		d.method();
	}

}
class Demo{
	int num; //成員變量
	public void method(){
		int num2 = 5; //局部變量
		System.out.println("num:"+num+",num2:"+num2);
	}
}
運行結果

        通過運行結果我們發現,num沒有初始化也有值,這個值爲0,而局部變量如果沒有被初始化就使用的話,編譯就會報錯。

        這邊我們就需要說說成員變量和局部變量的區別:

              1、定義的位置不一樣,成員變量定義在類中方法以外,而局部變量則定義在方法的聲明上或者一些代碼塊中

              2、在內存中的位置不一樣,成員變量定義在堆中,局部變量定義在棧中,定義在堆中的變量都會有一個初始化的值。

              3、生命週期不一樣,成員變量的隨着對象的創建而創建,隨着對象的消失而消失,局部變量是隨着方法的調用而存在,隨着方法調用完畢而消失。

              4、初始化值不同,成員變量有默認初始化值,而局部變量沒有,必須定義賦值後才能使用。

                     在開發中我們常常會將對象作爲形參,那麼這時候實際上需要的是一個對象,即是對對象的引用。


       2、匿名對象,匿名對象其實就是直接new出一個對象進行使用,不需要使用一個對象去接收new出來的對象。     

package day06;

public class NoNameDemo {

	public static void main(String[] args) {
		new Demo2().method();;
		Demo2 d3 = new Demo2();
		d3.show(new Demo2());
	}
	

}
class Demo2{
	public void method(){
		System.out.println("匿名對象調用");
	}
	public void show(Demo2 d){
		d.method();
		System.out.println("傳過來一個匿名對象");
	}
}
      匿名對象的使用場景:當方法僅僅只需要調用一次的時候,還可以作爲參數進行傳遞。 

      3、封裝

             封裝是面向對象的三大特性之一,什麼是封裝呢?

             封裝就是將一些不需要對外提供的細節隱藏起來,並且對外提供一個公共的訪問方式。

             封裝的體現之一就是private,private是一個修飾符,用於修飾變量、方法。

             被private修飾的方法和變量只能在本類中被訪問。

            

package day061;

public class PrivateDemo {

	public static void main(String[] args) {

//		new Demo().show();報錯
		new Demo().method();
	}

}
class Demo{
	private String str;
	private void show(){
		str = "hello world";
		System.out.println(str);
	}
	public void method(){
		show();
	}
}


          4、this關鍵字

                this關鍵字是對當前對象的引用,this關鍵字代表的是一個對象,this.變量名或者this.方法名,該變量或者該方法屬於哪個類,this就代表該類對象。

                假設我有一個方法,方法中有一個成員變量和一個方法,方法上有一個形參,形參的名稱與成員變量名相同,如果在方法中是用變量的話,使用的會是哪一個呢?

               

package day061;

public class PrivateDemo2 {

	public static void main(String[] args) {
		new Demo01().show("張三");
	}

}
class Demo01{
	String name;
	public void show(String name){
		System.out.println("name:"+name);
	}
}
           

           發現打印結果是張三,其實在java當中,如果成員變量和局部變量同名的話,首先會在方法中尋找是否有該變量,如果有,使用的就是局部變量,沒有就使用成員變量,那麼如果我們需要使用成員變量又該如何呢?需要使用成員變量的話就用this.成員變量名使用的就是成員變量了。

           5、構造方法

           構造方法是指與類名相同的方法,並且該方法沒有返回值類型,默認的構造方法是無參構造方法,如果手動給定了一個帶參的構造方法,那麼系統就不再默認生成構造方法了。

           構造方法的作用其實是對對象進行初始化操作

package day062;

public class Demo {

	public static void main(String[] args) {
		Student s = new Student();
		System.out.println(s.name+":"+s.age);
		Student s2 = new Student("張三",25);
		System.out.println(s2.name+":"+s2.age);
	}

}
class Student{
	int age;
	String name;
	public Student(){  //無參構造方法
		age = 18;
		name = "小李";
	}
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
}

           6、static關鍵字

                 static是靜態的意思,用於修飾方法和變量。被static修飾的方法或者變量被所有對象所共享。

                 static特點:

                          隨着類的加載而加載

                         優先於對象存在

                         被類的所有對象共享

               在靜態方法中只能訪問靜態成員,不能訪問非靜態成員

               靜態變量和成員變量的區別:
                    A:所屬不同
                         靜態變量:屬於類,類變量
                         成員變量:屬於對象,對象變量,實例變量
                   B:內存位置不同
                        靜態變量:方法區的靜態區
                        成員變量:堆內存
                   C:生命週期不同
                        靜態變量:靜態變量是隨着類的加載而加載,隨着類的消失而消失
                        成員變量:成員變量是隨着對象的創建而存在,隨着對象的消失而消失
                   D:調用不同
                        靜態變量:可以通過對象名調用,也可以通過類名調用
                        成員變量:只能通過對象名調用

                   

         

            



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