黑馬程序員 Java基礎--->面向對象

--------------android培訓java培訓、學習型技術博客、期待與您交流! --------------


1)面向對象概念:

      面向對象是一種軟件開發思想。由於現實社會是由各種各樣的事物所組成的,而我們編程又是在模擬現實社會,那麼在程序中也要用一些東西來表示現實社會中的事物,這些東西就是程序中的對象。我們在程序中使用這些對象,對其特徵和行爲進行操作進行編程,這就是面向對象編程。

     類和對象:

          類:對現實世界中某類事物的描述,是抽象的,概念上的定義。

          對象:事物具體存在的個體

            類和對象的關係 :對象是類的實例,類是對象的抽象。

 2)  面向對象特徵:封裝,抽象,繼承,多態

         封裝:隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。代碼具有優良的模塊性,實現高內聚,低耦合

     抽象:找出事物的共同之處,然後將其歸爲一類。

     繼承:利用繼承可以在原有的類的基礎上創建新的類,並可以直接使用原有的類的方法和屬性,這樣要比重新建新類要簡單的多.利用繼承可以減少相似類的重複創建. 一個類用final修飾,則這樣的類成爲最終的類,有final修飾的類不可以被繼承。

     多態 :一個對象在程序不同運行時刻代表的多種狀態,父類或者接口的引用指向子類對象,提高代碼複用性,類與類之間產生關係。

           成員函數在多態調用時,編譯看左邊,運行看右邊

           多態中成員變量無論編譯和運行,都參考左邊(引用變量所屬的類)。如:多態中的父類引用調用成員變量時,如果父類和子類有同名的成員變量,那麼被調用的是父類中的成員變量。

class Fu 
{
        int i = 3; 
       public void test(){
        	int b=5;
        	System.out.println(b);
        }

}
class Demo extends Fu
{
         int i = 13;//成員變量
         
         public void test(){
         	int b=14; //局部變量
         	System.out.println(b);
         }
        public static void main(String[] args) 
        {
        	   
        	Fu d=new Demo();     //類型提升,向上轉型
            System.out.println(d.i); //3
            d.test();   //14
        }
}

         權限大小

成員修飾符     public       protected          default(默認)            private

同一個類中       OK               OK                    OK                     OK

同一個包中       OK               OK                    OK                     NO

子類訪問           OK               OK                    NO                     NO

不同包中           OK               NO                    NO                     NO

3)  構造代碼快

          構造代碼塊中定義的是不同對象共性的初始化內容。
             作用:給對象進行初始化。
             對象一建立就運行,而且優先於構造函數執行。
             和構造函數的區別:
              構造代碼塊是給所有對象進行統一初始化,
              而構造函數是給對應的對象初始化。
              構造代碼快中定義的是不同對象共性的初始化內容。

class Person
{
	private String name;
	private int age;
        //構造代碼塊	
	{
		//System.out.println("person code run");
		cry();
	}

	Person()
	{
		System.out.println("A: name="+name+",,age="+age);
		
	}
	/**/
	Person(String n)
	{
		name = n;
		System.out.println("B: name="+name+",,age="+age);

		//cry();
		
	}
	/*
	public void setName(String n)
	{
		name  = n;
	}
	public String getName()
	{
		return name;
	}
	*/
	Person(String n,int a)
	{
		name = n;
		age = a;
		System.out.println("C: name="+name+",,age="+age);
		//cry();
	}

	public void cry()
	{
		
		System.out.println("cry......");
	}
}

public class  PersonDemo2
{
	public static void main(String[] args) 
	{
		Person p1 = new Person();

		

		Person p2 = new Person("lisi");
	
		//System.out.println(p2.getName());

		//Person p3 = new Person("wnagu",10);
	
		
	}
}


 

4)this與super關鍵字

            this:   a)指代當前對象,當局部變量和成員變量同名時,可以通過this關鍵字的用法來區分。

           b)在構造方法中來調用該類的其它構造方法,這是要求this語句必須 

            super:用於子類構造函數的第一條語句。目的是調用父類的構造函數。若子類沒有加super,程序會默認調用父類無參的構造函數。

class Fu //extends Object
{
	int num ;
	Fu()
	{
		//super();
		num= 60;
		System.out.println("fu run");
	}
	Fu(int  x)
	{
		System.out.println("fu ...."+x);
	}
	
}

class Zi extends Fu
{
	Zi()
	{
		
		super();  
		//super(4);
		System.out.println("zi run");
	}
	Zi(int x)
	{
		this();
		//super();
		//super(3);
		System.out.println("zi..."+x);
	}
}

public class  ExtendsDemo4
{
	public static void main(String[] args) 
	{
		Zi z = new Zi(0);
		System.out.println(z.num);
	}
}

5)static關鍵字

             static關鍵字用來修飾類的成員,被這個關鍵字修飾的成員都和類加載有關。隨類加載,只加載一次。

static代碼塊

class  Demo
{
	//static int i = 1;相當於:
	static int i;
	static{
		i = 1;	
	}
	static{
		System.out.println(i);
	}
}

 

 對象創建過程

 

               Person  p = new Person("zhangsan")      

                   a、把類名.class文件加載到內存中。

                   b、執行該類中的static代碼塊,如果有得話,給該類進行初始化。

                   c、在堆內存中開闢空間,分配內存地址。給對象

                  d、在堆內存中建立對象的特有屬性。並進行默認初始化。

                  e、對屬性進行顯示初始化。

                  f、對對象進行構造代碼塊初始化。

                  g、對對象進行對應構造函數初始化。

                  h、將內存地址賦給棧內存中的對象名變量。

 

單例設計模式

         保證在整個程序中某個類只能存在一個對象,這個類不能再創建第二個對象。

 

餓漢式:在類一加載就會創建對象,(建議使用)

class Single
{
	private static final Single s = new Single();
	private Single(){}
	public static Single getInstance()
	{
		reture s;
	}
}

*/
//懶漢式   延遲加載的單例設計模式,在調用getIntance()方法時創建對象
class Single
{
	private static Single s = null;
	private Single(){}

	public static synchronized Single getInstance()
	{
		if(s==null)

		    s = new Single();
		
		return s;
	}
}<SPAN style="FONT-SIZE: 14px">      </SPAN>

內部類

      1)當內部類定義在外部類的成員位置上  ,建立內部類對象格式

                    外部類名.內部類名  變量名 =外部類對象.內部類對象

                     如 Outer.Inner in =new Outer().new Inner();

                     可以被成員修飾符所修飾。比如private,static           

           注意:
                 a)當內部類中定義了靜態成員時,該內部類必須是static的。
                 b)當外部類中的靜態方法訪問內部類時,內部類也必須是static的。
                 c)在實際應用中,內部類通常被定義爲private,而很少定義爲public

     2)    內部類定義在局部,不可以被成員修飾符修飾。如publicprivatestatic

              注意:內部類不可以訪問它所在的局部中非最終變量。只能訪問被final修飾的局部變量。
     class Outer
{
	int x = 3;

	void method(final int a)
	{
		//方法中內部類訪問的局部變量要用final修飾
		final int y = 4;
		class Inner
		{
			//定義內部類
			void function()
			{
				System.out.println(y);
				System.out.println(a);
			}
		}
	
		new Inner().function();
	}
}
class  InnerClassDemo3
{
	public static void main(String[] args) 
	{
		Outer out = new Outer();
		out.method(7);
		out.method(8);
	}
}

        

--------------android培訓java培訓、學習型技術博客、期待與您交流! --------------


發佈了23 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章