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
-
Math类概述
Math 包含执行基本数字运算的方法
-
Math中方法的调用方式
Math 类中无构造方法,但内部的方法都是静态的,则可以通过 类名.方法 进行调用
-
Math类的常用方法
3.2 System
System 包含几个有用的类字段和方法,它不能被实例化
System 类的常用方法
currentTimeMillis方法一般用于计算一段代码执行了多少毫秒,放在代码的头和尾的地方。
3.3 Object类的toString方法
Object 类概述
- Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份
查看方法源码的方式
- 选中方法,按下 Ctrl + B
重写 toString方法的方式
- Alt + Insert 选择toString
- 在类的空白区域,右键 -> Generate -> 选择toString
toString 方法的作用:
- 以良好的格式,更方便的展示对象中的属性值
(当一个类没有重写toString方法,就会打印该类的一个地址值,也叫哈希值)
3.4 Object类的equals方法
equals 方法的作用
- 用于对象之间的比较,返回 true和false的结果
- 举例: s1.equals(s2); s1和s2是两个对象
重写 equals方法的场景
- 不希望比较对象的地址值,想要结合对象属性进行比较的时候。
重写 equals方法的方式
- alt + insert 选择equals() and hashCode(),IntelliJDefault,一路next,finish即可
- 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。
为什么要重写equals方法?
- " == " 的作用是判断两个对象的地址是不是相等。即判断两个对象是不是同一个对象。
(基本数据类型比较的是值,引用数据类型比较的是内存地址) - equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。
类覆盖了equals()方法。一般,我们都覆盖equals()方法,来比较两个对象的内容是否相等;若它们的内容相等,则返回true(即,认为这两个对象相等)。
3.5 冒泡排序原理
冒泡排序概述
- 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序
- 如果有 n个数据进行排序,总共需要比较n-1次
- 每一次比较完毕,下一次的比较就会少一个数据参与
3.6 冒泡排序代码实现
3.7 Arrays
Arrays是一个工具类
- Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法。
- 使用时导包:import java.util.Arrays
- 该类中的方法都是静态的,可以直接通过 “类.” 的方式直接调用方法。