1. 程式人生 > 其它 >Java基礎知識點、八(物件)

Java基礎知識點、八(物件)

技術標籤:入門java

Java中的類和物件_3

一、什麼是物件?

1.物件是由我們自己建立的類來創建出來的。[沒有類就沒有物件]

2.物件就是類的例項【可以真正使用類的資料,可以呼叫類中元素的資料】

例如:修建大樓是繪製的設計圖紙就是類,根據設計圖紙修建起來的真實的可以住人的大樓就是物件。

3.一個類可以創建出多個物件

類是物件的模板,物件是類的真實表現

二、如何建立物件?

1.保證用來建立物件的類是存在

2.需要通過類中提供的構造方法建立物件

格式 : new 構造方法( [引數值] ); 有引數值就寫沒有就不寫

public  class  Person{
	public  Person(){
  		System.out.println("Person類無引數構造方法");
	}
	public  Person(String value){
  		System.out.println("Person類有引數構造方法,引數是--value=="+value);
	}
}
public  class  Test1{
	public static  void  main(String args[]){
		//建立Person類的物件
		//格式: new  構造方法([引數值])
		//new  Person();//Person類的物件
		new  Person("javase");
		//為了以後方便使用物件,我們就把這個物件儲存在變數
		Person per1=new  Person();
	}
}

三、建立好的物件的有何作用?

建立好的物件可以訪問/呼叫類中的元素【變數/方法】,至於建立好的物件可以訪問/呼叫類中的那些元素,那些元素不能訪問/呼叫,就得看類中元素的訪問限制修飾符。

四、物件的具體用法

1.變數的訪問

  1. 例項變數---【物件.例項變數】
  2. 靜態成員變數--【物件.靜態成員變數/類名.靜態成員變數】

對變數只存在得到變數的值,使用或者是修改變數值這兩種的操作。

以上的訪問是在public修飾符的作用下操作的。

例如:

public  class  Student{
	//例項變數
	public int stuid=1001;
	public int stuage;
	//靜態成員變數
	public static String stuname="zhangsan";
	public static String stuaddress;
}

測試物件訪問變數

public  class  TestMain{
	public static  void  main(String args[]){
		//訪問例項變數---【物件.例項變數】
		//建立Student類的物件
		Student stu1=new  Student();
		System.out.println("stuid=="+stu1.stuid);
 		//賦值
		stu1.stuage=23;
		System.out.println("stuage=="+stu1.stuage);
		//訪問類變數--【物件.類變數/類名.類變數】
		Student stu2=new  Student();
		System.out.println("stuname=="+stu2.stuname);
		System.out.println("stuname=="+Student.stuname);
		//stu2.stuaddress="西安";
		//System.out.println("stuaddress=="+stu2.stuaddress);
		//System.out.println("stuaddress=="+Student.stuaddress);
		Student.stuaddress="北京";
		System.out.println("stuaddress=="+stu2.stuaddress);
		System.out.println("stuaddress=="+Student.stuaddress);
	}
}

2.方法的訪問

  1. 構造方法---new 構造方法();
  2. 例項方法--【物件.例項方法】
  3. 靜態方法--【物件.靜態方法/類名.靜態方法】

(1.)以下使用無返回值,無引數的方法為例

例如:

public  class  Dog{
	//例項方法
	public  void  dogTest1(){
		System.out.println("Dog類中的例項方法");
	}
	//類方法
	public  static  void  dogStatic(){
		System.out.println("Dog類中的類方法");
	}
}

測試物件呼叫無返回值,無引數的方法

public  class  Test3{
	public static  void  main(String args[]){
		//例項方法--【物件.例項方法】
		Dog  dog1=new Dog();
		dog1.dogTest1();
		//靜態方法--【物件.靜態方法/類名.靜態方法】
		Dog  dog2=new Dog();
		dog2.dogStatic();
		Dog.dogStatic();
	}
}

(2.)有引數的方法訪問,需要注意的是引數的傳遞

例如:

public  class  Cat{
	//例項方法
	public  void  catTest1(int  age,double height){
		System.out.println("Cat類中的例項方法--引數1--age=="+age+",引數2--height=="+height);
	}
	//類方法
        public static void  catStatic(Dog dog){
		System.out.println("Cat類中的類方法--引數--dog=="+dog);
	}
}

測試物件訪問有引數的方法

public  class  Test4{
	public static  void  main(String args[]){
		//例項方法--【物件.例項方法】
		Cat  cat1=new Cat();
		cat1.catTest1(5,12.5);
		//類方法
		Cat.catStatic(new Dog());
		//上面的方法在呼叫的時候傳遞的引數是具體的資料值
		//我們在訪問訪問的時候可以傳遞儲存資料值的變數
		int  age=3;
		double  hei=6.7;
		cat1.catTest1(age,hei);
		Dog  dog=new Dog();
		cat1.catStatic(dog);
	}
}

總結: 先看【有沒有/有幾個/什麼型別】,再傳【匹配型別/匹配個數/值【變數】】

(3.)有返回值的方法訪問,需要注意的是接收方法的返回值結果【型別匹配】

例如:

public  class  Cat2{
	//例項方法
	public  int catTest2(int  num1,double num2){
		int  res=0;
        res=(int)(num1+num2); 		
	    return res;
	}
	//類方法
        public static Student catStatic2(Dog dog){
		//return  new Student();
		Student  stu=new Student();
                return stu;
	}
}

測試類

public  class  Test5{
	public static  void  main(String args[]){
		//訪問有返回值和引數的方法
		Cat2  cat2=new Cat2();
		int val=cat2.catTest2(12,12.5);	
		System.out.println("catTest2的執行結果=="+val);
		Student  stu=Cat2.catStatic2(new Dog());
		System.out.println("catStatic2的執行結果=="+stu.stuid);
	}
}

總結:方法的呼叫【1.要什麼,傳什麼;2.給什麼,收什麼】

五、物件的記憶體分配原理

物件是通過類的構造方法建立 new 構造方法

類是一種自定義的複合資料型別

六、類與物件的關係

類是建立物件的模板;物件是類的具體表現

類是現實物件的抽象,物件是類的例項化

類是一個抽象的概念是不存在的,

物件是現實中存在的

七、靜態成員變數【類變數】與例項變數的區別

區別:

靜態成員變數【類變數】

例項變數

成員變數【全域性變數】

static 關鍵字修飾

沒有static 關鍵字修飾

程式執行前分配資料的記憶體空間【早】

程式執行時分配資料的記憶體空間【晚】

可以在多個同類物件之間共享資料值

不能在多個同類物件之間共享資料值

可以使用物件訪問,也可以類名訪問

只能物件訪問

1.例項變數的資料值是不能再同類物件之間共享。

(每一個class都會對應生成一個位元組碼檔案)

例如:

 /* class  Pig{
	public static String pigname="佩奇";
}
public  class  Test6{
	public static  void  main(String args[]){
		Pig  pig1=new Pig();
		pig1.pigname="喬治";
		System.out.println("pig1=="+pig1.pigname);	
		
		Pig  pig2=new Pig();
		System.out.println("pig2=="+pig2.pigname);
	}
}
*/
  class  Pig{
	public  String pigname="佩奇";
}
public  class  Test6{
	public static  void  main(String args[]){
		Pig  pig1=new Pig();
		pig1.pigname="喬治";
		System.out.println("pig1=="+pig1.pigname);	
		
		Pig  pig2=new Pig();
		System.out.println("pig2=="+pig2.pigname);
	}
}

2.類變數的資料值是能在同類物件之間共享。

例如:

(每一個class都會對應生成一個位元組碼檔案)

  class  Pig{
	public static String pigname="佩奇";
}
public  class  Test6{
	public static  void  main(String args[]){
		Pig  pig1=new Pig();
		pig1.pigname="喬治";
		System.out.println("pig1=="+pig1.pigname);	
		
		Pig  pig2=new Pig();
		System.out.println("pig2=="+pig2.pigname);
	}
}