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 ...
随机推荐
- python的pip快速安装代码
pip install xx,经常由于网速,或者安装版本问题导致安装速度慢超时等问题, 现提供一个py镜像安装代码,安装库文件前执行下这个程序,可以很快下载 cmd 进入命令提示符 python .p ...
- dpkg 批量卸载
dpkg -l |grep deepin|awk '{print $2}'|xargs sudo dpkg -P
- 建议收藏!2020阿里面试题(JVM+Spring Cloud+微服务)上
前言 对于大厂面试,我想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来.另外提醒一点,充分复习,是消除你 ...
- 如何修改IDM下载器的临时文件夹位置
所有的应用程序在下载时,都会有一些默认的选项.比如产生的临时文件存放在C盘目录下,或者定期自动更新等设置.那么当我们的计算机上安装了很多程序之后,C盘的空间就会渐渐地变小了,从而有了空间不足等等情况, ...
- 网络系列之 cookie增删改查(封装)
什么是cookie 呢?简单来说,这个小东西,会记录你的 浏览器 浏览习惯,或 账号密码等, 以便于提高用户的体验感. 举个例子: 你们有没有发现,去淘宝一些购物网站, 你搜索了 椅子, 挑选了一会椅 ...
- ceph 集群快速部署
1.三台Centos7的主机 [root@ceph-1 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) 2.主机 ...
- Java数据结构(七)—— 排序算法
排序算法(Sort Algorithm) 排序算法介绍和分类 将一组数据,依指定顺序进行排列 排序的分类 内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序 外部排序 数据量过大,无法全部加 ...
- Kafka源码环境搭建
github地址:https://github.com/apache/kafka clone下来之后可以看到这样的项目结构: 文件目录说明. 目录 描述 bin Windows 和 Linux 下 K ...
- 痞子衡嵌入式:一个奇怪的Keil MDK下变量链接强制对齐报错问题(--legacyalign)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是一个奇怪的Keil MDK下变量链接强制对齐报错问题. 痞子衡最近一直在参与恩智浦SBL项目(就是一个适用LPC和i.MXRT的完整OT ...
- 2014_07_11_VGA基础及封装
-- VR1201 Color Filter LCOS Microdisplays QVGA (320*240 Pixel) Color Filter LCOS Microdisplays -- VR ...