Java12-day03【​​​​​​​(类名、抽象类名、接口名)作为形参和返回值、内部类、常用API(Math、System、toString()、Arrays)、冒泡】

目   录

01_类名作为形参和返回值

1.1、类名作为形参和返回值

02_抽象类名作为形参和返回值

1.2、抽象类名作为形参和返回值

03_接口名作为形参和返回值

1.3、接口名作为形参和返回值

04_内部类

1.1、内部类概述

05_成员内部类

1.2、成员内部类

06_局部内部类

1.3、局部内部类

07_匿名内部类

1.4、匿名内部类

08_匿名内部类在开发中的使用

1.5、匿名内部类在开发中的使用

09_Math

1.1、Math类概述

1.2、Math类的常用方法

10_System

2.1、System概述

2.2、System类的常用方法

11_Object类的toString()方法

3.1、Object类的概述

12_Object类的equals()方法

3.2、Object类的常用方法

13_冒泡排序原理

4.1、冒泡排序

14_冒泡排序代码实现

15_Arrays

4.2、Arrays类的概述和常用方法


01_类名作为形参和返回值

1.1、类名作为形参和返回值

1、类名作为方法的形参

  • 方法的形参是类名,其实需要的是该类的对象。
  • 实际传递的是该对象的【地址值】

2、类名作为方法的返回值

  • 方法的返回值是类名,其实返回的是该类的对象。
  • 实际传递的,也是该对象的【地址值】

02_抽象类名作为形参和返回值

1.2、抽象类名作为形参和返回值

  • 方法的形参是抽象类名,其实需要的是该抽象类的子类对象。
  • 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象。

03_接口名作为形参和返回值

1.3、接口名作为形参和返回值

  • 方法的形参是接口名,其实需要的是该接口的实现类对象。
  • 方法的返回值是接口名,其实返回的是该接口的实现类对象。

04_内部类

1.1、内部类概述

05_成员内部类

1.2、成员内部类

按照内部类 在类中定义的位置不同,可以分为如下两种形式:

  • 在类的成员位置:成员内部类
  • 在类的局部位置:局部内部类

成员内部类的定义位置

  • 在类中方法,跟成员变量是一个位置。

成员内部类,外界如何创建对象使用呢?(外界创建成员内部类格式)

  • 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
  • 举例:Outer.Inner oi = new Outer().new Inner();

成员内部类的推荐使用方案

  • 将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。

使用 成员内部类,就是为了 成员内部类中的内容隐藏起来,并不想让外界直接看到(不能直接访问)。

∴ 内部类的修饰符,一般用private,而不是public。【“ Outer.Inner oi = new Outer().new Inner(); ” 失效!!!】

06_局部内部类

1.3、局部内部类

局部内部类 定义位置

  • 局部内部类是在方法中定义的类。

局部内部类 调用方式

  • 局部内部类是在方法中定义的类,外界无法直接使用,需要在方法内部创建对象并使用。
  • 该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

07_匿名内部类

1.4、匿名内部类

重写方法:继承类或实现接口。

new xxx:说明是一个对象,但是对象没有名字。

匿名内部类,本质是一个对象,继承类或实现接口。

多次调用匿名内部类的方法:

匿名内部类是一个对象,对象有返回值类型。此匿名内部类实现了Inter接口,并重写了接口的show()方法,因此 匿名内部类{}整体可以看成Inter的一个实现类对象,既然是实现类对象,所以应该可以按照多态的形式 赋值给Inter接口。

08_匿名内部类在开发中的使用

1.5、匿名内部类在开发中的使用

多种动物,每次都要创建一个类,太麻烦了,∴ 采用 匿名内部类。

匿名内部类在开发中的使用:当发现某个方法需要 接口或抽象类的子类对象,可以传递一个匿名内部类过去,来简化传统的代码。

09_Math

1.1、Math类概述

Math在java.lang包下,不用导包就可以直接使用。

Math没有构造方法,但方法用static修饰,可以直接通过类名调用方法。

1.2、Math类的常用方法

10_System

2.1、System概述

System包含几个有用的类字段和方法,它不能被实例化(不能创建对象)。

2.2、System类的常用方法

11_Object类的toString()方法

3.1、Object类的概述

Object类概述

  • Object是类层次结构的根,每个类都可以将Object 作为超类。没有继承任何类,Object是任何类的祖宗类。
  • 所有对象(包括数组)都实现了这个类的方法。

  • 所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份。

Object构造方法

  • public Object()

查看方法源码的方式

  1. 双击选中方法,右键 -> Go To -> Declaration
  2. 双击选中方法,按下Ctrl + B

重写toString方法的方式

  1. Alt + Insert 选择toString
  2. 在类的空白区域,右键 -> Generate -> 选择toString

toString方法的作用:

  • 以良好的格式,更方便的展示对象中的属性值。

回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法(  super();  )?

  • 因为它们的顶级父类(Object)只有无参构造方法。

查看方法源码的方式

  1. 双击选中方法,右键 -> Go To -> Declaration
  2. 双击选中方法,按下Ctrl + B

建议所有子类覆盖(重写)此方法:toString()

怎么重写呢?自动生成即可。

重写toString方法的方式

  1. Alt + Insert 选择toString
  2. 在类的空白区域,右键 -> Generate -> 选择toString

12_Object类的equals()方法

3.2、Object类的常用方法

equals方法的作用

  • 用于对象之间的比较,返回true和false的结果。
  • 举例:s1.equals(s2); // s1和s2是两个对象

重写equals方法的场景

  • 不希望比较对象的地址值,想要结合对象属性进行比较的时候。

重写equals方法的方式

  1. Alt + Insert 选择 equals() and hashCode(),IntelliJ Default,一路next,finish即可
  2. 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。

重写equals()方法

按“Alt+Insert”:

13_冒泡排序原理

4.1、冒泡排序

排序:将一组数据按照固定的规则进行排序。

冒泡排序概述

一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,

依次对所有的数据进行操作,直至所有数据按要求完成排序。

如果有n个数据进行排序,总共需要比较n-1次。

每一次比较完毕,下一次的比较就会少一个数据参与。

14_冒泡排序代码实现

package com.itheima_01;

/*
    冒泡排序:
        一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,
        依次对所有的数据进行操作,直至所有数据按要求完成排序
 */
public class ArrayDemo {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = {24, 69, 80, 57, 13};
        System.out.println("排序前:" + arrayToString(arr));

        //第一次比较
        for(int i=0; i<arr.length-1-0; i++) {
            //ArrayIndexOutOfBoundsException
            if(arr[i] > arr[i+1]) {
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        System.out.println("第一次比较后:" + arrayToString(arr));

        //第二次比较
        for(int i=0; i<arr.length-1-1; i++) {
            //ArrayIndexOutOfBoundsException
            if(arr[i] > arr[i+1]) {
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        System.out.println("第二次比较后:" + arrayToString(arr));

        //第三次比较
        for(int i=0; i<arr.length-1-2; i++) {
            //ArrayIndexOutOfBoundsException
            if(arr[i] > arr[i+1]) {
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        System.out.println("第三次比较后:" + arrayToString(arr));

        //第四次比较
        for(int i=0; i<arr.length-1-3; i++) {
            //ArrayIndexOutOfBoundsException
            if(arr[i] > arr[i+1]) {
                int temp = arr[i];
                arr[i] = arr[i+1];
                arr[i+1] = temp;
            }
        }
        System.out.println("第四次比较后:" + arrayToString(arr));

        for(int x=0; x<arr.length-1; x++) {
            for(int i=0; i<arr.length-1-x; i++) {
                if(arr[i] > arr[i+1]) {
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
        System.out.println("排序后:" + arrayToString(arr));

    }

    //把数组中的元素按照指定的规则组成一个字符串:[元素1, 元素2, ...]
    public static String arrayToString(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");
        String s = sb.toString();
        return s;
    }
}

15_Arrays

4.2、Arrays类的概述和常用方法

private修饰的无参构造:外界无法通过构造方法创建对象。强制要求:通过类名来访问成员方法。

private Arrays {} :如果一个类没有无参构造方法,系统将会自动提供一个无参构造方法。Arrays的方法,用static修饰,强制要求用类名访问。

在帮助文档中,没有看到构造方法,不代表这个类没有构造方法,因为系统会给构造方法。--> 看源码(构造方法)

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

upward337

谢谢老板~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值