JavaSE12-内部类&API
1. 参数传递
1.1 类名作为形参和返回值
1、类名作为方法的形参
方法的形参是类名,其实需要的是该类的对象
实际传递的是该对象的【地址值】
2、类名作为方法的返回值
方法的返回值是类名,其实返回的是该类的对象
实际传递的,也是该对象的【地址值】
1 class Cat { 2 public void eat() { 3 System.out.println("猫吃鱼"); 4 } 5 } 6 class CatOperator { 7 public void useCat(Cat c) { //Cat c = new Cat(); 8 c.eat(); 9 } 10 public Cat getCat() { 11 Cat c = new Cat(); 12 return c; 13 } 14 } 15 public class CatDemo { 16 public static void main(String[] args) { 17 //创建操作类对象,并调用方法 18 CatOperator co = new CatOperator(); 19 Cat c = new Cat(); 20 co.useCat(c); 21 Cat c2 = co.getCat(); //new Cat() 22 c2.eat(); 23 } 24 }
1.2 抽象类作为形参和返回值
抽象类作为形参和返回值
方法的形参是抽象类名,其实需要的是该抽象类的子类对象
方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
1 abstract class Animal { 2 public abstract void eat(); 3 } 4 class Cat extends Animal { 5 @Override 6 public void eat() { 7 System.out.println("猫吃鱼"); 8 } 9 } 10 class AnimalOperator { 11 public void useAnimal(Animal a) { //Animal a = new Cat(); 12 a.eat(); 13 } 14 public Animal getAnimal() { 15 Animal a = new Cat(); 16 return a; 17 } 18 } 19 public class AnimalDemo { 20 public static void main(String[] args) { 21 //创建操作类对象,并调用方法 22 AnimalOperator ao = new AnimalOperator(); 23 Animal a = new Cat(); 24 ao.useAnimal(a); 25 Animal a2 = ao.getAnimal(); //new Cat() 26 a2.eat(); 27 } 28 }
1.3 接口名作为形参和返回值
接口作为形参和返回值
方法的形参是接口名,其实需要的是该接口的实现类对象
方法的返回值是接口名,其实返回的是该接口的实现类对象
1 interface Jumpping { 2 void jump(); 3 } 4 class JumppingOperator { 5 public void useJumpping(Jumpping j) { //Jumpping j = new Cat(); 6 j.jump(); 7 } 8 public Jumpping getJumpping() { 9 Jumpping j = new Cat(); 10 return j; 11 } 12 } 13 class Cat implements Jumpping { 14 @Override 15 public void jump() { 16 System.out.println("猫可以跳高了"); 17 } 18 } 19 public class JumppingDemo { 20 public static void main(String[] args) { 21 //创建操作类对象,并调用方法 22 JumppingOperator jo = new JumppingOperator(); 23 Jumpping j = new Cat(); 24 jo.useJumpping(j); 25 Jumpping j2 = jo.getJumpping(); //new Cat() 26 j2.jump(); 27 } 28 }
2. 内部类
2.1 内部类的基本使用
内部类概念
在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
内部类定义格式
1 class 外部类名{ 2 修饰符 class 内部类名{ 3 } 4 }
内部类的访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
2.2 成员内部类
成员内部类的定义位置
在类中方法,跟成员变量是一个位置
外界创建成员内部类格式
1 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
成员内部类的推荐使用方案
将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。
2.3 局部内部类
局部内部类定义位置
局部内部类是在方法中定义的类
局部内部类方式方式
局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量
1 class Outer { 2 private int num = 10; 3 public void method() { 4 int num2 = 20; 5 class Inner { 6 public void show() { 7 System.out.println(num); 8 System.out.println(num2); 9 } 10 } 11 Inner i = new Inner(); 12 i.show(); 13 } 14 } 15 public class OuterDemo { 16 public static void main(String[] args) { 17 Outer o = new Outer(); 18 o.method(); 19 } 20 }
2.4 匿名内部类
匿名内部类的前提
存在一个类或者接口,这里的类可以是具体类也可以是抽象类
匿名内部类的格式
1 new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
匿名内部类的本质
本质:是一个继承了该类或者实现了该接口的子类匿名对象
匿名内部类的细节
匿名内部类可以通过多态的形式接受
1 Inter i = new Inter(){ 2 @Override 3 public void method(){ 4 } 5 }
匿名内部类直接调用方法
1 interface Inter{ 2 void method(); 3 } 4 class Test{ 5 public static void main(String[] args){ 6 new Inter(){ 7 @Override 8 public void method(){ 9 System.out.println("我是匿名内部类"); 10 } 11 }.method(); // 直接调用方法 12 } 13 }
2.4 匿名内部类在开发中的使用
匿名内部类在开发中的使用
当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码
1 interface jump{ 2 public abstract void jump(); 3 } 4 5 class cat implements jump{ 6 @Override 7 public void jump(){ 8 System.out.println("猫跳高"); 9 } 10 } 11 12 class dog implements jump{ 13 @Override 14 public void jump(){ 15 System.out.println("狗跳高"); 16 } 17 } 18 19 class jo{ 20 public void method(jump j){ 21 j.jump(); 22 } 23 } 24 25 public class JumpingDemo { 26 public static void main(String[] args) { 27 jo j = new jo(); 28 jump c = new cat(); 29 j.method(c); 30 System.out.println("------"); 31 jump d = new dog(); 32 j.method(d); 33 System.out.println("------"); 34 j.method(new jump() { 35 @Override 36 public void jump() { 37 System.out.println("鱼跳高"); 38 } 39 }); 40 } 41 }
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,double b) | 返回a的b次幂的值 |
| public static double random() | 返回值为double的正值,[0.0,1.0) |
3.2 System
System类的常用方法
| 方法名 | 说明 |
| public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |
| public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) |
3.3 Object类的toString方法
Object类概述
Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类, 换句话说,该类所具备的方法,所有类都会有一份
toString方法的作用
以良好的格式,更方便的展示对象中的属性值
3.4 Object类的equals方法
equals方法的作用
用于对象之间的比较,返回true和false的结果
重写equals方法的场景
不希望比较对象的地址值,想要结合对象属性进行比较的时候。
3.5 Arrays
Arrays的常用方法
| 方法名 | 说明 |
| public static String toString(int[] a) | 返回指定数组的内容的字符串表示形式 |
| public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
工具类设计思想
1、构造方法用 private 修饰
2、成员用 public static 修饰

浙公网安备 33010602011771号