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 修饰
JavaSE12-内部类&API的更多相关文章
- spark之JDBC开发(实战)
一.概述 Spark Core.Spark-SQL与Spark-Streaming都是相同的,编写好之后打成jar包使用spark-submit命令提交到集群运行应用$SPARK_HOME/bin#. ...
- Java基础第三天--内部类、常用API
形参和返回值 抽象类名作为形参和返回值 方法的形参是抽象类名,其实需要的是该抽象类的子类对象 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象 接口名作为形参和返回值 方法的形象是接口名,其实需 ...
- PHP反射API
近期忙着写项目,没有学习什么特别新的东西,所以好长时间没有更新博客.我们的项目用的是lumen,是基于laravel的一个轻量级框架,我看到里面用到了一些反射API机制来帮助动态加载需要的类.判断方法 ...
- Android多媒体--MediaCodec 中文API文档
*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...
- Java中的内部类(回调)
一.内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所 ...
- Unit05 - 抽象类、接口和内部类(上)
Unit05 - 抽象类.接口和内部类(上) 1.static final常量: 1)必须声明同时初始化 2)通过类名来访问,不能被改变 3)建议:常量名所有字母都大写(多个单词间用_) 4) ...
- PHP : Reflection API
PHP Reflection API是PHP5才有的新功能,它是用来导出或提取出关于类.方法.属性.参数等的详细信息,包括注释. PHP Reflection API有: class Reflecti ...
- [转载] 3. JebAPI 之 jeb.api.ast
本文转载自: https://www.zybuluo.com/oro-oro/note/143651 0. 序 Jeb 本身是支持变量重命名的,所以,混淆了的变量名.类名可以修改. 实际上,它还可以做 ...
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...
- Android开发-API指南-创建 Content Provider
Creating a Content Provider 英文原文:http://developer.android.com/guide/topics/providers/content-provide ...
随机推荐
- IntelliJ IDEA 2019.1.3 x64 简约基本配置
说明:本文针对IntelliJ IDEA 2019.1.3 x64版本,其他版本或许不能准确适用! 1.改变主体背景:Ctrl+Alt+S -> Editor -> Color Schem ...
- jQuery 第八章 实例方法 遍历索引
遍历索引相关方法: .each() .index() ------------------------------------------------- .each() 有点像数组的 forEach( ...
- 【Vue】1.前端项目初始化
1.前提 安装nodejs: https://nodejs.org/en/, 安装LTS稳定版本 安装Vscode: https://code.visualstudio.com/ 2.安装Vue脚手架 ...
- 5w 字 | 172 图 | 超级赛亚级 Spring Cloud 实战
一.PassJava 项目简介 PassJava-Learning 项目是 PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. PassJava 是一款 Java 面试刷题 的 ...
- python办公入门4:xlrd操作excel行
操作excel行 1 #通过索引获取操作行 2 sheet=data.sheet_by_index(0) 3 #获取当前sheet下的有效行数 4 print(sheet.nrows) 5 #获取某一 ...
- Jinja2语法自动补全配置
Jinja2语法自动补全配置 说明 在使用Pycharm社区版进行Web开发时,Jiaja2的语法是不会自动提示补全的,为了提高开发效率,需要根据个人习惯进行一些常用语法的自动补全配置,具体如下. 配 ...
- Codeforces Round #672 (Div. 2) B. Rock and Lever题解(思维+位运算)
题目链接 题目大意 给你一个长为n(n<=1e5)的数组,让你求有多少对a[i]和a[j] (i!=j)满足a[i]&a[j]>a[i]^a[j] 题目思路 这些有关位运算的题目肯 ...
- 分享:经常说你精通C语言,看看这十道题你会不会解!
今天给大家分享我们在日常工作中可能遇到的疑问,不看答案,你是否有把握都能答对?让我们来试试吧~ 一.会输出"hello-std-out"? 参考答案: stdout和stder ...
- 一道百度java面试题的多种解法
下面是我在2018年10月11日二面百度的时候的一个问题: java程序,主进程需要等待多个子进程结束之后再执行后续的代码,有哪些方案可以实现? 这个需求其实我们在工作中经常会用到,比如用户下单一个产 ...
- UnityEditorWindow做一个TimeLine的滑动块
UnityEditorWindow做一个TimeLine的滑动块 最近在做一个基于TimeLine的动画编辑器,在制作TineLine滑动条时遇到问题,网上查了好久,试了好多GUI组件都不满意.最后在 ...