局部變量和成員變量的差別:
*
- 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
}
}