【内部类API】
1. 參數(shù)傳遞
1.1 類名作為形參和返回值
-
1、類名作為方法的形參
方法的形參是類名,其實(shí)需要的是該類的對象
實(shí)際傳遞的是該對象的【地址值】
-
2、類名作為方法的返回值
方法的返回值是類名,其實(shí)返回的是該類的對象
實(shí)際傳遞的,也是該對象的【地址值】
1.2 抽象類作為形參和返回值
-
抽象類作為形參和返回值
- 方法的形參是抽象類名,其實(shí)需要的是該抽象類的子類對象
- 方法的返回值是抽象類名,其實(shí)返回的是該抽象類的子類對象
-
示例代碼:
abstract class Animal {public abstract void eat(); } class Cat extends Animal {@Overridepublic 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) {//創(chuàng)建操作類對象,并調(diào)用方法AnimalOperator ao = new AnimalOperator();Animal a = new Cat();ao.useAnimal(a);Animal a2 = ao.getAnimal(); //new Cat()a2.eat();} }
1.3 接口名作為形參和返回值
-
接口作為形參和返回值
- 方法的形參是接口名,其實(shí)需要的是該接口的實(shí)現(xiàn)類對象
- 方法的返回值是接口名,其實(shí)返回的是該接口的實(shí)現(xiàn)類對象
-
示例代碼:
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 {@Overridepublic void jump() {System.out.println("貓可以跳高了");} } public class JumppingDemo {public static void main(String[] args) {//創(chuàng)建操作類對象,并調(diào)用方法JumppingOperator jo = new JumppingOperator();Jumpping j = new Cat();jo.useJumpping(j);Jumpping j2 = jo.getJumpping(); //new Cat()j2.jump();} }
2. 內(nèi)部類
2.1 內(nèi)部類的基本使用
-
內(nèi)部類概念
- 在一個(gè)類中定義一個(gè)類。舉例:在一個(gè)類A的內(nèi)部定義一個(gè)類B,類B就被稱為內(nèi)部類
-
內(nèi)部類定義格式
-
格式&舉例:
/*格式:class 外部類名{修飾符 class 內(nèi)部類名{}} */class Outer {public class Inner {} }
-
-
內(nèi)部類的訪問特點(diǎn)
- 內(nèi)部類可以直接訪問外部類的成員,包括私有
- 外部類要訪問內(nèi)部類的成員,必須創(chuàng)建對象
2.2 成員內(nèi)部類
-
成員內(nèi)部類的定義位置
- 在類中方法,跟成員變量是一個(gè)位置
-
外界創(chuàng)建成員內(nèi)部類格式
- 格式:外部類名.內(nèi)部類名 對象名 = 外部類對象.內(nèi)部類對象;
- 舉例:Outer.Inner oi = new Outer().new Inner();
-
成員內(nèi)部類的推薦使用方案
- 將一個(gè)類,設(shè)計(jì)為內(nèi)部類的目的,大多數(shù)都是不想讓外界去訪問,所以內(nèi)部類的定義應(yīng)該私有化,私有化之后,再提供一個(gè)可以讓外界調(diào)用的方法,方法內(nèi)部創(chuàng)建內(nèi)部類對象并調(diào)用。
-
示例代碼:
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 局部內(nèi)部類
-
局部內(nèi)部類定義位置
- 局部內(nèi)部類是在方法中定義的類
-
局部內(nèi)部類方式方式
- 局部內(nèi)部類,外界是無法直接使用,需要在方法內(nèi)部創(chuàng)建對象并使用
- 該類可以直接訪問外部類的成員,也可以訪問方法內(nèi)的局部變量
-
示例代碼
class Outer {private int num = 10;public void method() {int num2 = 20;class Inner {public void show() {System.out.println(num);System.out.println(num2);}}Inner i = new Inner();i.show();} } public class OuterDemo {public static void main(String[] args) {Outer o = new Outer();o.method();} }
2.4 匿名內(nèi)部類
-
匿名內(nèi)部類的前提
- 存在一個(gè)類或者接口,這里的類可以是具體類也可以是抽象類
-
匿名內(nèi)部類的格式
-
格式:new 類名 ( ) { 重寫方法 } new 接口名 ( ) { 重寫方法 }
-
舉例:
new Inter(){@Overridepublic void method(){} }
-
-
匿名內(nèi)部類的本質(zhì)
- 本質(zhì):是一個(gè)繼承了該類或者實(shí)現(xiàn)了該接口的子類匿名對象
-
匿名內(nèi)部類的細(xì)節(jié)
-
匿名內(nèi)部類可以通過多態(tài)的形式接受
Inter i = new Inter(){@Overridepublic void method(){} }
-
-
匿名內(nèi)部類直接調(diào)用方法
interface Inter{void method(); }class Test{public static void main(String[] args){new Inter(){@Overridepublic void method(){System.out.println("我是匿名內(nèi)部類");}}.method(); // 直接調(diào)用方法} }
2.4 匿名內(nèi)部類在開發(fā)中的使用
-
匿名內(nèi)部類在開發(fā)中的使用
- 當(dāng)發(fā)現(xiàn)某個(gè)方法需要,接口或抽象類的子類對象,我們就可以傳遞一個(gè)匿名內(nèi)部類過去,來簡化傳統(tǒng)的代碼
3. 常用API
3.1 Math
-
1、Math類概述
- Math 包含執(zhí)行基本數(shù)字運(yùn)算的方法
-
2、Math中方法的調(diào)用方式
- Math類中無構(gòu)造方法,但內(nèi)部的方法都是靜態(tài)的,則可以通過 類名.進(jìn)行調(diào)用
-
3、Math類的常用方法
方法名 方法名說明 public static int abs(int a) 返回參數(shù)的絕對值 public static double ceil(double a) 返回大于或等于參數(shù)的最小double值,等于一個(gè)整數(shù) public static double floor(double a) 返回小于或等于參數(shù)的最大double值,等于一個(gè)整數(shù) public static int round(float a) 按照四舍五入返回最接近參數(shù)的int public static int max(int a,int b) 返回兩個(gè)int值中的較大值 public static int min(int a,int b) 返回兩個(gè)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) | 終止當(dāng)前運(yùn)行的 Java 虛擬機(jī),非零表示異常終止 |
| public static long currentTimeMillis() | 返回當(dāng)前時(shí)間(以毫秒為單位) |
-
示例代碼
- 需求:在控制臺(tái)輸出1-10000,計(jì)算這段代碼執(zhí)行了多少毫秒
3.3 Object類的toString方法
-
Object類概述
- Object 是類層次結(jié)構(gòu)的根,每個(gè)類都可以將 Object 作為超類。所有類都直接或者間接的繼承自該類,換句話說,該類所具備的方法,所有類都會(huì)有一份
-
查看方法源碼的方式
- 選中方法,按下Ctrl + B
-
重寫toString方法的方式
- Alt + Insert 選擇toString
- 在類的空白區(qū)域,右鍵 -> Generate -> 選擇toString
toString方法的作用:
- 以良好的格式,更方便的展示對象中的屬性值
示例代碼:
class Student extends Object {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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';} } public class ObjectDemo {public static void main(String[] args) {Student s = new Student();s.setName("林青霞");s.setAge(30);System.out.println(s); System.out.println(s.toString()); } }運(yùn)行結(jié)果:
Student{name='林青霞', age=30} Student{name='林青霞', age=30}3.4 Object類的equals方法
-
equals方法的作用
- 用于對象之間的比較,返回true和false的結(jié)果
- 舉例:s1.equals(s2); s1和s2是兩個(gè)對象
-
重寫equals方法的場景
- 不希望比較對象的地址值,想要結(jié)合對象屬性進(jìn)行比較的時(shí)候。
-
重寫equals方法的方式
- alt + insert 選擇equals() and hashCode(),IntelliJ Default,一路next,finish即可
- 在類的空白區(qū)域,右鍵 -> Generate -> 選擇equals() and hashCode(),后面的同上。
示例代碼:
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;}@Overridepublic boolean equals(Object o) {//this -- s1//o -- s2if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o; //student -- s2if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;} } public class ObjectDemo {public static void main(String[] args) {Student s1 = new Student();s1.setName("林青霞");s1.setAge(30);Student s2 = new Student();s2.setName("林青霞");s2.setAge(30);//需求:比較兩個(gè)對象的內(nèi)容是否相同System.out.println(s1.equals(s2));} }3.5 冒泡排序原理
- 冒泡排序概述
- 一種排序的方式,對要進(jìn)行排序的數(shù)據(jù)中相鄰的數(shù)據(jù)進(jìn)行兩兩比較,將較大的數(shù)據(jù)放在后面,依次對所有的數(shù)據(jù)進(jìn)行操作,直至所有數(shù)據(jù)按要求完成排序
- 如果有n個(gè)數(shù)據(jù)進(jìn)行排序,總共需要比較n-1次
- 每一次比較完畢,下一次的比較就會(huì)少一個(gè)數(shù)據(jù)參與
3.6 冒泡排序代碼實(shí)現(xiàn)
- 代碼實(shí)現(xiàn)
3.7 Arrays
-
Arrays的常用方法
方法名說明 public static String toString(int[] a) 返回指定數(shù)組的內(nèi)容的字符串表示形式 public static void sort(int[] a) 按照數(shù)字順序排列指定的數(shù)組 -
工具類設(shè)計(jì)思想
1、構(gòu)造方法用 private 修飾
2、成員用 public static 修飾
總結(jié)
- 上一篇: Unity 基于法线和深度实现完美描边,
- 下一篇: 中国城市政治地位,政治地位决定一切!!!