------- android培訓、java培訓、期待與您交流! ----------
在上一篇的博文中已經介紹了基本的面向對象的知識,今天這篇博文主要介紹的有以下幾個內容
1、成員變量和局部變量
2、匿名對象
3、封裝
4、this關鍵字
5、構造方法
6、static關鍵字
1、成員變量和局部變量
成員變量是定義在類中的變量,而局部變量是定義在方法上或某個代碼塊中,比如for中等等
package day06;
public class ClassDemo01 {
public static void main(String[] args) {
Demo d = new Demo();
d.method();
}
}
class Demo{
int num; //成員變量
public void method(){
int num2 = 5; //局部變量
System.out.println("num:"+num+",num2:"+num2);
}
}
運行結果
通過運行結果我們發現,num沒有初始化也有值,這個值爲0,而局部變量如果沒有被初始化就使用的話,編譯就會報錯。
這邊我們就需要說說成員變量和局部變量的區別:
1、定義的位置不一樣,成員變量定義在類中方法以外,而局部變量則定義在方法的聲明上或者一些代碼塊中
2、在內存中的位置不一樣,成員變量定義在堆中,局部變量定義在棧中,定義在堆中的變量都會有一個初始化的值。
3、生命週期不一樣,成員變量的隨着對象的創建而創建,隨着對象的消失而消失,局部變量是隨着方法的調用而存在,隨着方法調用完畢而消失。
4、初始化值不同,成員變量有默認初始化值,而局部變量沒有,必須定義賦值後才能使用。
在開發中我們常常會將對象作爲形參,那麼這時候實際上需要的是一個對象,即是對對象的引用。
2、匿名對象,匿名對象其實就是直接new出一個對象進行使用,不需要使用一個對象去接收new出來的對象。
package day06;
public class NoNameDemo {
public static void main(String[] args) {
new Demo2().method();;
Demo2 d3 = new Demo2();
d3.show(new Demo2());
}
}
class Demo2{
public void method(){
System.out.println("匿名對象調用");
}
public void show(Demo2 d){
d.method();
System.out.println("傳過來一個匿名對象");
}
}
匿名對象的使用場景:當方法僅僅只需要調用一次的時候,還可以作爲參數進行傳遞。
3、封裝
封裝是面向對象的三大特性之一,什麼是封裝呢?
封裝就是將一些不需要對外提供的細節隱藏起來,並且對外提供一個公共的訪問方式。
封裝的體現之一就是private,private是一個修飾符,用於修飾變量、方法。
被private修飾的方法和變量只能在本類中被訪問。
package day061;
public class PrivateDemo {
public static void main(String[] args) {
// new Demo().show();報錯
new Demo().method();
}
}
class Demo{
private String str;
private void show(){
str = "hello world";
System.out.println(str);
}
public void method(){
show();
}
}
4、this關鍵字
this關鍵字是對當前對象的引用,this關鍵字代表的是一個對象,this.變量名或者this.方法名,該變量或者該方法屬於哪個類,this就代表該類對象。
假設我有一個方法,方法中有一個成員變量和一個方法,方法上有一個形參,形參的名稱與成員變量名相同,如果在方法中是用變量的話,使用的會是哪一個呢?
package day061;
public class PrivateDemo2 {
public static void main(String[] args) {
new Demo01().show("張三");
}
}
class Demo01{
String name;
public void show(String name){
System.out.println("name:"+name);
}
}
發現打印結果是張三,其實在java當中,如果成員變量和局部變量同名的話,首先會在方法中尋找是否有該變量,如果有,使用的就是局部變量,沒有就使用成員變量,那麼如果我們需要使用成員變量又該如何呢?需要使用成員變量的話就用this.成員變量名使用的就是成員變量了。
5、構造方法
構造方法是指與類名相同的方法,並且該方法沒有返回值類型,默認的構造方法是無參構造方法,如果手動給定了一個帶參的構造方法,那麼系統就不再默認生成構造方法了。
構造方法的作用其實是對對象進行初始化操作
package day062;
public class Demo {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.name+":"+s.age);
Student s2 = new Student("張三",25);
System.out.println(s2.name+":"+s2.age);
}
}
class Student{
int age;
String name;
public Student(){ //無參構造方法
age = 18;
name = "小李";
}
public Student(String name,int age){
this.name = name;
this.age = age;
}
}
6、static關鍵字
static是靜態的意思,用於修飾方法和變量。被static修飾的方法或者變量被所有對象所共享。
static特點:
隨着類的加載而加載
優先於對象存在
被類的所有對象共享
在靜態方法中只能訪問靜態成員,不能訪問非靜態成員
靜態變量和成員變量的區別:
A:所屬不同
靜態變量:屬於類,類變量
成員變量:屬於對象,對象變量,實例變量
B:內存位置不同
靜態變量:方法區的靜態區
成員變量:堆內存
C:生命週期不同
靜態變量:靜態變量是隨着類的加載而加載,隨着類的消失而消失
成員變量:成員變量是隨着對象的創建而存在,隨着對象的消失而消失
D:調用不同
靜態變量:可以通過對象名調用,也可以通過類名調用
成員變量:只能通過對象名調用