Java基础day12

  • Java基础部分day12-内部类&常用API
  • 1. 参数传递
    • 1.1 类名作为形参和返回值
    • 1.2 抽象类作为形参和返回值
    • 1.3 接口名作为形参和返回值
  • 2. 内部类
    • 2.1 内部类的基本使用
    • 2.2 成员内部类
    • 2.3 局部内部类
    • 2.4 匿名内部类
    • 2.4 匿名内部类在开发中的使用
  • 3. 常用API
    • 3.1 Math
    • 3.2 System
    • 3.3 Object类的toString方法
    • 3.4 Object类的equals方法
    • 3.5 冒泡排序原理
    • 3.6 冒泡排序代码实现
    • 3.7 Arrays

Java基础部分day12-内部类&常用API

1. 参数传递

1.1 类名作为形参和返回值

  • 1、类名作为方法的形参
    方法的形参是类名,其实需要的是该类的对象
    实际传递的是该对象的【地址值】
  • 2、类名作为方法的返回值
    方法的返回值是类名,其实返回的是该类的对象
    实际传递的,也是该对象的【地址值】

示例代码:

public class Cat {public void eat(){System.out.println("猫吃鱼");}
}
public class CatOpeterator {public void useCat(Cat c){  //Cat c = new Cat;c.eat();}public Cat getCat(){Cat c = new Cat();return c;}
}
public class demo {public static void main(String[] args) {CatOpeterator co = new CatOpeterator();Cat c = new Cat();co.useCat(c);Cat c2 = co.getCat();c2.eat();}
}

1.2 抽象类作为形参和返回值

  • 抽象类作为形参和返回值
    方法的形参是抽象类名,其实需要的是该抽象类的子类对象
    方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
  • 示例代码:
public abstract class Animal {public abstract void eat();
}public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼");}
}public class AnimalOperator {public void useAnimal(Animal a){ //Animal a = new Cat();a.eat();}public Animal getAnimal(){Animal a = new Cat();return a;}
}public class demo {public static void main(String[] args) {AnimalOperator ao = new AnimalOperator();Animal a = new Cat();ao.useAnimal(a);Animal a2 = ao.getAnimal();a2.eat();}
}

1.3 接口名作为形参和返回值

  • 接口作为形参和返回值
    方法的形参是接口名,其实需要的是该接口的实现类对象
    方法的返回值是接口名,其实返回的是该接口的实现类对象
  • 示例代码:
public interface Jumping {void jump();
}public class Cat implements Jumping{@Overridepublic void jump() {System.out.println("猫跳高");}
}public class JumpingOperator {public void useJumping(Jumping j){ //Jumping j = new Cat();j.jump();}public Jumping getJumping(){Jumping j = new Cat();return j;}
}public class Jumpingdemo {public static void main(String[] args) {JumpingOperator jo = new JumpingOperator();Jumping j = new Cat();jo.useJumping(j);Jumping j2 = jo.getJumping(); //new Cat();j2.jump();}
}

2. 内部类

2.1 内部类的基本使用

  • 内部类概念
    在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
  • 内部类定义格式
    格式&举例:
/*class 外部类名{class 内部类名{}
}*/
public class Outer {public class Inner {}
}
  • 内部类的访问特点
    内部类可以直接访问外部类的成员,包括私有
    外部类要访问内部类的成员,必须创建对象

  • 示例代码:

/*
内部类的访问特点内部类可以直接访问外部类的成员,包括私有外部类要访问内部类的成员,必须创建对象
*/
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 成员内部类

  • 成员内部类的定义位置
    在类中方法,跟成员变量是一个位置

  • 外界创建成员内部类格式
    格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
    举例:Outer.Inner oi = new Outer().new Inner();

  • 成员内部类的推荐使用方案
    将一个类,设计为内部类的目的,大多数都是不想让外界去访问,所以内部类的定义应该私有化,私有化之后,再提供一个可以让外界调用的方法,方法内部创建内部类对象并调用。

  • 示例代码

public 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 demo {public static void main(String[] args) {Outer o = new Outer();o.method();}
}

2.3 局部内部类

  • 局部内部类定义位置
    局部内部类是在方法中定义的类
  • 局部内部类方式方式
    局部内部类,外界是无法直接使用,需要在方法内部创建对象并使用
    该类可以直接访问外部类的成员,也可以访问方法内的局部变量
  • 示例代码
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 demo {public static void main(String[] args) {Outer o = new Outer();o.method();}
}

2.4 匿名内部类

  • 匿名内部类的前提
    存在一个类或者接口,这里的类可以是具体类也可以是抽象类
  • 匿名内部类的格式
    格式:new 类名 ( ) { 重写方法 } new 接口名 ( ) { 重写方法 }
    举例:
new Inter (){@Overridepublic void method(){}}
  • 匿名内部类的本质
    本质:是一个继承了该类或者实现了该接口的子类匿名对象
  • 匿名内部类的细节
    匿名内部类可以通过多态的形式接受
    Inter i = new Inter (){@Overridepublic void method(){}}

匿名内部类直接调用方法

public interface Inter {void method();
}public class demo {public static void main(String[] args) {new Inter(){@Overridepublic void method() {System.out.println("我是匿名内部类");}}.method();//直接调用方法}
}

2.4 匿名内部类在开发中的使用

  • 匿名内部类在开发中的使用
    当发现某个方法需要,接口或抽象类的子类对象,我们就可以传递一个匿名内部类过去,来简化传统的代码
  • 示例代码:
public interface Jumping {void jump();
}public class Cat implements Jumping {@Overridepublic void jump() {System.out.println("猫跳高");}
}public class Dog implements Jumping {@Overridepublic void jump() {System.out.println("狗跳高");}
}public class JumpingOpertor {public void method(Jumping j){j.jump();}
}public class demo {public static void main(String[] args) {JumpingOpertor jo = new JumpingOpertor();Jumping j = new Cat();jo.method(j);Jumping j2 = new Dog();jo.method(j2);System.out.println("-------");//匿名内部类的简化jo.method(new Jumping() {@Overridepublic void jump() {System.out.println("猫可以调高了");}});}
}

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()          返回当前时间(以毫秒为单位)
  • 示例代码
    需求:在控制台输出1-10000,计算这段代码执行了多少毫秒

3.3 Object类的toString方法

  • Object类概述
    Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类, 换句话说,该类所具备的方法,所有类都会有一份
  • 查看方法源码的方式
    选中方法,按下Ctrl + B
  • 重写toString方法的方式
    1. Alt + Insert 选择toString
    2. 在类的空白区域,右键 -> Generate -> 选择toString
  • toString方法的作用:
    以良好的格式,更方便的展示对象中的属性值
    示例代码:
public 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 demo {public static void main(String[] args) {Student s = new Student();s.setName("林青霞");s.setAge(30);System.out.println(s);System.out.println(s.toString());}
}

3.4 Object类的equals方法

  • equals方法的作用
    用于对象之间的比较,返回true和false的结果
    举例:s1.equals(s2); s1和s2是两个对象
  • 重写equals方法的场景
    不希望比较对象的地址值,想要结合对象属性进行比较的时候。
  • 重写equals方法的方式
    1. alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
    2. 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。
  • 示例代码:
public 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) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;if (age != student.age) return false;return name != null ? name.equals(student.name) : student.name == null;}
}
//测试类
public class demo {public static void main(String[] args) {Student s1 = new Student("林青霞",30);Student s2 = new Student("林青霞",30);System.out.println(s1.equals(s2));}
}

3.5 冒泡排序原理

  • 冒泡排序概述
    一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所 有的数据进行操作,直至所有数据按要求完成排序
  • 如果有n个数据进行排序,总共需要比较n-1次
  • 每一次比较完毕,下一次的比较就会少一个数据参与

3.6 冒泡排序代码实现

  • 代码实现
public class Arraydemo {public static void main(String[] args) {int[] arr = {24, 69, 80, 57, 13};System.out.println("排序前:" + arrarytoString(arr));for (int x = 0; x < arr.length - 1; x++) {for (int i = 0; i < arr.length - 1 - x; i++) {if (arr[i] > arr[i + 1]) {int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}}System.out.println("排序后:" + arrarytoString(arr));}public static String arrarytoString(int[] arr) {StringBuilder s = new StringBuilder();s.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {s.append(arr[i]);} else {s.append(arr[i]).append(", ");}}s.append("]");String s1 = s.toString();return s1;}
}

3.7 Arrays

Arrays的常用方法public static String toString(int[] a)        返回指定数组的内容的字符串表示形式 public static void sort(int[] a)          按照数字顺序排列指定的数组
工具类设计思想 1、构造方法用 private 修饰 2、成员用 public static 修饰

Java基础day12相关推荐

  1. 小汤学编程之JAVA基础day12——异常

    一.什么是异常 1.程序错误类型     2.异常的分类     3.深入认识异常 二.异常的继承结构 三.常见的异常收集 四.虚拟机对异常的两种处理方式 1.捕获异常     2.声明和抛出异常 五 ...

  2. Java基础 DAY12

    章节练习题 练习题01 public class Homework01 {public static void main(String[] args){A01 a01 =new A01();doubl ...

  3. Java基础入门语法和安装

    1. Java概述 1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java语言是美国Sun公司(Stanford Un ...

  4. Java笔记整理-02.Java基础语法

    1,标识符 由英文字母.数字._(下划线)和$组成,长度不限.其中英文字母包含大写字母(A-Z)和小写字母(a-z),数字包含0到9. 标识符的第一个字符不能是数字(即标识符不能以数字开头). 标识符 ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. Java基础概念性的知识总结

    属于个人的所学的知识总结,不是全面的 1.JDK.JRE和JVM三者的区别 01.JDK:(Java Development ToolKit)Java开发工具包,是整个Java的核心.包括了Java的 ...

  7. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...

  8. 叮!您收到一份超值Java基础入门资料!

    摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例带领大家J ...

  9. java重要基础知识点_必看 | 新人必看的Java基础知识点大梳理

    原标题:必看 | 新人必看的Java基础知识点大梳理 各位正在认真苦学Java的准大神,在这烈日炎炎的夏季里,老九君准备给大家带来一个超级大的"冰镇西瓜,"给大家清凉一下,压压惊. ...

最新文章

  1. 机器人售卖雪糕机_智能售货机售货机,冰淇淋厂
  2. 关于PostgreSQL的GiST索引之四
  3. spark restful_Spark入门:也可以用Java创建轻量级的RESTful应用程序
  4. mysql抖动可能的原因_MySQL应对网络抖动问题
  5. 数据结构-线性表之用队列实现栈用栈实现队列
  6. 学习使用资源文件[6] - 菜单资源
  7. 电脑显示没有被指定在上运行_可以桌面显示的便条便签怎么弄?有没有电脑桌面上的便条贴...
  8. Microsoft.Web.RedisSessionStateProvider 运行异常问题
  9. C#正则表达式——网游角色起名仅允许汉字、字母、数字、底划线
  10. 基于Visua C++2010 与 Windows 7 SDK开发windows7 Shell应用(1)-搜索文件夹
  11. android脚本精灵miui,脚本精灵安卓apk下载
  12. 2021微信网页跳转APP
  13. 一个40岁的男人如果穷得一无所有该怎么办?
  14. 法国计算机高等工程师学院排名,法国人工智能专业大学排名(2020年USNEWS)_快飞留学...
  15. 入驻csdn的自我介绍
  16. 电脑蓝屏造成的数据丢失如何恢复
  17. Java高并发之魂:synchronized深度解析
  18. iPhone 手机修复屏幕划痕
  19. 跟锦数学2017年02月
  20. 编程马拉松(英语:hackathon,又译为黑客松)

热门文章

  1. java标识符遵循规范
  2. 算法笔记_001:斐波那契数的多种解法(Java)
  3. 01背包及其变种(物品无限背包、恰好装满背包)
  4. U盘无法拷贝超过4G的大文件
  5. asp.net 生成、解析条形码和二维码
  6. 关于选择博客网站的一点看法
  7. JAVA连接MYSQL数据库
  8. LeetCode35.搜索插入位置
  9. SDUT 1265-马停下过河卒(DFS)
  10. Linux kernel分析前的准备