Java 基础学习
第十一章 内部类&API
相信坚持不懈,相信每日进步一点点,相信你也可以!!!加油。
文章目录
前言
毕业到工作,没有系统的对知识进行过整理与记录,许多知识认识自己,自己却感到陌生了,学而不思则罔,所以还是决定对知识进行一个系统化的整理。
提示:以下是本篇文章正文内容
一、 参数传递
1.类名作为形参和返回值
- 类名作为方法的形参
a. 方法的形参是类名,其实需要的是该类的对象
b. 实际传递的是该对象的【地址值】 - 类名作为方法的返回值
a. 方法的返回值是类名,其实返回的是该类的对象
b. 实际传递的,也是该对象的【地址值】 - 示例代码:
class Cat { public void eat() { System.out.println("猫吃鱼"); } } class CatOperator { public void useCat(Cat c) { //Cat c = new Cat(); c.eat(); } public Cat getCat() { Cat c = new Cat(); return c; } } public class CatDemo { public static void main(String[] args) { //创建操作类对象,并调用方法 CatOperator co = new CatOperator(); Cat c = new Cat(); co.useCat(c); Cat c2 = co.getCat(); //new Cat() c2.eat(); } }
2. 抽象类作为形参和返回值
- 抽象类作为形参和返回值
a. 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
b. 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象 - 代码示例
abstract class Animal { public abstract void eat(); } public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); } } class AnimalOperator { public void useAnimal(Animal a) { //Animal a = new Cat(); a.eat(); } public Animal getAnimal() { Animal a = new Cat(); return a; } } public class AnimalDemo { public static void main(String[] args) { //创建操作类对象,并调用方法 AnimalOperator ao = new AnimalOperator(); Animal a = new Cat(); ao.useAnimal(a); Animal a2 = ao.getAnimal(); //new Cat() a2.eat(); } }
3. 接口名作为形参和返回值
-
接口作为形参和返回值
a. 方法的形参是接口名,其实需要的是该接口的实现类对象
b. 方法的返回值是接口名,其实返回的是该接口的实现类对象 -
代码示例
interface Jumpping { void jump(); } class JumppingOperator { public void useJumpping(Jumpping j) { //Jumpping j = new Cat(); j .jump (); } public Jumpping getJumpping() { Jumpping j = new Cat(); return j; } } class Cat implements Jumpping { ©Override public void jump() { System, out .printin (”猫可以跳高T "); } } public class JumppingDemo { public static void main(String[] args) { //创建操作类对象,并调用方法 JumppingOperator j o = new JumppingOperator(); Jumpping j = new Cat (); j o.useJumpping(j); Jumpping j 2 = j o.getJumpping(); //new Cat() j2 . jump (); } }
二、内部类
1. 内部类的基本使用
- 内部类概念
在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类 - 内部类定义格式
/* 格式: class 外部类名{ 修饰符 class 内部类名{ } } */ class Outer { public class Inner { } }
- 内部类的访问特点
a. 内部类可以直接访问外部类的成员,包括私有
b. 外部类要访问内部类的成员,必须创建对象 - 示例代码:
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. 成员内部类
- 成员内部类的定义位置
在类中方法,跟成员变量是一个位置 - 外界创建成员内部类格式
a. 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
b. 举例:Outer.Inner oi = new Outer().new Inner(); - 成员内部类的推荐使用方案
将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
3. 局部内部类
- 局部内部类定义位置
局部内部类是在方法中定义的类 - 局部内部类方式方式
a. 局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
b. 该类可以直接访问外部类的成员,也可以访问方法内的局部变量
4. 匿名内部类
- 匿名内部类的前提
a. 存在一个类或者接口,这里的类可以是具体类也可以是抽象类 - 匿名内部类的格式
格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
举例: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(); // 直接调用方法 } }
- 匿名内部类在开发中的使用
a. 当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的 代码
b. 代码示例:interface Jumpping { void jump(); } class Cat implements Jumpping { @Override public void jump() { System.out.println("猫可以跳高了"); } } class Dog implements Jumpping { @Override public void jump() { System.out.println("狗可以跳高了"); } } class JumppingOperator { public void method(Jumpping j) { //new Cat(); new Dog(); j.jump(); } } class JumppingDemo { public static void main(String[] args) { //需求:创建接口操作类的对象,调用method方法 JumppingOperator jo = new JumppingOperator(); Jumpping j = new Cat(); jo.method(j); Jumpping j2 = new Dog(); jo.method(j2); System.out.println(""); // 匿名内部类的简化 jo.method( new Jumpping() { @Override public void jump() { System.out.println("猫可以跳高了"); } }); // 匿名内部类的简化 jo.method(new Jumpping() { @Override public void jump() { System.out.println("狗可以跳高了"); } }); } }
三、 常用API
1. Math
- Math类概述
Math 包含执行基本数字运算的方法 - Math中方法的调用方式
Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用 - 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,double b) | 返回a的b次幂的值 |
public static double random() | 返回值为double的正值,[0.0,1.0) |
2. System
- System类的常用方法
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |
public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
- 类实现接口用implements表示
public class 类名 implements 接口名 {}
- 接口不能实例化
参照多态的方式,通过实现类对象实例化,这叫接口多态。
多态的形式:具体类多态,抽象类多态,接口多态。
3. Object类的toString方法
- Object类概述
Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类, 换句话说,该类所具备的方法,所有类都会有一份 - toString方法的作用:
以良好的格式,更方便的展示对象中的属性值
4. Object类的equals方法
- equals方法的作用
a. 用于对象之间的比较,返回true和false的结果
b. 举例:s1.equals(s2); s1和s2是两个对象 - 重写equals方法的场景
不希望比较对象的地址值,想要结合对象属性进行比较的时候。 - 示例代码
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;//student s2
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
}
添加wx: 15338507382,备注 “java基础”
免费领取Java开发全套学习手册
![]()