天天看點

老王學JAVA第29天

局部變量和成員變量的差別:

*

  • 1,定義的位置不一樣【重點】
  • 局部變量:在方法的内部
  • 成員變量:在方法的外部,直接寫在類當中
  • 2,作用範圍不一樣【重點】
  • 局部變量:隻有方法當中才可以使用,出了方法就不能再用
  • 成員變量:整個類全部可以通用
  • 3,預設值不一樣【重點】
  • 局部變量:沒有預設值,如果要想使用,必須手動進行指派
  • 成員變量:如果沒有指派,會有預設值,規則和數組一樣。
  • 4,記憶體的位置不一樣。(了解)
  • 局部變量:位于棧記憶體
  • 成員變量:位于堆記憶體
  • 5,生命周期不一樣:(了解)
  • 局部變量:随着方法進棧而誕生,随着方法出棧而消失。(通常情況存在時間短一下)
  • 成員變量:随着對象建立而誕生,随着對象被垃圾回收而消失。(通常情況存在時間長一下)
public class Demo01VariableDifference {
	
	String name;//成員變量
	
	public void methodA(){
		int num = 20;//局部變量
		System.out.println(num);
		System.out.println(name);
	}
	public void methodB(int param){//方法的參數就是局部變量
		//參數在方法調用的時候,必然會被指派的。
		System.out.println(param);
		
		int age;//局部變量
		//System.out.println(age);// 錯誤寫法,局部變量沒有指派是不能使用的,
//		System.out.println(num);//錯誤寫法
		System.out.println(name);//可以 輸出的時預設值(看第2點)
		}
		}
           

l 面向對象的三大特征:

  • 封裝,繼承,多态
  • 封裝性:在java當中的展現:
  • 1,方法就是一種封裝
  • 2,關鍵字privte也是一種封裝。privte 意思是私有化
  • 封裝就是将一些細節資訊隐藏起來,對于外界不可見。
  • `public class Demo01Method {

    public static void main(String[]args){

    /* int[] array = {5, 15, 25, 20, 100};

    int max = array[0];
     for(int i = 1; i < array.length; i++){
     	if(array[i] > max){
     		max = array[i];`
     			}
     }
     */
     int[] array = {5, 15, 25, 20, 100};
     int max = getMax(array);
     System.out.println("最大值:" + max);
     }
               

    //給我一個數組,我換給你一個最大值

    public static int getMax(int[] array){

    int max = array[0];

    for(int i = 1; i < array.length; i++){

    if(array[i] > max){

    max = array[i];

    }

    }

    return max;

    }

    }

問題描述:定義Person的年齡時,無法阻止不合理的數值被設定進來。

  • 解決方案:用private關鍵字将需要保護的成員變量進行修飾。
  • 一旦使用private進行修飾,那麼本來當中仍然可以通路。
  • 但是!超出了本類範圍之外就不能再直接通路了。
  • 間接通路Private成員變量,就是定義一對兒Getter/Setter方法
  • 必須叫setXxx或者是getXxx命名規則。
  • 對于Getter來說,不能有參數,傳回值類型和成員變量對應。
  • 對于Setter來說,不能有傳回值,參數類型和成員變量對應。

public class Person {

String name;//姓名
private int age;//年齡

public void show(){
	System.out.println("我叫" + name + "年齡" + age);
}
//設定間接通路 age
//這個成員方法,專門用于向age設定資料
//傳回值類型一定是void類型,名稱必須叫set(set是設定的意思就是放的意思)Age(A首字母必須大寫)
//再來個參數(int num);那麼age就再指派,就是擷取類num的值。
public void setAge(int num){
	if(num < 100 && num >= 9){
		age = num;
	}else{
		System.out.println("資料不合理");
	}
	age = num;
}
//這個成員方法,專門擷取age(往外拿的意思)的資料(就是往外拿)
public int getAge(){
	return age;
	}
	}
	package Demo;
           

public class Demo03Person {

public static void main(String[]args){

Person person = new Person();

person.show();
person.name = "趙麗穎";
//person.age = -20;//直接通路private内容,錯誤寫法
person.setAge(20);
person.show();
           

}

}

對于基本類型當中的boolean值,Getter方法一定寫成isXxx的形式,而getXxx規則不變

  • */
public class Student {
	private String name;//姓名
	private int age;//年齡
	private boolean male;//性别是不是男的

   public void setMale(boolean b){//注意
		male = b;
	}
	public boolean isMale(){//注意boolean
		return male;
	}
public void setName(String str){
		name = str;
	}
	public String getName(){
		return name;
	}
	
	
	public void setAge(int num){
		age = num;
	}
	public int getAge(){
		return age;
	}

}
           
package Demo;

public class Demo04Student {
	
	public static void main(String[]args){
		Student stu = new Student();
		
		stu.setName("鹿晗");
		stu.setAge(20);
		stu.setMale(true);
		
		System.out.println("姓名" + stu.getName());
		System.out.println("年齡" + stu.getAge());
		System.out.println("是不是男生" + stu.isMale());//記得是isMale而不是getMale
	}

}