Java编程练习之this关键字(2)

this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。

示例:创建一个类文件,在类中定义Book类型的方法,并通过this关键字进行返回。

public class Book{

    public Book getBook(){

          return this;

}

}

在getBook()方法中,方法的返回值为Book类,所以方法体中使用return this这种形式将Book类的对象进行返回。

通过上述可以得知this关键字可以调用类的成员变量和成员方法,此外,它还可以调用类中的构造方法。

示例:使用this关键字实现给饼只加一个蛋

顾客买鸡蛋灌饼要求加几个鸡蛋,烙饼大妈就给加几个鸡蛋,不要求的时候就只加一个鸡蛋。创建鸡蛋灌饼类,创建有参数和无参数构造方法,无参数构造方法调用有参数构造方法并实现初始化。

package zhtestdemo;

public class demo {  //创建鸡蛋灌饼类,类名叫demo;
/**/
    int eggCount;  //属性:鸡蛋灌饼里鸡蛋的个数;
    
    public  demo(int eggCount) {   //有参构造方法demo;
        this.eggCount=eggCount;           //将参数eggCount的值赋给成员变量eggCount;
        System.out.println("这个鸡蛋灌饼里有"+eggCount+"个鸡蛋。");
    }
    //无参数构造方法,默认给饼加一个蛋;
    public demo() {
        //调用参数为鸡蛋灌饼里蛋的个数的构造方法,并设置鸡蛋灌饼里蛋的个数为1;
        this(1);
    }
    public static void main(String[] args) {
        demo cake1=new demo();  //创建无参的鸡蛋灌饼对象
        demo cake2=new demo(5); //创建鸡蛋灌饼对象,且鸡蛋灌饼里有5个蛋
    }
    
}

练习1:设计电池类,在电池类的构造方法中声明一节5号电池的电压为1.5伏,使用this关键字调用电池类中的构造方法,实现电压为9伏的叠层电池,运行结果如下图。

package zhtestdemo;

public class demo {  //创建电池类,类名叫demo;
/**/
    int num;  //属性:5号电池的个数;
    
    public  demo(int num) {   //有参构造方法demo;
        this.num=num;           //将参数num的值赋给成员变量num;
        if (num==1) {
        System.out.println(num+"节5号电池的电压为1.5V。");
        }else {
            System.out.println("叠层电池可由"+num+"节5号电池串联而成,其电压为9.0V。");
        }
    }
    //无参数构造方法,默认1节5号电池;
    public demo() {
        //调用参数为电池个数的构造方法,并设置电池数量为1;
        this(1);
    }
    public static void main(String[] args) {
        demo battery1=new demo();  //创建无参的1节5号电池对象;
        demo battery2=new demo(6); //创建6节5号电池对象;
    }
    
}
 

练习2:创建信用卡类,有两个成员变量分别是卡号和密码,如果用户开户时没有设置初始密码,则使用"123456"作为默认密码。设计两个不同的构造方法,分别用于用户设置密码和用户未设置密码两种构造场景。

package zhtestdemo;

public class demo {  //创建信用卡类,类名叫demo;
/**/
    String card;  //属性:信用卡号;
    String password;  //属性:信用卡密码;
    
    public  demo(String password) {   //有参构造方法demo,;
        this.password= password;    //将参数password的值赋给成员变量password;
        System.out.println("您正在开户未设置初始密码,请输入默认密码:"+password);
    }
    //有参数构造方法,用于重置密码的用户确认密码;
    public demo(String card,String password) {
        this.card=card;
        this.password=password;
        System.out.println("恭喜您开户成功!"+'\n'+"请您确认账号:"+card+'\n'+"请您确认密码:"+password);
    }
    public static void main(String[] args) {
        demo card1=new demo("123456");  //创建未设置初始密码的信用卡对象;
        demo card2=new demo("8888888","324567"); //创建已设置密码的信用卡对象;
    }
    
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/336938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

list列表可编辑状态

有时候list需要修改或选择属性,mfc自带的只能显示内容,基本上是不可以修改,为了实现这个功能需求,需要完成一下步骤转换. 第一步记录选择的单元格. 第二步创建一个编辑框CComboBox对象, 设置字体,窗口属性. 第三步获取选中单元格的位置信息. 第四步获取单元格内容信息. 第五步…

图论:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)详细版

终于是学完了,这个最短路我学了好几天,当然也学了别的算法啦,也是非常的累啊。 话不多说下面看看最短路问题吧。 最短路问题是有向图,要求的是图中一个点到起点的距离,其中我们要输入点和点之间的距离,来求…

【EFCore仓储模式】介绍一个EFCore的Repository实现

阅读本文你的收获 了解仓储模式及泛型仓储的优点学会封装泛型仓储的一般设计思路学习在ASP.NET Core WebAPI项目中使用EntityFrameworkCore.Data.Repository 本文中的案例是微软EntityFrameworkCore的一个仓储模式实现,这个仓储库不是我自己写的,而是使…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…

章鱼网络 Community Call #17|打造全新 Omnity 跨链协议

香港时间2024年1月8日12点,章鱼网络举行第17期 Community Call。 对于 Octopus Community 而言,2023年是一个分水岭。我们如期兑现我们的承诺,成功上线了包括 $NEAR Restaking 和 Adaptive IBC 在内的完整的 Octopus 2.0。 自从我们在2023年…

HarmonyOS 应用开发入门

HarmonyOS 应用开发入门 前言 DevEco Studio Release版本为:DevEco Studio 3.1.1。 Compile SDK Release版本为:3.1.0(API 9)。 构建方式为 HVigor,而非 Gradle。 最新版本已不再支持 (”Java、JavaScrip…

Leetcode的AC指南 —— 栈与队列:225.用队列实现栈

摘要: **Leetcode的AC指南 —— 栈与队列:225.用队列实现栈 **。题目介绍:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 …

web渗透安全学习笔记:2、HTML基础知识

目录 前言 HTML的标题 段落链接与插入图片 HTML元素 HTML属性 HTML头部 HTML与CSS HTML与JavaScript 表格与列表 HTML区块 布局 HTML表单 HTML与数据库 音频与视频 HTML事件 前言 HTML的标题 <!DOCTYPE html> <html> <head> <meta chars…

Spring+SprinMVC+MyBatis注解方式简易模板

SpringSprinMVCMyBatis注解方式简易模板代码Demo GitHub访问 ssm-tpl-anno 一、数据准备 创建数据库test&#xff0c;执行下方SQL创建表ssm-tpl-cfg /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Version :…

HCIP-BGP实验3

实验步骤 配置IP地址 R1 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/0]int loopback0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int loopback1 [r1-LoopBack1]ip add 192.168.2.1 24 [r1-LoopBack1]int loopback3 [r1-…

OCS2 入门教程(六)- Double Integrator

系列文章目录 前言 双积分器示例是我们最简单的问题。它模拟了一个沿 x 方向移动的一维点质量。模型是线性的&#xff0c;成本函数是二次函数。目标点通过参考管理器模块设置为二次成本。 一、查看文件结构 1.1 ocs2_double_integrator 文件夹 . ├── auto_generated ├─…

LSTM时间序列预测

本文借鉴了数学建模清风老师的课件与思路&#xff0c;可以点击查看链接查看清风老师视频讲解&#xff1a;【1】演示&#xff1a;基于LSTM深度学习网络预测时间序列&#xff08;MATLAB工具箱&#xff09;_哔哩哔哩_bilibili % Forecast of time series based on LSTM deep learn…

Pyro —— Velocity Voxel Scale

Velocity Voxel Scale是H19.5引入的新参数&#xff0c;该参数可单独定义volume和速度体素&#xff1b;根据参数设置&#xff0c;可观察到模拟时间的显著变化&#xff1b; Velocity Voxel Scale对DOP和SOP均可用&#xff1b;对DOP设置&#xff0c;该参数在Smoke Object&#xf…

Java安全 CC链1分析

Java安全之CC链1分析 什么是CC链环境搭建jdk下载idea配置创建项目 前置知识Transformer接口ConstantTransformer类invokerTransformer类ChainedTransformer类 构造CC链1CC链1核心demo1demo1分析 寻找如何触发CC链1核心TransformedMap类AbstractInputCheckedMapDecorator类readO…

RT-Thread 瑞萨 智能家居网络开发:RA6M3 HMI Board 以太网+GUI技术实践

不用放大了&#xff0c; 我在包里找到张不小的…… 以太网HMI线下培训-环境准备 这是社群的文档&#xff1a;【腾讯文档】以太网线下培训&#xff08;HMI-Board&#xff09; https://docs.qq.com/doc/DY0FIWFVuTEpORlNn 先介绍周六的培训是啥&#xff0c;然后再介绍一下要准…

赛车游戏简单单车C语言版

#include<stdio.h> #include<easyx.h> #include<time.h>#define WIDTH 512 #define HEIGHT 768//定义一个汽车类 struct FCar {//坐标float x, y;// 汽车种类int type;//汽车速度float speed; };//定义全局变量 图片坐标 IMAGE BG_IMG; //背景图片坐标 float…

[小程序]使用代码渲染页面

一、条件渲染 1.单个控制 使用wx:if"{{条件}}"来判断是否需要渲染这段代码&#xff0c;同时可以结合wx:elif和wx:else来判断 <view wx:if"{{type0}}">0</view> <view wx:elif"{{type1}}">1</view> <view wx:else>…

linux网络协议栈2--网络包接收发送流程

上文我们讲了报文格式&#xff0c;应该对数据传输格式有了一定了解&#xff0c;这篇文章主要讲述的是网络包接收和发送的流程&#xff0c;主要是大方面来介绍。 网络包接收流程 当网络数据帧通过网络传输到达网卡时&#xff0c;网卡会将网络数据帧通过DMA的方式放到环形缓冲区…

nginx日志分割

日志切割是线上常见的操作&#xff0c;能够控制单个日志文件的大小&#xff0c;便于对日志进行管理 给nginx主进程发送一个重新打开的信号&#xff0c;让nginx重新生成新的日志文件 nginx -s reopen 这个命令等同于kill -USR1 cat nginx.pid 切割日志文件shell命令 #!/bin/bas…

Flink处理函数(3)—— 窗口处理函数

窗口处理函数包括&#xff1a;ProcessWindowFunction 和 ProcessAllWindowFunction 基础用法 stream.keyBy( t -> t.f0 ).window( TumblingEventTimeWindows.of(Time.seconds(10)) ).process(new MyProcessWindowFunction()) 这里的MyProcessWindowFunction就是ProcessWi…