java筆記(4)

方法的重載
方法名相同,參數不同(參數的個數,參數的類型)
方法在調用過程中編譯器能明確調用哪個方法,可以區分開來


public class TestoverFunc {
	void max(int a,int b){
		System.out.println("int");
		System.out.println( a > b ? a : b);
	}
	void max(short a,short b){
		System.out.println("short");
		System.out.println( a > b ? a : b);
	}
	 //重名,max(1,2);調用方法時無法區分
	//int max(int a,int b){
		//return a > b ? a : b;
	//}
	void max(double a,double b){
		System.out.println( a > b ? a : b);
	}
	public static void  main(String [] args){
		TestoverFunc t = new TestoverFunc();
		
		t.max(1,2);
		t.max(1.2,2.0);
		short a = 1;
		short b = 2;
		t.max(a,b);//調用short類型的函數
	}
}

class Person{
		int id;
		int age;
		
		//構造方法重載
		Person(){
			id = 0;
			age = 20;
		}
		Person(int _id){
			id = _id;
			age = 2;
		}
		Person(int _id,int _age){
			id = _id;
			age = _age;
		}
		void info(){
			System.out.println("id="+id+"age="+age);
		}
		//方法重載
		void info(String s){
			System.out.println("s:"+"id="+id+"age="+age);
		}
		public void setAge(int _age){
			age = _age;
		}
	}
public class TestOverload {
	public static void main(String[] args){
		Person p1 = new Person();
		Person p2 = new Person(0);
		Person p3 = new Person(1,22);
		Person p4 = new Person(2,23);
		//調用方法是針對於對象的,必須new一個對象,對這個對象調用方法
		p3.setAge(25);//id=1age=25
		p3.info();
		int age = 25;
		p4.setAge(age++);//s:id=2age=25
		p4.info("p4");
		System.out.println(age);//age = 26
	
	}
}

對象的創建與使用(調用方法是針對於對象的)

1.必須用new關鍵字創建對象;
2.使用對象引用.成員變量 對象引用.方法
3.同一類的每個對象有不同的成員變量存儲空間
4.同一類的每個對象共享該類的方法

經典例子

class Point {
	//參數
	int x;
	int y;
	//構造方法
	Point(int _x, int _y){
		x = _x;
		y = _y;
	}
	//方法函數
	public void setX(int _x){
		x = _x;
	}
	public void setY(int _y){
		y = _y;
	}
	public int getX(){
		return x;
	}
	public int getY(){
		return y;
	}
}
class Circle {
	Point o;//圓心
	int radius;//半徑
	
	//重載構造方法
	Circle(Point _o,int r){
		o = _o;
		radius = r;
	}
	Circle(int r){
		o = new Point(0,0);
		radius = r;
	}
	public void setO(int _x,int _y){//c1.setO() --> o.setX(),完成對c1中的x的修改
		o.setX(_x);
		o.setY(_y);
	}
	public Point getO(){
		return o;
	}
	public void setR(int r){
		radius = r;
	}
	public int getR(){
		return radius;
	}
	
	public double area(int r){
		return 3.14 * r * r;
	}
	boolean contains(Point p){//判斷點是否在圓內
		double x = p.getX() - o.getX();//o爲當前調用的圓的圓心
		double y = p.getY() - o.getY();
		if(x*x + y*y > radius * radius){
			return false;
		}
		else{
			return true;
		}
		
	}
	
}
public class TestCircle {
	//測試部分:new對象,調用類中定義的方法
	public static void main(String[] args){
		Circle c1 = new Circle(new Point(1,2),2);
		System.out.println("c1:"+c1.getO().getX()+","+c1.getO().getY());
		c1.setO(5,6);//
		System.out.println("c1:"+c1.getO().getX()+","+c1.getO().getY());
		
		Circle c2 = new Circle(5);
		c2.setR(9);
		System.out.println("c2:"+c2.getO().getX()+","+c2.getO().getY());
		
		Circle c3 = new Circle(3);
		System.out.println(c3.contains(new Point(1,1)));
		
	}
}

this使用

//this 是指向自身的引用
class Leaf {
	int i ;
	
	Leaf(int i){
		this.i = i;//把局部變量i的值賦給當前對象的成員變量i
	}
	Leaf increament(){
		i++;
		return this;
	}
	void print(){
		System.out.println(i);
	}
	/*void print(int i){
		System.out.println(i);
	}*/
}
public class TestThis {
	public static void main(String[] args){//總是忘寫main函數!!!
		int i = 100;
		Leaf f = new Leaf(i);
		f.print();
		f.increament().increament().print();//102
		f.increament().print();//103 //this一直對當前對象進行處理,累加i
	}
	
	
}

static 成員變量只有一份,且被類的所有對象共享
static 方法不可訪問非static成員,非靜態成員只能new一個對象進行訪問;
在這裏插入圖片描述

class Cat {
	static int sid = 0;//在data seg 中僅一份
	//此處去掉 static int sid = 0;//在這個位置sid屬於成員變量(存放在堆內存中)
	String name;
	int id;
	
	Cat(String name){
		this.name = name;
		id = sid++;
	}
}
public class TestStatic {
	public static void main(String[] args){
		Cat.sid = 100;//可用類名直接訪問靜態變量
		Cat mimi = new Cat("mimi");
		Cat pipi = new Cat("pipi");
		System.out.println(mimi.id);
		System.out.println(pipi.id);
		System.out.println(Cat.sid);//sid:102 計數
	}
}

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