最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之代碼塊和內(nèi)部類詳解

 更新時(shí)間:2025年10月30日 09:13:09   作者:懶羊羊不懶@  
文章介紹了類的五大成員:成員變量、構(gòu)造器、方法、代碼塊和內(nèi)部類,代碼塊分為靜態(tài)代碼塊和實(shí)例代碼塊,分別在類加載和對(duì)象創(chuàng)建時(shí)執(zhí)行,內(nèi)部類包括成員內(nèi)部類、靜態(tài)內(nèi)部類、局部?jī)?nèi)部類和匿名內(nèi)部類,匿名內(nèi)部類是一種特殊的局部?jī)?nèi)部類,可以用于創(chuàng)建子類對(duì)象

類中的五大成分:

成員變量,構(gòu)造器,方法,代碼塊,內(nèi)部類。前面我們已經(jīng)學(xué)過前三種今天我們來學(xué)最后兩種。

1、代碼塊

  • 代碼塊是類的5大成員之一(成員變量、構(gòu)造器、方法、代碼塊、內(nèi)部類)。

代碼塊的為兩種:

靜態(tài)代碼塊:

  • 格式:static{}
  • 特點(diǎn):類加載時(shí)自動(dòng)執(zhí)行,由于類只會(huì)加載一次,所以靜態(tài)代碼塊也只會(huì)執(zhí)行一次。
  • 作用:完成列=類的初始化,例如:對(duì)靜態(tài)變量的初始化賦值。

實(shí)例代碼塊

  • 格式:{}
  • 特點(diǎn):每次創(chuàng)建對(duì)象時(shí),執(zhí)行實(shí)例代碼塊,并在構(gòu)造器前執(zhí)行。
  • 作用:和構(gòu)造器一樣,都是用來完成對(duì)象的初始化的,例如:對(duì)實(shí)例變量進(jìn)行初始化賦值。

Test類:測(cè)試類,演示靜態(tài)代碼塊

import java.util.Arrays;

public class Test {
public static int[] cards = new int[10];
//由static修飾的代碼塊,在類加載的時(shí)候執(zhí)行,只執(zhí)行一次。
//基本作用:完成對(duì)類的靜態(tài)資源初始化
static{
System.out.println("靜態(tài)代碼塊");
//在代碼塊初始化只是初始化一次,如果放到方法中,每次調(diào)用方法都會(huì)初始化
cards[0] = 1;
cards[1] = 2;
cards[2] = 3;
cards[3] = 4;
cards[4] = 5;
}
public static void main(String[] args) {
//靜態(tài)代碼塊
System.out.println("main方法");
System.out.println(Arrays.toString(cards));
}
}
/*
靜態(tài)代碼塊
main方法
[1, 2, 3, 4, 5, 0, 0, 0, 0, 0]
 */

Test類:測(cè)試實(shí)例代碼塊

public class Test {
private int a;
private String[] directory = new String[4];  //實(shí)例變量表示方向,如果用實(shí)例代碼塊表示每個(gè)對(duì)象的這個(gè)數(shù)組,都初始化NSEW, 表示東南西北。
//實(shí)例代碼塊,無static修飾,屬于對(duì)象,每次創(chuàng)建對(duì)象都會(huì)執(zhí)行
//基本作用:初始化對(duì)象實(shí)例資源
{
System.out.println("實(shí)例代碼塊");
a = 10;
directory[0] = "N";
directory[1] = "S";
directory[2] = "E";
directory[3] = "W";
}

public static void main(String[] args) {
//實(shí)例代碼塊
//new 實(shí)例代碼塊();
//沒有對(duì)象實(shí)例代碼塊{}是不執(zhí)行的
System.out.println("main方法");
Test i = new Test ();
}
}
/*
main方法
實(shí)例代碼塊
 */

2、內(nèi)部類

  • 如果一個(gè)類定義在另一個(gè)類的內(nèi)部,這個(gè)類就是內(nèi)部類。
  • 場(chǎng)景:當(dāng)一個(gè)類的內(nèi)部,包含了一個(gè)完整的事物,且這個(gè)事物沒有必要單獨(dú)設(shè)計(jì)時(shí),就可以把這個(gè)事物設(shè)計(jì)成內(nèi)部類。

內(nèi)部類的格式

//  把發(fā)動(dòng)機(jī)類放到汽車類中。

public  class  Car{

// 內(nèi)部類

public   class   Engine{

}

}

內(nèi)部類的種類

成員內(nèi)部類、靜態(tài)內(nèi)部類、局部?jī)?nèi)部類、匿名內(nèi)部類。

1.成員內(nèi)部類

就是類中的一個(gè)普通成員,類似前面我們學(xué)過的成員變量、成員方法。

public  class  Outer{

// 成員內(nèi)部類

public   class   Inner{

}

}

成員內(nèi)部類創(chuàng)建對(duì)象的格式

外部類名.內(nèi)部類   對(duì)象名  =  new  外部類(....).new內(nèi)部類(...);

Outer.Inner inner = new Outer().new Inner();
  • 成員內(nèi)部類中可以有普通類中所所以的東西,構(gòu)造器、成員變量、方法等。成員內(nèi)部類可以被繼承也可繼承其他類。

成員內(nèi)部類中訪問其他成員的特點(diǎn)

  • 成員內(nèi)部類中可以直接訪問外部類的靜態(tài)成員、靜態(tài)方法。也可以直接訪問外部類的實(shí)例成員、實(shí)例方法。(實(shí)例成員屬于對(duì)象,但是成員內(nèi)部類屬于外部類對(duì)象)
  • 成員內(nèi)部類的實(shí)例方法中,可以直接拿到當(dāng)前寄生的外部類對(duì)象:外部類.this()。

Outer 類:內(nèi)有成員內(nèi)部類Inner

public class Outer {
// 成員內(nèi)部類:無static修飾的內(nèi)部類,屬于外部類對(duì)象持有。
//注意事項(xiàng)2
private static int a = 100;
public class Inner{
private  int a = 200;
public void show(){
int a = 300;
//任務(wù)在這里打印100 200 300 用a
System.out.println(a);
System.out.println(this.a);
System.out.println(Outer.this.a);
}
}
private int ans;

public void setAns(int ans) {
this.ans = ans;
}

public int getAns() {
return ans;
}
}

Test類

public class Test {
public static void main(String[] args) {
//目標(biāo):搞清楚內(nèi)部類的語法
//成員內(nèi)部類創(chuàng)建對(duì)象格式
//外部類對(duì)象.內(nèi)部類對(duì)象 對(duì)象名 = new 外部類名稱.new.內(nèi)部名稱();
Outer.Inner inner = new Outer().new Inner();
inner.show();
}
}
/*
輸出結(jié)果:
300
200
100
 */

2.靜態(tài)內(nèi)部類

有static修飾的內(nèi)部類,屬于外部類自己持有。

public  class  Outer{

// 靜態(tài)內(nèi)部類

public static   class   Inner{

}

}

靜態(tài)內(nèi)部類創(chuàng)建對(duì)象的格式

外部類名.內(nèi)部類   對(duì)象名  =  new  外部類.內(nèi)部類(...);

Outer.Inner inner = new Outer.Inner();

靜態(tài)內(nèi)部類注意點(diǎn):可以直接訪問外部類的靜態(tài)成員,不能直接訪問外部類的實(shí)力成員。

3.局部?jī)?nèi)部類(了解)

4.匿名內(nèi)部類(重點(diǎn))

1.認(rèn)識(shí)匿名內(nèi)部類

  • 是一種特殊的局部?jī)?nèi)部類;
  • 所謂匿名:是類程序員不需要為這個(gè)類聲明名字,默認(rèn)有個(gè)隱藏的名字。

匿名內(nèi)部類格式

new   類或接口(參數(shù)值...){

類體(一般是方法重寫);

}
new  Animal(){
@Override
public  void  cry(){
}
}

特點(diǎn):匿名內(nèi)部類本質(zhì)是一個(gè)子類,并會(huì)立即創(chuàng)建出一個(gè)子類對(duì)象。

作用:用于更方便的創(chuàng)建一個(gè)子類對(duì)象。

Animal 類:抽象類

public abstract class Animal {
public abstract void cry(); //抽象類沒有方法體
}

Cat 類:繼承了Animal 類

public class Cat extends  Animal{
//方法重寫
@Override
public void cry(){
System.out.println("貓喵喵喵~~");
}

}

Test類:測(cè)試類

public class Test {
public static void main(String[] args) {
Animal c = new Cat();
c.cry();
}
}
/*
輸出結(jié)果:
貓喵喵喵~~
 */

上面的代碼使我們?cè)跊]有學(xué)習(xí)內(nèi)部類之前所寫的,現(xiàn)在我們學(xué)習(xí)了匿名內(nèi)部類,怎么用匿名內(nèi)部類來寫呢?

Animal 類:抽象類

public abstract class Animal {
public abstract void cry(); //抽象類沒有方法體
}

Test類:測(cè)試類

public class Test {
public static void main(String[] args) {
//匿名內(nèi)部類本質(zhì)是一個(gè)子類,同時(shí)會(huì)立即構(gòu)建一個(gè)子類對(duì)象
Animal c = new Animal() {
@Override
public void cry() {
System.out.println("貓喵喵喵~~(匿名你內(nèi)部類)");
}
}; //這里的分號(hào)不能忘。
c.cry();
}
}
/*
輸出結(jié)果:
貓喵喵喵~~(匿名你內(nèi)部類)
 */

上面代碼運(yùn)行產(chǎn)生的源碼:證明了匿名內(nèi)部類是一個(gè)子類。

2.匿名內(nèi)部類在開發(fā)中的常見形式

  • 通常作為一個(gè)對(duì)象參數(shù)傳輸給方法。

3.匿名內(nèi)部類在開發(fā)中真實(shí)使用場(chǎng)景實(shí)例

調(diào)用別人提供的方法實(shí)現(xiàn)需求時(shí),這個(gè)方法正好可以讓我們傳輸一個(gè)匿名內(nèi)部類對(duì)象給其使用。

Test類

import javax.swing.*;
import java.awt.event.ActionEvent;

public class Test {
public static void main(String[] args) {
//目標(biāo):搞清楚幾個(gè)匿名內(nèi)部類的使用場(chǎng)景
//需求:創(chuàng)建一個(gè)登錄窗口,窗口上只有一個(gè)登錄按鈕
JFrame win = new JFrame();
win.setSize(300, 200);
win.setLocationRelativeTo(null); //居中顯示
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel = new JPanel();
win.add(panel);

JButton btn = new JButton("登錄");
panel.add(btn);


//Java要求必須傳輸給這個(gè)按鈕添加一個(gè)點(diǎn)擊事件監(jiān)視器對(duì)象,這個(gè)對(duì)象可以監(jiān)視用戶的點(diǎn)擊操作,就可以做出反應(yīng)
btn.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("登錄成功~");
}
});
win.setVisible(true);
}
}

案例2:對(duì)象數(shù)組排序

使用comparator接口的匿名內(nèi)部類實(shí)現(xiàn)對(duì)數(shù)組進(jìn)行排序

對(duì)象數(shù)組排序

import java.util.Arrays;
import java.util.Comparator;

public class Testt {
public static void main(String[] args) {
Student []s = new Student[5];
s[0] = new Student("張三", 18);
s[1] = new Student("李四", 19);
s[2] = new Student("張三", 50);
s[3] = new Student("李白", 5);
s[4] = new Student("王五", 10);


for (int i = 0; i < s.length; i++) {
System.out.println(s[i].getName() + " " + s[i].getAge());
}

Arrays.sort( s, new Comparator<Student>() {
@Override
public  int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println("排序后:____________");
for (int i = 0; i < s.length; i++) {
System.out.println(s[i].getName() + " " + s[i].getAge());
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • jenkins-node節(jié)點(diǎn)配置方式解讀

    jenkins-node節(jié)點(diǎn)配置方式解讀

    Jenkins通過主從節(jié)點(diǎn)實(shí)現(xiàn)分布式構(gòu)建,支持負(fù)載均衡和特定環(huán)境任務(wù),配置包括標(biāo)簽匹配、啟動(dòng)方式、環(huán)境變量及工具管理,可參數(shù)化選擇節(jié)點(diǎn)執(zhí)行
    2025-08-08
  • 從Maven到Spring Boot實(shí)戰(zhàn)教程

    從Maven到Spring Boot實(shí)戰(zhàn)教程

    本文系統(tǒng)梳理了Java后端開發(fā)的核心技術(shù)棧,從Maven項(xiàng)目管理到Spring Boot實(shí)戰(zhàn),從MyBatis持久層到Spring MVC Web開發(fā),涵蓋了項(xiàng)目開發(fā)的全流程與關(guān)鍵知識(shí)點(diǎn),感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Mybatis中自定義實(shí)例化SqlSessionFactoryBean問題

    Mybatis中自定義實(shí)例化SqlSessionFactoryBean問題

    這篇文章主要介紹了Mybatis中自定義實(shí)例化SqlSessionFactoryBean問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • @RequestParam 參數(shù)偶爾丟失的解決

    @RequestParam 參數(shù)偶爾丟失的解決

    這篇文章主要介紹了@RequestParam 參數(shù)偶爾丟失的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中Synchronized的用法解析

    Java中Synchronized的用法解析

    synchronized是Java中的關(guān)鍵字,是一種同步鎖,本文給大家詳細(xì)介紹Java Synchronized 用法大全,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 基于Spring depends-on的使用詳解

    基于Spring depends-on的使用詳解

    這篇文章主要介紹了Spring depends-on的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • javaweb學(xué)習(xí)總結(jié)——使用JDBC處理MySQL大數(shù)據(jù)

    javaweb學(xué)習(xí)總結(jié)——使用JDBC處理MySQL大數(shù)據(jù)

    本篇文章主要介紹了JDBC處理MySQL大數(shù)據(jù),有時(shí)是需要用程序把大文本或二進(jìn)制數(shù)據(jù)直接保存到數(shù)據(jù)庫(kù)中進(jìn)行儲(chǔ)存的,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-11-11
  • java反射機(jī)制及beanUtils的實(shí)現(xiàn)原理分析

    java反射機(jī)制及beanUtils的實(shí)現(xiàn)原理分析

    本文介紹了Java的反射機(jī)制、VO、DTO、PO的概念以及BeanUtils的實(shí)現(xiàn)原理和簡(jiǎn)單示例,通過反射可以在運(yùn)行時(shí)動(dòng)態(tài)操作類、方法和字段,BeanUtils用于在不同bean之間進(jìn)行屬性復(fù)制
    2024-12-12
  • Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作示例

    Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean銷毀之前的行為操作,結(jié)合實(shí)例形式分析了spring在bean銷毀之前的行為相關(guān)設(shè)置與使用技巧,需要的朋友可以參考下
    2019-11-11
  • Spring 框架實(shí)現(xiàn)賬戶轉(zhuǎn)賬功能(推薦)

    Spring 框架實(shí)現(xiàn)賬戶轉(zhuǎn)賬功能(推薦)

    通過本文的介紹,我們了解了如何使用Spring框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的賬戶轉(zhuǎn)賬功能,主要使用了 Spring 的依賴注入、和事務(wù)管理功能,保證了轉(zhuǎn)賬操作的原子性和數(shù)據(jù)的一致性,感興趣的朋友跟隨小編一起看看吧
    2025-07-07

最新評(píng)論

夏津县| 洛扎县| 泽库县| 瑞丽市| 盐山县| 佛山市| 阿巴嘎旗| 靖远县| 芜湖市| 江孜县| 报价| 余姚市| 聊城市| 济源市| 嵊泗县| 兴化市| 台州市| 本溪市| 海淀区| 丹寨县| 隆子县| 阳东县| 河源市| 满洲里市| 鄂托克前旗| 普兰店市| 辽中县| 临潭县| 措勤县| 云南省| 宜兴市| 松潘县| 绩溪县| 深水埗区| 冷水江市| 安平县| 惠州市| 民勤县| 景东| 郸城县| 桂林市|