java 面向對象練習2

/*

  • 類中屬性的聲明與使用
  • 屬性(成員變量)與局部變量的區別
  • 1,相同點
  • 1.1定義變量的形式都是:數據類型 變量名 = 變量值
  • 1.2都需要先聲明,再使用
  • 1.3變量都有其對應的作用域和生命週期。
  • 2,不同點
  • 2.1 位置不同
  • 屬性(成員變量):直接聲明在類的一對{}內部
  • 局部變量:聲明在方法內,方法形參,代碼塊內,構造器形參,構造器內部的變量
  • 2.2 權限修飾符不同
  • 屬性:可以在聲明屬性的同時,通過使用權限修飾符指明其權限
  • 常用權限修飾符:public private protected,缺省(default),
  • public :可以被本類,本包,子類,外部類使用
  • private:可以被類內部使用,不可以被本包,子類,外部包使用
  • protected:可以被本類,本包,子類使用,不可以被外部包使用
  • 缺省(default):可以被本類,本包使用,不可以被子類,外部包使用
  • 其他:static ,final,abstract 不是權限修飾符
  • 初級學習暫用缺省
  • 局部變量:不能使用權限修飾符,可以用final;
  • 2.3 默認初始化值
  • 屬性 :類的屬性根據其類型都有默認初始化值,與數組的初始化值相同
  • 整形(byte,short,int,long)初始值0
  • 浮點型(float,double)初始值0.0
  • 字符型(char) 初始值0 或’\u0000’
  • 布爾型(boolean)初始值false
  • 引用數據類型(類,數組。接口)初始值null
  • 局部變量:
  • 沒有默認初始化值,在調用局部變量之前必須顯式賦值
  • 局部變量中的形參在調用時賦值即可
  • 2.4 在內存中加載的位置不同
  • 屬性(非Static情況下):加載到堆空間中,static情況下加載在方法區中
  • 局部變量:加載到虛擬機棧空間中

*/

/*-------------------------------------------------------------

  • 類中方法的聲明與使用
  • 方法描述類所具有的功能,也叫函數或過程,java中的方法不能獨立存在,只能在類中定義。
  • 將功能封裝爲方法的目的是可以實現代碼複用,簡化代碼。
  • 方法的聲明格式:
  • 修飾符 (是否static)(是否有返回值)方法名(參數類型1 形參1,參數類型2 形參2,…){
  •       方法體;
    
  •       return 返回值;//如果無返回方法名前加void
    
  • }
  • 說明1:java 的權限修飾符四種:public ,private,protected,缺省default前兩種常用
  • 說明2:返回值類型:有返回值,無返回值。
  • 如果方法有返回值則必須在方法聲明時,指定返回值類型,同時方法中需要使用return關鍵字返回指定類型的變量或常量數據
  • 如果方法沒有返回值,則方法聲明時,使用void來表示,通常沒有返回值的方法體中不使用return,如果使用只能“return;”
  • 表示結束此方法,return後不可再寫表達式。
  • 設計方法時是否返回數值:1,看功能需求2,按經驗處理
  • 說明3: 方法名屬於標識符,命名需遵循標識符設計規範,避免關鍵字,見名知意
  • 說明4:方法可以不聲明形參,也可以聲明多個形參。
  • 設計方法時要不要定義形參:1,看功能需求2.按經驗處理
  • 說明5:方法體,方法功能的體現
  • return關鍵字的使用:
  • 1,使用範圍:方法體中
  • 2,作用:1,結束一個方法。2,針對有返回類型的方法,使用“return 數據”,結束方法的同時返回數據
  • 3,return之後不可以再聲明執行語句。
  • 方法的調用
  • 方法通過方法名被調用,且只有被調用時纔會執行
  • 方法的使用中,可以調用當前類的屬性與方法
  • 如果方法A中又調用方法A,則方法A是遞歸方法
  • 方法的注意事項
  • 1,方法被調用一次就會執行一次
  • 2,沒有具體返回值的情況下方法體中可以沒有return語句,如果有僅用來結束方法
  • 3,定義方法時,方法的結果應該返回給調用者,交給調用者處理
  • 4,方法中只能調用方法或者屬性,不能在方法內部再定義方法
  • 5,方法之中不能再定義方法
    */
package com.atguigu.contact;
import java.util.*;
public class Object2 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		//測試Parameter類
		Parameter p = new Parameter();
		System.out.println(p.isWisdom);
		System.out.println(p.name); 
		System.out.println(p.age);
		p.age = 30;
		System.out.println(p.age);
//		System.out.println(p.weight);//無法直接調用private修飾的屬性
		System.out.println(p.getWeight());//可以通過方法調用weight
		p.setWeight(10);//可以通過方法修改weight
		System.out.println(p.name + "已經" + p.getWeight() + "Kg了");
		p.sleep(10);
		
		//測試Person2類
		Person2 person = new Person2();
		person.name = "jery";
		person.age = 21;
		person.sex = '女';
		person.addAge(2);//23
		int newAge = person.addAge(2);//25
		System.out.println(person.name + " is " + newAge + " years old");//25
		person.showAge();//25
		person.study(4);
		Person2 person1 = person;
		person1.addAge(10);
		person.showAge();//35
		Person2 person2 = new Person2();
		person2.showAge();//0
		person2.addAge(24);
		person2.showAge();//24
		person.showAge();//35
		
		//測試Circle 類
		Circle c = new Circle();
		System.out.println("請輸入圓的半徑");		
		c.setRadius(scan.nextDouble());
		//或者直接 c.radius = scan.nextDouble();
		System.out.println("圓的面積是" + c.area() );
		
		//測試Rectangle類
		Rectangle rec = new Rectangle();
		rec.print();
		System.out.println("矩形面積爲" + rec.print());
		System.out.println(rec.print());//可以直接在syso內填入方法,輸出圖形和返回值。
		//對於JVM來說這裏代表的是變量,變量值是方法的返回值
		
		//測試Rectangle1類
		Rectangle1 rec1 = new Rectangle1();
		System.out.println("請輸入矩形的長度");
//		rec1.length = scan.nextInt();
		rec1.setLength(scan.nextInt());
		System.out.println("請輸入矩形的寬度");
//		rec1.width = scan.nextInt();		
		rec1.setWidth(scan.nextInt());
		rec1.print();
		System.out.println("矩形的面積是 " + rec1.area());
		
		//測試Rectangle2類
		Rectangle2 rec2 = new Rectangle2();
		System.out.println("請輸入矩形的長度");
		int m1 = scan.nextInt();
		System.out.println("請輸入矩形的長度");
		int n1 = scan.nextInt();
		System.out.println(rec2.print(m1,n1));		
	}
}

class Parameter{
	    Boolean isWisdom = true;
		public String name = "kenny";
		protected int age = 20;
		private double weight = 60.5;//一定要保持體重	
		public void work() {
			System.out.println(name + "工作了一整天");
		}
		public void sleep(int hour) {
			work();//方法內可以調用類中的方法與屬性,不需要實例化
			System.out.println(name + "睡了" + hour + "小時");
			//sleep(10);  //會報錯,因爲這種遞歸無法結束,局部變量被重複創建,無法回收,棧空間很快溢出
		}
		public double getWeight() {
		return weight;
		}		
		public double setWeight(double i) {
			System.out.println(name + "又胖了" + i + "Kg");
		return	weight += i;		   
		}
		
	}
class Person2{//同一個包內的類名不能重複?
	String name;
	int age;
	char sex;
	public void study(int hour) {
		System.out.println(name + " has been studying for" + hour +"hours");
	}
	public void showAge() {
		System.out.println(name + " is already" + age + "years old");
	}
	public int addAge(int i) {
		age += i;
	return age;
	}
		
}	

class Circle{
	double radius;
	public void setRadius(double i) {
		radius = i;
	}
	public double area() {
		return Math.PI * radius * radius ;	
		
	}	
}

//方法可以不返回數值,直接在方法體內輸出面積
//class Circle{
//	double radius;
//	public void area() {
//		double area = Math.PI * radius * radius ;	
//      System.out.println("圓的面積是" + area); 
//	}	
//}

// 去掉setRadius方法也可以使用
// class Circle{
//	double radius;
//	public double area() {
//		return Math.PI * radius * radius ;		
//	}	
//}

// 可以單獨定義方法,不定義屬性,但半徑更適合當做屬性
//class Circle{
//	public double area(double radius) {
//		return Math.PI * radius * radius ;		
//	}	
//}
class Rectangle{
	int length = 10;
	int width = 8;
	public int print() {
		for (int i = 0; i < length; i++) {
			for (int j = 0; j < width; j++) {
				System.out.print("* ");
			}
			System.out.println();
		}
		return length * width;//可以把計算面積與打印矩形放在一個方法內,但只返回面積值
	}	
}
    
class Rectangle1{
	int length;
	int width;
	public void setLength(int m) {
		 length = m;
	}
	public void setWidth(int n) {
		 width = n;
	}
	public void print() {
		for (int i = 0; i < length; i++) {
			for (int j = 0; j < width; j++) {
				System.out.print("* ");
			}
			System.out.println();
		}
	}
	public int area() {
		 return length * width;		
	}
				
}

class Rectangle2{

	public int print(int m,int n) {
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				System.out.print("* ");
			}
			System.out.println();
		}
		 return m * n;	
	}					
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章