日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaSE基础知识(5)—面向对象(5.2类的成员)

發布時間:2025/7/25 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaSE基础知识(5)—面向对象(5.2类的成员) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、屬性

1、語法

  數據類型 屬性名 【= 屬性值】;

2、特點

①屬性的數據類型可以為任意類型,包含基本類型或引用類型
②屬性可以不用手動賦值,有默認值
  int——0
  double——0.0
  char——\u0000
  boolean——false
  引用類型——null
③屬性伴隨著對象存放在中,不同對象的屬性相互獨立,互不影響
④變量根據作用域不同,分為以下兩類
  全局變量:又稱為屬性,定義在類體中,作用域為整個類體以及其他類
  局部變量:定義在方法或某個代碼塊內,作用域為所在的方法或代碼塊

3、局部變量和全局變量的區別:★

?作用域生命周期存儲位置訪問修飾符默認值重命名
局部變量定義變量的方法或某個代碼塊中

隨著方法或代碼塊的執行而創建

隨著執行的結束而消亡

基本類型:棧

引用類型:對象名存在棧,對象存在堆

?兩個局部作用域有交集時,不可以重名
全局變量整個類體及其他類

隨著對象的創建而創建

隨著對象的消亡而消亡

?堆?√?√?一個全局和一個局部,可以重名,默認遵循就近原則

二、方法

1、概念

理解:用于描述類或對象的行為或功能,定義在類體中,屬于類的成員

2、好處

1、提高代碼的重用性和維護性
2、從調用層面上,調用者不用關心方法的內部實現細節,調用比較簡單。只需要知道:
  叫什么(方法名)
  干什么(方法功能)

3、定義語法 ★

[修飾符]?返回類型?方法名(參數列表){
  方法體
}

4、方法五要素

(1)修飾符

特點:可選
public 公共的,任意類都可以調用該方法

(2)返回類型

說明:某些行為或功能執行結束后需要返回給調用方一個具體的值,則將值的類型標注成返回類型,如果行為或功能執行結束后沒有返回值,則返回類型寫成void即可
特點:
  ①一個方法至多有一個返回值,要求返回值的類型和返回類型一致或兼容
  ②返回類型可以為任意類型,包含基本或引用
  ③如果方法有返回值,則方法體中要求必須有return語句,而且return的值的類型必須和返回類型一致或兼容
   如果方法沒有返回值,則方法體不用加return語句,如果非加,則寫成 return;
  ④如果方法有返回值,則必須保證所有路徑下都可以return值;
    public int m(int i){
      if(i>5)
        return 10;
      return 99;
    }

(3)方法名

遵循標識符的命名規則和規范(同變量的規范):見名知義,且遵循駝峰命名法

(4)參數列表

說明:某些方法的執行需要調用方傳遞源數據,否則無法執行。我們把這些源數據稱為參數
特點:
  ①參數可以為多個,語法如下:
    (類型 參數名1,類型 參數名1,...,類型 參數名n)
  ②參數類型可以為任意類型,包含基本類型或引用類型
  ③參數的本質就是一個局部變量,也必須賦值后才能使用,但這個賦值一般是隱式賦值的(傳參時)
  ④方法定義時的參數稱為形式參數,簡稱形參;方法調用時的參數稱為實際參數,簡稱實參
    形參和實參的類型、個數必須一致,參數名無要求

(5)方法體

可以包含0條或任意多條邏輯語句。
形式:輸入、輸出、變量、運算、分支、循環、方法調用

5、調用語法 ★

1、本類內方法調用:方法名(實參列表);
2、跨類中方法調用:對象或類名.方法名(實參列表);
注意:

如果待調用的方法有返回值,則最好用變量接受或做其他處理
如果待調用的方法沒有返回值,則不能當成表達式做任何處理

6、調用機制 √

每次方法調用,都伴隨“入棧”的操作
每次調用結束,都伴隨“出棧”的操作

7、方法的傳參 ★

特點:
java中方法按“值”傳遞。
  參數類型為基本類型,則值代表元素內容,傳遞是一個拷貝,形參的改變不影響實參
  參數類型為引用類型,則值代表地址,傳遞是一個地址(引用),形參的改變影響實參
示例:
  public static void main(String[] args){
    int[] arr = {1,2,3};
    update(arr);
    print(arr);//1 2 3
  }
  public static void update(int[] arr){
    arr = new int[3];
    arr[0]=100;
    print(arr);//100 0 0
  }
  public static void print(int[] arr){
    for(int i=0;i<arr.length;i++){
      System.out.println(arr[i]);

    }
  }

8、方法的重載

1、定義:java中提供了一種機制,允許同一個類中多個同名但參數列表不同的方法存在
2、好處:
  ①解決了起名問題
  ②解決了記名麻煩問題
3、要求:

①同一個類中
②方法名必須相同
③參數列表必須不同(參數類型、個數或順序至少有一樣不同)
④返回類型無要求
⑤修飾符無要求

9、可變參數的方法

1、理解:jdk5.0出現的新特性。java中允許將一個類中同名,同參數類型、同返回的多個方法抽取成一個可變參數的方法

2、語法:

  修飾符 返回類型 方法名(參數類型...參數名){
    //參數當做數組類型去使用
  }

3、好處:

  ①提高重用性
  ②提高維護性和擴展性

4、特點:

①可變參數的實參允許0個或多個參數
②可變參數的實參允許數組類型
③可變參數可以和普通類型的參數同時出現在一個形參列表,但要求可變參數必須放在最后
一個形參列表中最多有一個可變參數
⑤可變參數的方法、普通類型參數的方法實現了重載(注:不可以和同一類型的數組參數方法構成重載),傳參時:
  遵循:先找一致類型——>兼容類型——>可變參數
    A a = new A();
    a.m(10);//執行方法1
    pubic class A{
      public void m(int a){ }? ?//方法1
      public void m(double a){ }??//方法2
      public void m(int... a){}//方法3
    }

三、構造器

1、理解

構造器又稱為構造方法,屬于類中的第三大成員。
本質上同"方法",只是沒有返回類型,且對于一個對象來講,只調用一次,并且不是通過對象或類顯示調用

2、語法

[修飾符] 構造器名 (參數列表){
  //構造器體
}
注意:
①構造器名與類名一致!
②沒有返回類型

3、好處

①用于創建對象
②可以進行初始化的操作,從一定程度上提高代碼的重用性!

4、特點

①每一個類都有構造器,如果沒有顯式聲明,系統將默認提供一個無參構造器
②如果顯式聲明了構造器,則系統將不再提供構造器
構造器可以重載
④對于一個對象來講,構造器只調用一次

注意:構造器的調用語法
方式一: 創建一個新對象
  new 構造器名(參數列表);?
方式二:為了進行初始化(注:this或super調用構造器,只能放在構造器的而第一句,而且只能有一個)
  this(參數列表);
  super(參數列表)

?

四、初始化塊

1、理解

初始化塊又稱為代碼塊,屬于類中的成員,本質上同方法。但沒有方法名、沒有參數和返回類型,只有方法體,而且不是顯式調用的,是創建對象或加載類時隱式調用

2、語法

[static]{
  方法體
}
使用static修飾的,稱為靜態代碼塊
沒有用static修飾的,稱為普通代碼塊

3、好處

①用于初始化信息,相當于構造器的補充
②當構造器重載時,如果里面有重復的語句,為了提高代碼的重用性,往往將重復的語句提到初始化塊中

4、特點 ★

(1)調用時機

靜態代碼塊?是當加載類時,被隱式調用,而且只調用一次
普通代碼塊?是當對象創建時,被隱式調用,而且可以加載多次

【補充】類的加載時機

①創建對象
②調用靜態成員
③加載子類
④反射

(2)順序(靜態代碼塊和普通代碼塊)

如果:一個類中可以有多個靜態代碼塊和多個普通代碼塊
  靜態代碼塊的? 執行? 優先于? ?普通代碼塊
注意:同一個類別的代碼塊的執行順序取決于定義的先后順序

(3)順序(靜態代碼塊、普通代碼塊、屬性初始化、構造器)

如果:一個類中有多個靜態代碼塊和多個普通代碼塊、屬性初始化、構造器
  靜態代碼塊|靜態屬性——>普通代碼塊|普通屬性——>構造器
注意:同一個類別的代碼塊的執行順序取決于定義的先后順序

(4)順序(父子類中靜態代碼塊、普通代碼塊、屬性初始化、構造器)

如果:父子類中都有多個靜態代碼塊和多個普通代碼塊、屬性初始化、構造器
  父類靜態代碼塊|靜態屬性——>子類靜態代碼塊|子類靜態屬性
  ——>父類普通代碼塊|普通屬性——>父類構造器
  ——>子類普通代碼塊|普通屬性——>子類構造器
注意:同一個類別的代碼塊的執行順序取決于定義的先后順序

(5)靜態成員的特點

靜態代碼塊中只能直接訪問靜態成員,不能直接訪問普通成員

?

五、內部類

1、理解

一個類體中又完整的嵌套了另一個完整的類結構,被嵌套在里面的類,稱為內部類
嵌套其他類的類,稱為外部類。
其他類,稱為外部其他類。

2、好處

?可以直接訪問外部類的私有成員

3、分類

按定義位置不同:
  定義在成員位置
    成員內部類(無static修飾)
    靜態內部類(有static修飾)
  定義在局部位置
    局部內部類
    匿名內部類

4、內部類之成員內部類

(1)語法

class Outer{
  class Inner{
  }
}

(2)特點

①成員內部類中可以有五大成員,但不能有靜態成員。原因:靜態成員的加載時機早于成員內部類
②成員內部類可以添加訪問修飾符,訪問權限遵循修飾符的限定
③互訪原則:

成員內部類——>外部類 ★
  直接訪問,因為里面隱含著一個Outer.this的引用。
  注意:當成員內部類和外部類的成員重名時,默認訪問的是內部類的成員,如果想訪問外部類的成員,可以通過Outer.this.成員的方式訪問
外部類——>成員內部類
  通過創建對象,去訪問
  語法:new Inner().成員
外部其他類——>成員內部類
  通過創建對象,去訪問
  語法:Outer.Inner member = new Outer().new Inner(); member.成員?
成員內部類——>外部其他類
  通過創建對象,去訪問
  語法:new Other().成員

5、內部類之靜態內部類

(1)語法

class Outer{
  static class Inner{
  }
}

(2)特點

1、靜態內部類中可以有所有五大成員,包含普通的和靜態的
2、靜態內部類可以添加訪問修飾符,當然也要遵循訪問修飾符的權限限定
3、互訪原則

靜態內部類——>外部類 ★
  直接訪問外部類中的靜態成員,包含私有的。但不能直接訪問外部類的普通成員(遵循靜態成員的特點)
  注意:如果外部類和靜態內部類中有同名成員,訪問時遵循就近原則,如果非要訪問外部類的成員,則通過 (外部類名.成員 )方式訪問
外部類——>靜態內部類
  情況1:如果訪問里面的靜態成員,則直接通過靜態內部類名去訪問
  情況2:如果訪問里面的普通成員,則通過創建靜態內部類對象去訪問。
    語法:new Inner().成員
外部其他類——>靜態內部類
  通過創建對象去訪問
  語法:Outer.Inner member = new Outer.Inner();
靜態內部類——>外部其他類
  注意:和普通兩個類之間的互訪一樣
  通過創建對象或類名的方式去訪問

6、內部類之局部內部類

(1)語法

public void method(){
  for(int i=1;i<10;i++){
    class Inner3{
    }
  }
}

(2)特點

①里面可以有五大普通成員,但不能有靜態成員。原因:靜態成員的加載時機早于局部內部類
不能添加訪問修飾符
③作用域:比較小,僅僅在定義它的方法或代碼塊中有效,而且遵循前向引用
④互訪原則

局部內部類——>外部類 ★
  情況1:可以訪問同一個作用域的局部變量,但不能更新。因為默認是final修飾(jdk8,final是系統自動提供的;jdk8之前,final是手動加入)
      為什么里面只能訪問局部常量
        局部變量的消亡時機早于局部內部類,所以局部內部類中使用的僅僅是局部變量的拷貝。如果備份可以更新,則會導致數據不一致。
        為了避免這種現象,只能讀取,不能更新!
  情況2:直接訪問外部類的所有成員,包含私有的
  注意:如果外部類和內部類的成員同名,則默認遵循就近原則,如果非要訪問外部類的成員,則通過(外部類.this.成員 )方式訪問
外部類——>局部內部類
  創建對象并訪問

7、內部類之匿名內部類

(1)語法

new 父類或接口名(){
  //類體
};

(2)特點

①匿名內部類中可以有屬性、方法、內部類、初始化塊,但不能有構造器和靜態成員
不能添加修飾符
③作用域比較小,僅僅在定義它的方法或代碼塊中。
  注意:匿名內部類的對象只有一個,可以直接拿著對象調用里面的成員或為對象起一個引用名,使用引用名調用通用的成員!
④互訪原則

匿名內部類——>外部類
  情況1:訪問外部類中同一個作用域的局部變量,但要求局部變量使用final修飾(jdk8之前,final是需要手動添加;jdk8時,final是系統自動添加,不用手動添加)
    原因:匿名內部類的消亡時機晚于局部變量的消亡時機,所以匿名內部類中使用的是局部變量的備份!為了避免數據不一致,所以只能讀取不能更新
  情況2:可以直接訪問外部類中的成員
    如果出現重名問題,則默認訪問內部類的成員,如果非要訪問外部類的成員,需要通過(外部類名.this.成員) 方式訪問
外部類——>匿名內部類
  new 類名(){}.成員

(3)應用場景 ★

當做實參傳遞給形參類型為接口的方法!

轉載于:https://www.cnblogs.com/truthseeking/p/9513507.html

總結

以上是生活随笔為你收集整理的JavaSE基础知识(5)—面向对象(5.2类的成员)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。