JavaSE:内部类

1. 参数传递

1.1 类名作为形参和返回值

1 、类名作为方法的形参

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

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

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

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

抽象类作为形参和返回值

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

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

接口作为形参和返回值

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

2. 内部类

2.1 内部类的基本使用

内部类概念

  • 在一个类中定义一个类。举例:在一个类 A的内部定义一个类B,类B就被称为内部类

内部类定义格式

格式:
class 外部类名{
    修饰符 class 内部类名{    
       ...
    }    
}

class Outer {
    public class Inner {
       ...
    }
}

内部类的访问特点

  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象

2.2 成员内部类

成员内部类的定义位置

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

外界创建成员内部类对象格式

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

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

  • 将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
    示例代码:
class Outer {
    private int num = 10;
    private class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    public void method() {
        Inner i = new Inner();
        i.show();
    }
}
public class InnerDemo {
    public static void main(String[] args) {
		//Outer.Inner oi = new Outer().new Inner();        
		//oi.show();        
        Outer o = new Outer();
        o.method();
    }
}

2.3 局部内部类

局部内部类定义位置

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

局部内部类方式方式

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

2.4 匿名内部类

匿名内部类是局部内部类的一种特殊形式。

匿名内部类的前提

  • 存在一个类或者接口,这里的类可以是具体类也可以是抽象类

匿名内部类的格式

  • new 类名 ( ) { 重写方法 }
  • new 接口名 ( ) { 重写方法 }

举例:

new Inter(){
    @Override
    public void method(){}
}

匿名内部类的本质

  • 本质:是一个继承了该类或者实现了该接口的子类匿名对象

匿名内部类的细节

  • 匿名内部类可以通过多态的形式接受
Inter i = new Inter(){
  @Override
    public void method(){
       ...
    }
}

匿名内部类直接调用方法

interface Inter{
    void method();
}
class Test{
    public static void main(String[] args){
        new Inter(){
            @Override
            public void method(){
                System.out.println("我是匿名内部类");
            }
        }.method(); // 直接调用方法 
    }
}

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

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

  • 当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码
    在这里插入图片描述

3. 常用API

3.1 Math

  1. Math类概述

    Math 包含执行基本数字运算的方法

  2. Math中方法的调用方式

    Math 类中无构造方法,但内部的方法都是静态的,则可以通过 类名.方法 进行调用

  3. Math类的常用方法
    在这里插入图片描述

3.2 System

System 包含几个有用的类字段和方法,它不能被实例化

System 类的常用方法
currentTimeMillis方法一般用于计算一段代码执行了多少毫秒,放在代码的头和尾的地方。
在这里插入图片描述

3.3 Object类的toString方法

Object 类概述

  • Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份

查看方法源码的方式

  • 选中方法,按下 Ctrl + B

重写 toString方法的方式

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

toString 方法的作用:

  • 以良好的格式,更方便的展示对象中的属性值
    (当一个类没有重写toString方法,就会打印该类的一个地址值,也叫哈希值)

3.4 Object类的equals方法

equals 方法的作用

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

重写 equals方法的场景

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

重写 equals方法的方式

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

为什么要重写equals方法?

  1. " == " 的作用是判断两个对象的地址是不是相等。即判断两个对象是不是同一个对象。
    (基本数据类型比较的是值,引用数据类型比较的是内存地址)
  2. equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
    类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
    
    类覆盖了equals()方法。一般,我们都覆盖equals()方法,来比较两个对象的内容是否相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
    

3.5 冒泡排序原理

冒泡排序概述

  • 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序
  • 如果有 n个数据进行排序,总共需要比较n-1次
  • 每一次比较完毕,下一次的比较就会少一个数据参与

3.6 冒泡排序代码实现

https://blog.csdn.net/qq_44785877/article/details/113693278

3.7 Arrays

Arrays是一个工具类
在这里插入图片描述

  • Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法。
  • 使用时导包:import java.util.Arrays
  • 该类中的方法都是静态的,可以直接通过 “类.” 的方式直接调用方法。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值