作用域基本使用
? ? ? ? ? ? ? ? 在Java編程中,主要的變量就是屬性(成員變量)和局部變量。
? ? ? ? ? ? ? ? 我們說的局部變量一般是指在成員方法中定義的變量
? ? ? ? ? ? ? ? Java中作用域的分類
? ? ? ? ? ? ? ? ? ? ? ? 全局變量:也就是屬性,作用域為整個類體
? ? ? ? ? ? ? ? ? ? ? ? 局部變量:也就是除了屬性之外的其他變量,作用域為定義他的代碼塊中!
? ? ? ? ? ? ? ? 全局變量可以不賦值,直接使用,因為有默認值,局部變量必須賦值后,才能使用,因為沒有默認值。
注意事項和使用細節:
? ? ? ? ? ? ? ? 屬性和局部變量可以重名,訪問時遵循就近原則。
? ? ? ? ? ? ? ? 在同一個作用域中,比如在同一個成員方法中,兩個局部變量,不能重名。
? ? ? ? ? ? ? ? 作用域不同:
? ? ? ? ? ? ? ? ? ? ? ? 全局變量:可以被本類使用,或其他類使用(通過對象調用)。
? ? ? ? ? ? ? ? ? ? ? ? 局部變量:只能在本類中對應的方法中使用。
? ? ? ? ? ? ? ? 修飾符不同:
? ? ? ? ? ? ? ? ? ? ? ? 全局變量/屬性可以加修飾符。
? ? ? ? ? ? ? ? ? ? ? ? 局部變量不可以加修飾符。
構造器(也是構造方法)
????????????????構造器需求:
? ? ? ? ? ? ? ? ? ? ? ? 在創建一個人類對象時,是先把一個對象創建好之后,再給他的年齡和姓名屬性賦值,使用構造器就是在創建人類對象時,就直接指定這個對象的年齡和姓名。
? ? ? ? ? ? ? ? ?他是類的一種特殊方法,主要作用是完成對新對象的初始化,
? ? ? ? ? ? ? ? 基本語法:
? ? ? ? [修飾符] 方法名(形參列表){
? ? ? ? ? ? ? ? ? ? ? ? 方法體;
}
說明:構造器的修飾符可以默認,也可以是public,protected,private。
? ? ? ? ? ?構造器沒有返回值。
? ? ? ? ? ?方法名必須和類名一樣。
? ? ? ? ? ?形參列表和方法一樣的規則。
? ? ? ? ? ?構造器的調用,由系統完成。
public class Main {public static void main(String[] args) {Person p1 = new Person("LiHua", 18);System.out.println("姓名:" + p1.name);System.out.println("年齡:" + p1.age);}
}class Person {//這里的name和age就是全局變量String name;int age;//構造器沒有返回值,所以也不能寫void//構造器的名稱和類名一樣public Person(String pname, int page) {name = pname;age = page;}
}
構造器的注意事項和使用細節
? ? ? ? ? ? ? ? 一個類可以定義多個不同的構造器,即構造器重載。
//下面的兩個構造器就構成了構造器重載public Person(String pname, int page) {name = pname;age = page;}public Person(String pname) {name = pname;}
? ? ? ? ? ? ? ? 構造器是完成對象的初始化,并不是創建對象。? ? ??
? ? ? ? ? ? ? ? 如果程序員沒有定義構造器,系統會自動給類生成一個默認無參構造器(也叫默認構造器)
public class Main {public static void main(String[] args) {Dog d1 = new Dog();}
}class Dog {/** 默認構造器 Dog() {* * }*/}
????????????????一旦定義了自己的構造器,默認的構造器就覆蓋了,就不能使用默認的無參構造器。
對象創建的流程分析
this的引出和入門
????????
public class Main {public static void main(String[] args) {Dog d = new Dog("小狗", 18);d.out();}
}class Dog {String name;int age;//如果構造器的形參,能夠直接寫成屬性名就好了。但會出現一個問題,根據變量的作用域原則://構造器的name,age是局部變量,而不是屬性。/*public Dog(String dname, int dage) {name = dname;age = dage;}*///this關鍵字就很好的解決了上述問題public Dog(String name,int age){this.name = name; //this.name 就是當前對象的屬性namethis.age = age; //this.age 就是當前對象的屬性age}public void out() {System.out.println(name + "\t" + age);}
}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 總結:簡單的說,那個對象調用,this就代表那個對象。
this注意事項和使用細節:
? ? ? ? ? ? ? ? ? ? ? ? 1.this關鍵字可以用來訪問本類的屬性,方法,構造器。
? ? ? ? ? ? ? ? ? ? ? ? 2.this關鍵字用于區分當前類的屬性和局部變量。
? ? ? ? ? ? ? ? ? ? ? ? 3.訪問成員方法的語法:this.方法名(參數列表)。
public class Main {public static void main(String[] args) {Cat in = new Cat();in.test2();}
}class Cat {String name;int age;public void test1() {System.out.println("一狗");}public void test2() {System.out.println("二狗");this.test1();}
}
? ? ? ? ? ? ? ? ? ? ? ? 4.訪問構造器語法:this(參數列表);注意只能在構造器中使用(即只能在構造器中訪問另一個構造器,必須放在第一條)
public class Main {public static void main(String[] args) {Cat in = new Cat();in.test2();}
}class Cat {public void test1(String name, int age) {System.out.println("一狗");}public void test2() {this.test1("小狗", 18); //這個語句必須放在第一條System.out.println("二狗");}
}
? ? ? ? ? ? ? ? ? ? ? ? 5.this不能在類定義的外部使用,只能在類定義的方法中使用。
?
public class Main {public static void main(String[] args) {B b = new B();b.test1();}
}class B {String name = "小狗";int age = 18;public void test1() {System.out.println("name=" + this.name + "\n" + "age=" + this.age);}
}
Ending:?
????????OK,本篇文章就到此結束了,非常感謝你能看到這里,所以如果你覺得這篇文章對你有幫助的話,請點一個大大的贊,支持一下博主,若你覺得有什么問題或疑問,歡迎私信博主或在評論區指出~? ? ??