欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaSE學習之內(nèi)部類及常用API

 更新時間:2021年12月15日 11:04:13   作者:java舞動乾坤  
這篇文章主要介紹了JavaSE中的內(nèi)部類和幾個常用的API,文中的示例代碼介紹詳細,對我們學習JavaSEI有一定的幫助,感興趣的小伙伴可以跟隨小編一起學習一下

1.內(nèi)部類

1.1 內(nèi)部類概述

內(nèi)部類:就是在一個類中定義一個類。例如:在一個類A內(nèi)部定義一個類B,類B就被稱為內(nèi)部類

格式:public class 類名{修飾符 class 類名{}}

范例

public class Outer{
   public class Inter{//內(nèi)部類
   }
}

內(nèi)部類的訪問特點

1. 內(nèi)部類可以直接訪問外部類成員,包括私有

2. 外部類如果想訪問內(nèi)部類就要創(chuàng)建對象

舉例

public class Outer {//創(chuàng)建外部類
    private  int age=9;
    public class Inter{//創(chuàng)建內(nèi)部類
        //內(nèi)部類創(chuàng)建方法
        public void show(){
            //內(nèi)部類可直接訪問外部類
            System.out.println(age);
        }
    }
    public void method(){
        //這里是外部類的調(diào)用,那么不能直接像下面一樣調(diào)用show()方法,
        //不然就會報錯,不能直接訪問
        //show();不能這樣
        //應改為創(chuàng)建內(nèi)部類對象,通過對象進行訪問
         Inter i=new Inter();
         i.show();
    }
}

1.2 成員內(nèi)部類

按照內(nèi)部類在類中的位置不同,可以分為兩種形式

  • 在類的成員位置:成員內(nèi)部類
  • 在類的局部位置:局部內(nèi)部類
//類
public class Outer {//創(chuàng)建外部類
    private  int age=9;
    public class Inter{//創(chuàng)建內(nèi)部類
        //內(nèi)部類創(chuàng)建方法
        public void show(){
            //內(nèi)部類可直接訪問外部類
            System.out.println(age);
        }
    }
  }
//測試類

在這里插入圖片描述

那么怎么不讓它報錯呢?如何創(chuàng)建呢

  • 外部類.內(nèi)部類 對象名=new 外部類.new內(nèi)部類();
  • Outer.Inter oi=new Outer().new Inter();
//測試類
public class Main {
    public static void main(String[] args) {
     Outer.Inter oi=new Outer().new Inter();//構(gòu)造內(nèi)部類對象
     oi.show();
    }
}

但是,一般情況下,為了安全性不會將內(nèi)部類定義為公有,會設置為私有,上面的Outer.Inter oi=new Outer().new Inter();就不能這樣構(gòu)造內(nèi)部類的對象了,否則就會報錯,那么該如何創(chuàng)建呢?

很簡單,因為外部類可以通過創(chuàng)建內(nèi)部類的對象進行訪問內(nèi)部類,那么就可以在測試類中寫外部類的方法,從而進行間接訪問。

//類
public class Outer {//創(chuàng)建外部類
    private  int age=9;
   private class Inter{//創(chuàng)建內(nèi)部私有類
        //內(nèi)部類創(chuàng)建方法
        public void show(){
            //內(nèi)部類可直接訪問外部類
            System.out.println(age);
        }
    }
    public void method(){
    Inter i=new Inter();//創(chuàng)建內(nèi)部類對象間接訪問
    i.show();  //調(diào)用方法             
    }
  }

這樣就可以輸出內(nèi)部類的值了

運行結(jié)果

9

1.3 局部內(nèi)部類

局部內(nèi)部類是在方法中定義的類,所以外界是無法訪問的,需要在方法內(nèi)部創(chuàng)建對象并使用該類可以直接訪問外部類的成員,也可以訪問方法內(nèi)部的局部變量

//類
public class Outer {//創(chuàng)建外部類
    private int age = 9;

    public void method() { //在方法中局部創(chuàng)建內(nèi)部類

        class Inter {//創(chuàng)建內(nèi)部類
            private int age2 = 2;//局部變量也可以

            public void show() {
                System.out.println(age);
                System.out.println(age2);
            }
        }
        Inter i = new Inter();//創(chuàng)建內(nèi)部類對象間接訪問
        i.show();  //調(diào)用方法
    }
}
public class Main {
    public static void main(String[] args) {
     Outer o=new Outer();
     o.method();//間接調(diào)用方法
    }
}

1.4 匿名內(nèi)部類

  • 前提:存在一個類或者接口,這里的類可以是具體類,也可以是抽象類
  • 格式:new 類名或者接口名(){重寫方法}
  • 范例:new Inter(){public void show(){}};
  • 解釋: new Inter()是匿對象,繼承了這個類,或?qū)崿F(xiàn)了這個接口
  • 本質(zhì): 是一個繼承了該類或者實現(xiàn)了該接口的子類匿名對象,

匿名內(nèi)部類是局部內(nèi)部類的一種形式,寫的時候也應該在方法中

//前提:一個類或者接口
public interface Inter {//寫接口
    void show();//寫抽象方法
}

那么既然是對象,就可以通過對象調(diào)用方法

public class Outer {//創(chuàng)建外部類

    public void method() {
     new Inter() {//這個是對象
         @Override//重寫方法
         public void show() {
             System.out.println("匿名內(nèi)部類");
         }
     }.show();//通過對象調(diào)用方法
    }
}

這塊是重點:new Inter() {//這個是對象 @Override//重寫方法 public void show() { System.out.println("匿名內(nèi)部類"); } }.show();//通過對象調(diào)用方法,這里采用了對象調(diào)用方法,上面整體是對象,然后.show()調(diào)用方法

//測試類
public class Main {
    public static void main(String[] args) {
     Outer o=new Outer();
     o.method();//調(diào)用方法
    }
}

接下來,有個疑問,你會說,如果我想多次調(diào)用方法,是不是要寫很多次這個方法呢?答案是否定的,既然是內(nèi)部類,那么就可以通過多態(tài)形式進行,即:Inter i=new Inter(){};然后通過i來調(diào)用show()方法

public class Outer {//創(chuàng)建外部類

    public void method() {
    Inter i =new Inter() {//多態(tài)形式,左面接口名,右面對象
         @Override//重寫方法
         public void show() {
             System.out.println("匿名內(nèi)部類");
         }
     };
     i.show();//遵循編譯看左面,執(zhí)行看右面
     i.show();
    }
}

1.5 匿名內(nèi)部類在開發(fā)中的使用

學完了匿名內(nèi)部類之后,那么它在開發(fā)中有哪些運用呢?

在開發(fā)時,如果要實現(xiàn)一個接口方法時,不需要再創(chuàng)建類,比如之前寫的貓?zhí)吡?,如果想寫狗跳高了還要重建一個類,這樣顯得太過于繁瑣,而且占用空間,既然內(nèi)部類本質(zhì)是類的對象,那么直接使用就會大量降低代碼的低效性

//接口
public interface Jummping {
    void jump();//抽象類
}
//操作類
public class JumppingOperator {
    public void useOperator(Jummping j){//接口名作為形參,new Jumpping(){}
        j.jump();//內(nèi)部類對象調(diào)用方法
    }

public class Jumpping {
    public static void main(String[] args) {
        JumppingOperator j = new JumppingOperator();//創(chuàng)建操作類對象
        j.useOperator(new Jummping() {
            @Override
            public void jump() {
                System.out.println("貓?zhí)吡?);
            }
        });//用匿名內(nèi)部類實現(xiàn)
        //重復使用,就不用再創(chuàng)建Cat類或者Dog類了
        j.useOperator(new Jummping() {
            @Override
            public void jump() {
                System.out.println("狗跳墻了");
            }
        });
    }
}

2.常用API

2.1Math

public final class Math extends Object被final修飾,是最終類,詳細內(nèi)容見APi手冊

在這里插入圖片描述

通過幫助文檔知道,它沒有構(gòu)造方法,那么如何使用類中的成員呢?

這時候就需要看成員是否都是靜態(tài)的,如果是,通過類名就可以直接調(diào)用

常用方法

在這里插入圖片描述

public class Main {
        public static void main(String[] args) {
                //絕對值
                System.out.println(Math.abs(-88));
                System.out.println(Math.abs(88));
                System.out.println("----------");
                //返回大于或者等于參數(shù)的double值為一個整數(shù),(向上取整)
                System.out.println(Math.ceil(1.12));
                System.out.println("----------");
                //返回0小于或者等于參數(shù)的double值為一個整數(shù),(向下取整)
                System.out.println(Math.floor(1.21));
                System.out.println("----------");
                //返回最大值
                System.out.println(Math.max(1,2));
                System.out.println("----------");
                //返回最小值
                System.out.println(Math.min(2,6));
                System.out.println("----------");
                //返回a的b次冪
                System.out.println(Math.pow(2,2));
                System.out.println("----------");
                //返回四舍五入的整數(shù)值
                System.out.println(Math.round(1.51));
                System.out.println("---------");
                //返回隨機值,[0-1.0)
                System.out.println(Math.random());
                //返回1-100整數(shù)隨機值
                System.out.println((int)(Math.random()*100)+1);


        }
} 

運行結(jié)果

88

88

----------

2.0

----------

1.0

----------

2

----------

2

----------

4.0

----------

2

---------

0.6041376042702374

78

2.2 System

在這里插入圖片描述

不能實例化,不能創(chuàng)建對象,靜態(tài)修飾

常用方法

在這里插入圖片描述

public class Main {
        public static void main(String[] args) {
                System.out.println("start");
                System.exit(0);
                //java虛擬機已經(jīng)停止運行,無法在進行執(zhí)下面的語句
                System.out.println("end");
        }
}
 

運行結(jié)果

start

public class Main {
        public static void main(String[] args) {
                System.out.println(System.currentTimeMillis()*1.0/1000/60/60/24/365+"年");
                System.out.println("開始計算下面程序執(zhí)行的時間");
               long start=System.currentTimeMillis();//用lang定義,因為數(shù)字太大
                for(int i = 0; i <10000;i++){
                        System.out.println(i);
                }
                long end=System.currentTimeMillis();//用lang定義
                System.out.println("程序運行時間為:"+(end-start)+"毫秒");
        }
}

2.3 Object

概述

Object是類層次結(jié)構(gòu)的根,每個類都可以將Object作為超類。所有類都直接或者間接的繼承自該類

構(gòu)造方法: public Object()

回想面向?qū)ο笾?,為什么說子類的構(gòu)造方法默認訪問的是父類的無參構(gòu)造方法?

因為它們的頂級父類只有無參構(gòu)造方法心

toString()方法的使用

可以使得單獨的多個屬性變得有聯(lián)系,讓人一眼就能夠看明白什么意思,例如我們在前面講到的創(chuàng)建學生實體類時,在測試類輸出時還要用getXxx()+setXxx才能進行輸出,有了這種方法,我們就可直接進行使用了,這個方法建議所有子類進行重寫使用,在使用時可以直接使用方法,快捷鍵還是Alt+Inster下面可以看到toString()方法

下面進行舉例:

public class Student {//其實這里繼承了Object,所以Student這個類理論上是子類,
//所以可以使用toString()方法,但要重寫
    private String name;
    private  int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {//重寫方法
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

在這里插入圖片描述

//測試類
public class Main {
        public static void main(String[] args) {
            Student s=new Student("張三",18);//采用有參構(gòu)造
                System.out.println(s);//因為使用了toString()方法,
                // 就不用再用getName(),getAge()輸出了,直接輸出s

        }
} 

運行結(jié)果

Student{name='張三', age=18}

這樣就可以讓他們之間建立一種聯(lián)系

equal()方法

在這里插入圖片描述

比較的是內(nèi)容值,當然,如果按照上面的方法進行比較姓名,年齡,它返回的的地址,因為地址不同,那么就會返回false,這個還需要在子類中重寫方法,快捷鍵依然是那個

在這里插入圖片描述

在這里插入圖片描述

然后一直點下一步

再刪掉這部分即可

在這里插入圖片描述

//測試類
public class Main {
        public static void main(String[] args) {
            Student s1=new Student("張三",18);//采用有參構(gòu)造
                System.out.println(s1);
                Student s2=new Student("張三",18);//采用有參構(gòu)造
                System.out.println(s2);
                 System.out.println(s1.equals(s2));
                 //這里因為是new出來的,所以比較地址就會返回false,那么只有重寫了方法才會
                
        }
}
//學生類
public class Student {
    private String name;
    private  int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

}

這是對equals()方法代碼內(nèi)容的解釋

在這里插入圖片描述

2.4 Array的排序

對于封裝好的排序方法,不用豈不是太可惜,但是用之前我們也要思考自己能否寫出一個高效的算法排序的方法。

下面進行介紹Arrays類的使用,由于APi中方法太多,詳細內(nèi)容還請到API中自行查看,這里講述兩種常用的方法:

在這里插入圖片描述

工具類的設計思想:

1. 構(gòu)造方法用private修飾:為了防止外界創(chuàng)建對象

2. 成員用public static修飾:使用類名來訪問該成員變量

import java.util.Arrays;

public class Main {
        public static void main(String[] args) {
           int []arr={2,7,3,4,9,5};
            System.out.println("排序前: "+Arrays.toString(arr));
            Arrays.sort(arr);
            System.out.println("排序后: "+Arrays.toString(arr));

        }
} 

運行結(jié)果:

排序前: [2, 7, 3, 4, 9, 5]

排序后: [2, 3, 4, 5, 7, 9]

現(xiàn)要求從鍵盤錄入數(shù)字,要求數(shù)組是動態(tài)的,對數(shù)據(jù)進行排序

public class Main {
        public static void main(String[] args) {

            Scanner sc=new Scanner(System.in);
            System.out.println("請你輸入一個數(shù)n:");
            int []arr=new int[sc.nextInt()];//動態(tài)數(shù)組
            for(int i=0;i< arr.length; i++){
                arr[i]=sc.nextInt();
            }
            Arrays.sort(arr);
            System.out.println("排序后:"+Arrays.toString(arr));
        }
} 

錄入:

5

1 5 3 7 9

運行結(jié)果:

[1, 3, 5, 7, 9]

以上就是JavaSE學習之內(nèi)部類及常用API的詳細內(nèi)容,更多關于JavaSE內(nèi)部類 API的資料請關注腳本之家其它相關文章!

相關文章

  • 解讀CommandLineRunner或者ApplicationRunner接口

    解讀CommandLineRunner或者ApplicationRunner接口

    這篇文章主要介紹了解讀CommandLineRunner或者ApplicationRunner接口的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java簡單實現(xiàn)線程池

    Java簡單實現(xiàn)線程池

    這篇文章主要為大家詳細介紹了Java簡單實現(xiàn)線程池,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • 詳解Java中類的加載與其初始化

    詳解Java中類的加載與其初始化

    這篇文章主要為大家詳細介紹了Java中類的加載與其初始化的相關資料,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2022-12-12
  • Java基于NIO實現(xiàn)聊天室功能

    Java基于NIO實現(xiàn)聊天室功能

    這篇文章主要為大家詳細介紹了Java基于NIO實現(xiàn)聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java實現(xiàn)簡單猜數(shù)字游戲

    java實現(xiàn)簡單猜數(shù)字游戲

    這篇文章主要介紹了java實現(xiàn)簡單猜數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • SpringBoot2整合ElasticJob框架過程詳解

    SpringBoot2整合ElasticJob框架過程詳解

    這篇文章主要介紹了SpringBoot2整合ElasticJob框架過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 關于Java中配置ElasticSearch集群環(huán)境賬號密碼的問題

    關于Java中配置ElasticSearch集群環(huán)境賬號密碼的問題

    這篇文章主要介紹了Java中配置ElasticSearch集群環(huán)境賬號密碼的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 詳解SpringIOC容器中bean的作用范圍和生命周期

    詳解SpringIOC容器中bean的作用范圍和生命周期

    這篇文章主要介紹了SpringIOC容器中bean的作用范圍和生命周期,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java線程阻塞工具LockSupport用法詳解

    Java線程阻塞工具LockSupport用法詳解

    Java中的LockSupport是一個用于線程同步的工具類,它提供了一種基于線程的阻塞和喚醒機制,LockSupport可以讓線程在特定條件下阻塞掛起,等待其他線程發(fā)送信號來喚醒它,本文將通過一個小案例給大家介紹一下LockSupport怎么用,讓你永遠記住它
    2023-08-08
  • springboot中的RestTemplate使用詳解

    springboot中的RestTemplate使用詳解

    這篇文章主要介紹了springboot中的RestTemplate使用詳解,RestTemplate繼承自InterceptingHttpAccessor并且實現(xiàn)了RestOperations接口,其中RestOperations接口定義了基本的RESTful操作,這些操作在RestTemplate中都得到了實現(xiàn),需要的朋友可以參考下
    2023-09-09

最新評論