Java 内部类 && 常用API

2023-05-07 17:00:56 浏览数 (1)

1. 参数传递

1.1 类名作为形参和返回值

1. 类名作为方法的形参
  • 方法的形参是类名,其实需要的是该类的对象
  • 实际传递的是该对象的 地址值
2. 类名作为方法的返回值
  • 方法的返回值是类名, 其实返回的是该类的对象
  • 实际传递的, 也是该对象的 地址值
  • 示例代码:
代码语言:javascript复制
class Cat {
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

class CatOperator {
    public void useCat(Cat cat) {
        cat.eat();
    }
    public Cat getCat() {
        Cat cat = new Cat();
        return cat;
    }
}

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

        //创建操作类对象,并调用方法
        CatOperator co = new CatOperator();
        Cat cat = new Cat();
        co.useCat(cat);
        Cat cat1 = co.getCat();
        cat1.eat();
    }
}

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

1. 抽象类作为形参和返回值
代码语言:javascript复制
-  方法的形参是抽象类名 , 其实需要的是该抽象类的子类对象
-  方法的返回值是抽象类名, 其实返回的是该抽象类的子类对象
  • 示例代码:
代码语言:javascript复制
 abstract class Animal {
    public abstract void eat();
}

class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

class AnimalOperator {
    public void useAnimal(Animal animal) {
        animal.eat();
    }
    public Animal getAnimal() {
        Animal animal = new Cat();
        return animal;
    }
}

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

        //创建操作类对象,并调用方法
        AnimalOperator ao = new AnimalOperator();
        Animal animal = new Cat();
        ao.useAnimal(animal);
        Animal animal1 = ao.getAnimal();
        animal1.eat();
    }
}

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

1. 接口作为形参和返回值
  • 方法的形参是接口名,其实需要的是该接口的实现类对象
  • 方法的返回值是接口名,其实返回的是该接口的实现类对象
  • 示例代码:
代码语言:javascript复制
 interface Eat {
    void eat();
}

class EatOperator {
    public void startEat(Eat eat) {
        eat.eat();
    }

    public Eat getEat(){
        Eat eat = new Cat();
        return eat;
    }
}

class Cat implements Eat{
    @Override
    public void eat() {
        System.out.println("猫开始干饭了");
    }
}

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

        //创建操作类对象,并调用方法
        EatOperator eatOperator = new EatOperator();
        Eat eat = new Cat();
        eatOperator.startEat(eat);

        Eat eat1 = eatOperator.getEat();
        eat1.eat();
    }
}

2. 内部类

2.1 内部类的基本使用

1. 内部类概念
  • 在一个类中定义另一个类。
  • 举例:在一个类A的内部定义一个类B,类B就被称为
2. 内部类内部类定义格式

格式:

代码语言:javascript复制
class 外部类名{
    修饰符 class 内部类名{
    }
}

举例:

代码语言:javascript复制
 class Outer {
    public class Inner {
    }
}
3. 内部类的访问特点
  • 内部类可以直接访问外部类的成员,包括私有
  • 外部类要访问内部类的成员,必须创建对象
  • 示例代码:
代码语言:javascript复制
public class Outer {
    private int num = 10;
    public class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    public void method() {
        Inner i = new Inner();
        i.show();
    }
}

2.2 成员内部类

1. 成员内部类的定义位置
  • 在类中方法,跟成员变量是一个位置
2. 外界创建成员内部类格式
  • 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
  • 举例Outer.Inner oi = new Outer().new Inner();
3. 成员内部类的推荐使用方案
  • 将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
  • 示例代码:
代码语言:javascript复制
class Outer {
    private int num = 10;
    private class Inner {
        public void show() {
            System.out.println(num);
        }
    }
    public void method() {
        Inner inner = new Inner();
        inner.show();
    }
}
public class Demo {
    public static void main(String[] args) {

        //Ineer 被 private 修饰
        //Outer.Inner oi = new Outer().new Inner();
        //oi.show();

        Outer outer = new Outer();
        outer.method();
    }
}

2.4 匿名内部类

1. 匿名内部类的前提
  • 存在一个类或者接口,这里的类可以是具体类也可以是抽象类
2. 匿名内部类的格式

格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }

举例:

代码语言:javascript复制
new Inter(){
    @Override
    public void method(){}
}
3. 匿名内部类的本质

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

4. 匿名内部类的细节
  • 匿名内部类可以通过多态的形式接受
代码语言:javascript复制
Inter i = new Inter(){
    @Override
    public void method(){
    }
}
5. 匿名内部类直接调用方法
代码语言:javascript复制
 interface Inter{
    void method();
}

class Demo{
    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类的常用方法

方法名

说明

public static int abs(int a)

返回参数的绝对值

public static double ceil(double a)

返回大于或等于参数的最小double值,等于一个整数

public static double floor(double a)

返回小于或等于参数的最大double值,等于一个整数

public static int round(float a)

按照四舍五入返回最接近参数的int

public static int max(int a,int b)

返回两个int值中的较大值

public static int min(int a,int b)

返回两个int值中的较小值

public static double pow (double a,doubleb)

返回a的b次幂的值

public static double random()

返回值为double的正值,[0.0,1.0)

3.2 System

1. System类的常用方法

方法名

说明

public static void exit(int status)

终止当前运行的 Java 虚拟机,非零表示异常终止

public static long currentTimeMillis()

返回当前时间(以毫秒为单位

3.3 Object类的toString方法

1. Object类概述
  • Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类, 换句话说,该类所具备的方法,所有类都会有一份
2. toString方法的作用:
  • 以良好的格式,更方便的展示对象中的属性值

3.4 Object类的equals方法

1. equals方法的作用
  • 用于对象之间的比较,返回true和false的结果
  • 举例:s1.equals(s2); s1和s2是两个对象
2. 重写equals方法的场景
  • 不希望比较对象的地址值,想要结合对象属性进行比较的时候。

3.5 Arrays

1. Arrays的常用方法

方法名

说明

public static String toString(int[] a)

返回指定数组的内容的字符串表示形式

public static void sort(int[] a)

按照数字顺序排列指定的数组

0 人点赞