1. 参数传递
1.1 类名作为形参和返回值
1. 类名作为方法的形参
- 方法的形参是类名,其实需要的是该类的对象
- 实际传递的是该对象的 地址值
2. 类名作为方法的返回值
- 方法的返回值是类名, 其实返回的是该类的对象
- 实际传递的, 也是该对象的 地址值
- 示例代码:
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复制- 方法的形参是抽象类名 , 其实需要的是该抽象类的子类对象
- 方法的返回值是抽象类名, 其实返回的是该抽象类的子类对象
- 示例代码:
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. 接口作为形参和返回值
- 方法的形参是接口名,其实需要的是该接口的实现类对象
- 方法的返回值是接口名,其实返回的是该接口的实现类对象
- 示例代码:
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. 内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
- 示例代码:
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. 成员内部类的推荐使用方案
- 将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
- 示例代码:
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. 匿名内部类的细节
- 匿名内部类可以通过多态的形式接受
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) | 按照数字顺序排列指定的数组 |