java学习笔记(第7天:形参和返回值)

2023-10-26

目录

一、形参和返回值都是基本类型

二、类名作为形参和返回值

三、抽象类作为形参和返回值

四、接口作为形参和返回值


一、形参和返回值都是基本类型

这里比较简单,放一个不确定参数数量的例子玩玩:

package Demo;

public class Sum {
    public static void main(String[] args) {
        int s =sum(1,2,3,4);
        System.out.println(s);
    }
    public static int sum(int...nums){
        int ans=0; //局部变量必须手动初始化
        for(int i=0;i<nums.length;i++){
            ans+=nums[i];
        }
        return ans;
    }
}

对于可变参数的传递,其实传递的是一个数组。

二、类名作为形参和返回值

形参是类名时,参数要传递类的对象,返回值是类名时,返回的是该类的对象。

这里直接把类当做一个数据类型就可以,其实没什么区别。看一个小栗子:

  1. 创建一个学生类

    package Demo;
    /*    成员变量
            使用private修饰
    
        构造方法
            提供一个无参构造方法
            提供一个带多个参数的构造方法
    
        成员方法
            提供每一个成员变量对应的set方法和get方法
            提供一个显示对象信息的show方法
    */
    
    public class Student {
        //成员变量
        private String name;
        private int age;
    
        //构造方法
        public Student() {
        }  //无参数构造方法
    
        public Student(String name, int age) {
            this.age = age;
            this.name = name;
        }
    
        //提供age的get和set方法
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if (age < 0) {
                System.out.println("你输入的年龄有误");
            } else {
                this.age = age;
            }
        }
    
        //提供name的get和set方法
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        //提供一个显示成员信息的show方法
        public void show() {
            System.out.println("name:" + name + ", age:" + age);
        }
    }
  2. 创建一个测试类,该测试类中包含一个学生初始化方法,它的形参是学生类,再定义一个创建学生对象的方法,它的返回值是学生类。

    package Demo;
    
    public class StudentDemo {
        public static void main(String[] args) {
            //创建一个学生对象
            Student s1 = new Student();
    
            //调用学生初始化方法
            studentInitialize(s1);
    
            //调用学生创建方法
            Student s2 = studentNew();
    
            //调用Student对象的show()方法
            s1.show(); //name:张楚岚, age:20
            s2.show(); //name:宝儿姐, age:18
        }
        public static void studentInitialize(Student s){
            s.setAge(20);
            s.setName("张楚岚");
        }
    
        public static Student studentNew(){
            Student s = new Student();
            s.setAge(18);
            s.setName("宝儿姐");
            return s;
        }
    }
    

三、抽象类作为形参和返回值

形参是抽象类时,参数要传递该类的子类(具体类)的对象,返回值是抽象类时,返回的是该类的子类(具体类)的对象。

这里其实就是因为抽象类不能直接实例化,只能参照抽象类多态的形式实例化其子类(具体类)。再来一个小栗子:

  1. 定义一个抽象人类:
    package Demo;
    
    public  abstract class People {
        private int age;
        private String name;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public People() {
        }
    
        public People(int age, String name) {
            this.age = age;
            this.name = name;
        }
    }
    
  2. 定义一个学生类,继承自人类,包含一个show()方法:
    package Demo;
    
    public class Student extends People{
        public Student() {
        }
    
        public Student(int age, String name) {
            super(age, name);
        }
    
        //提供一个显示成员信息的show方法
        public void show() {
            System.out.println("name:" + super.getName() + ", age:" + super.getAge());
        }
    }
  3. 创建一个测试类,该测试类中包含一个人类初始化方法,它的形参是人类,再定义一个创建人类对象的方法,它的返回值是人类:
    package Demo;
    
    public class StudentDemo {
        public static void main(String[] args) {
            //创建一个学生对象
            People p1 = new Student();
    
            //调用学生初始化方法
            peopleInitialize(p1);
    
            //调用学生创建方法
            People p2 = peopleNew();
    
            //向下转型,然后调用Student对象的show()方法
            Student s1 =(Student)p1;
            s1.show(); //name:张楚岚, age:20
            Student s2 = (Student)p2;
            s2.show(); //name:宝儿姐, age:18
        }
        public static void peopleInitialize(People p){
            p.setAge(20);
            p.setName("张楚岚");
        }
    
        public static People peopleNew(){
            People P = new Student();
            P.setAge(18);
            P.setName("宝儿姐");
            return P;
        }
    }
    

    四、接口作为形参和返回值

形参是接口时,参数要传递该接口的实现类(具体类)的对象,返回值是接口时,返回的是该接口的实现类(具体类)的对象。

这里其实就是因为接口不能直接实例化,只能参照接口多态的形式实例化其实现类(具体类)。欢迎大家在来一个小栗子。

五、不确定数量的类名作为形参

这里直接改写了上面的例子中peopleInitialize()方法,并且一次初始化了三个对象。

package Demo;

public class StudentDemo {
    public static void main(String[] args) {
        //创建一个学生对象
        People p1 = new Student();
        People p3 = new Student();
        People p4 = new Student();

        //调用学生初始化方法
        peopleInitialize(p1,p3,p4);

        //调用学生创建方法
        People p2 = peopleNew();

        //向下转型,然后调用Student对象的show()方法
        Student s1 =(Student)p1;
        s1.show(); //name:张楚岚, age:20
        Student s2 = (Student)p2;
        s2.show(); //name:宝儿姐, age:18
        Student s3 = (Student)p3;
        s2.show(); //name:宝儿姐, age:18
        Student s4 = (Student)p4;
        s2.show(); //name:宝儿姐, age:18
    }
    public static void peopleInitialize(People...p){
        for(int i = 0;i<p.length;i++){
            People pp=p[i];
            pp.setAge(20);
            pp.setName("张楚岚");
        }
    }

    public static People peopleNew(){
        People P = new Student();
        P.setAge(18);
        P.setName("宝儿姐");
        return P;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java学习笔记(第7天:形参和返回值) 的相关文章

  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何在一行中将字符串数组转换为双精度数组

    我有一个字符串数组 String guaranteedOutput Arrays copyOf values values length String class 所有字符串值都是数字 数据应转换为Double QuestionJava 中
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的

随机推荐

  • Scene窗口—Scene视图导航

    Scene 视图导航 Scene 视图具有一组可用于快速有效移动的导航控件 场景视图辅助图标 场景视图辅助图标 Scene Gizmo 位于 Scene 视图的右上角 此控件用于显示 Scene 视图摄像机的当前方向 并允许快速修改视角和投
  • 部署CNI网络插件 The connection to the server raw.githubusercontent.com was refused - did you specify the r

    访问不了 解决方案 1 找到域名对应的ip地址 域名ip查询链接链接 http ip tool chinaz com 2 etc hosts中添加主机ip映射信息 3 重新获取 kubectl apply f https raw githu
  • Android 13.0 Launcher3定制之双层改单层(去掉抽屉式三)

    1 概述 在13 0的系统产品开发中 对于在Launcher3中的抽屉模式中 系统默认的就是抽屉单层模式 但是在很多产品中需要默认为 单层模式 就是要求去掉双层抽屉模式 接下来看下如何继续实现去掉抽屉双层模式 来变成单层模式第三节 2 La
  • Centos彻底删除文件夹、文件命令

    centos彻底删除文件夹 文件命令 centos彻底删除文件夹 文件命令 centos 新建 删除 移动 复制等命令 1 新建文件夹 mkdir 文件名 新建一个名为test的文件夹在home下 view source1 mkdir ho
  • 谷歌身份验证器二维码

    otpauth totp ACCOUNT secret SECRET issuer NAME ACCOUNT账户名称 SECRET密钥 NAME发布者 公司 网站的名称 e g otpauth totp yimcarson secret V
  • 接口测试时遇到接口加密了该如何处理?

    对明文编码生成信息摘要 以防止被篡改 比如MD5使用的是Hash算法 无论多长的输入 MD5都会输出长度为128bits的一个串 摘要算法不要秘钥 客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文 对称加密 对称加密算法是共
  • 冒泡排序算法的Java实现及优化

    冒泡排序是一种简单但效率较低的排序算法 它通过多次交换相邻元素的位置来实现排序 本篇博客将介绍如何使用Java编程语言实现冒泡排序算法 并对其进行优化 首先 让我们来了解一下冒泡排序的基本原理 冒泡排序的思想是从数组的起始位置开始 比较相邻
  • Java 8 Stream 流用法及语法

    Java 8 Stream 流用法 1 简介 Stream流 最全的用法 Stream 能用来干什么 用来处理集合 通过 使用Stream API 对集合数据进行操作 就类似于使用 SQL 执行的数据库查询 Stream API 提供了一种
  • 统计学——卡方检验和卡方分布

    什么是卡方检验 卡方检验是一种用途很广的计数资料的假设检验方法 它属于非参数检验的范畴 主要是比较两个及两个以上样本率 构成比 以及两个分类变量的关联性分析 其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题 它在分类资料统计
  • 目标检测标注原则

    算力和数据是影响深度学习应用效果的两个关键因素 在算力满足条件的情况下 为了到达更好的效果 我们需要将海量 高质量的素材数据喂给神经网络 训练出高精度的网络模型 吴恩达在深度学习公开课中提到 在算力满足要求的前提下 模型效果会随着素材数量的
  • vue事件绑定、事件参数、事件修饰符、表单双向绑定、监听器、计算属性

    目录 事件绑定 事件参数 事件修饰符 表单 watch 监听器 监听属性 computed 计算属性 面试题 事件机制 概述 在dom阶段 我们已经讲述了事件机制的特点 事件三要素 事件绑定 事件流 事件对象 事件代理 事件类型 这些概念在
  • ISAKMP - 安全关联协商

    前面说过 ISAKMP主要有三个过程 SA协商 密钥交换和认证 本篇主要讨论SA协商 首先要明白一个问题 为什么需要协商 为什么协议不规定使用某种特定的算法 这样实现上可以变得简单很多 要回答这个问题 我们必须全面的审视网络通信的环境 所有
  • Redis中常用命令:基本+五种基本类型(string、list、hash、set、zset)+三种特殊类型(geospatial、hyperloglog、bitmap)

    redis的命令有很多 命令不区分大小写 如下是一些常用的命令 可以通过官网 命令来学习使用更多的命令 例如 1 基本命令 选择数据库select 编号 redis默认的数据库有16个 编号从0 15 默认使用0号数据库 在配置文件中可查看
  • Elasticsearch(三)使用 Kibana 操作 ES

    文章目录 下载 Kibana 镜像 启动 Kibana 容器 索引 分片和副本 索引 索引分片 索引副本 创建索引 映射 数据结构 字段的数据类型 创建映射 查看映射 添加文档 删除文档 删除索引 下载 Kibana 镜像 docker p
  • Deep Java Library(DJL)上手指南

    Deep Java Library DJL https djl ai 是一个Java语言编写的深度学习库 平台 支持各种已有的模型直接导入 受益于Java的跨平台和高性能 相对Python DJL可以很容易部署和高效率运行 尤其是推理 首先
  • uc3842改可调电源教程_《学习笔记》--DC/DC电源电路设计实例

    1 设计概述 利用LTC3704实现3 3V 1 5V的转换 最大输出电流1A LTC3704是一款支持正向电源电压转换为负向电源电压的DC DC电源芯片 支持的输入端电源电压范围是2 5V 36V 输出端电源电压可调 2 引脚介绍 VIN
  • 若依前端后端框架 分离切换用户问题解决!学不会得找我!!!

    笔者最近遇到一个问题 就是有主账号一个字段 有多个从账号 基于这个目的用户表登录名是从账号得登录名 而有一个字段为主账号 识别是这个人 若依前后端 看了官网 都是用userName去鉴权 然后生成token和JWT数据 所有userName
  • todolist 案例 JavaScript

    css样式 body margin 0 padding 0 font size 16px background CDCDCD header height 50px background 333 background rgba 47 47 4
  • VUE 巧用$attrs和inheritAttrs提高组件的可扩展性

    VUE 巧用 attrs和inheritAttrs提高组件的可扩展性 前言 在平时创建组件时 一般使用的是利用props传值 然后通过传入的值再赋给标签的方式 来控制组件里的 这种方法在使用时的可扩展性不大 很难通过外部来动态的往组件内部添
  • java学习笔记(第7天:形参和返回值)

    目录 一 形参和返回值都是基本类型 二 类名作为形参和返回值 三 抽象类作为形参和返回值 四 接口作为形参和返回值 一 形参和返回值都是基本类型 这里比较简单 放一个不确定参数数量的例子玩玩 package Demo public clas