【JavaSE成神之路】Java面向对象(下)

news2024/11/15 19:51:21

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容还是Java的面向对象。

1. 构造方法

构造方法和new关键字是一对好拍档。

在之前GirlFriend的例子中,我们写了两个构造方法,一个是带参的,一个是无参的。

//类的构造方法
public GirlFriend(String name,String hair,boolean glasses,String skirt,String color){
    this.name = name;
    this.hair = hair;
    this.glasses = glasses;
    this.skirt = skirt;
    this.color = color;
}

public GirlFriend() {

}

Java 构造方法是在创建 Java 类的实例时被调用的方法,它会为实例分配内存并初始化实例变量。

构造方法有两个特点:

1、构造方法的名称必须和类名相同,可以有参数,也可以没有参数;

2、构造方法没有返回值类型,不能使用return关键字。

记住这两点即可!

接下来看看构造方法的作用:

1、为实例变量赋初始值:

class Student{
    private String name;
    private int age;
    public Student(){
        this.name = "张三";
        this.age = 18;
    }
}

这段代码中的构造方法实现了给实例变量name和age赋初始值,即当创建新的Student实例时,name和age的值分别为“张三”和18。

2、可以通过构造方法实现重载:

class Student{
    private String name;
    private int age;
    public Student(){
        this.name = "张三";
        this.age = 18;
    }
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
}

这段代码中的构造方法实现了重载,即通过传入不同的参数,可以创建不同的Student实例,name和age的值可以根据传入的参数而定。没错,构造方法也是可以重载的。

3、可以调用其他构造方法:

class Student{
    private String name;
    private int age;
    public Student(){
        this.name = "张三";
        this.age = 18;
    }
    public Student(String name,int age){
        this(name);
        this.age = age;
    }
    public Student(String name){
        this.name = name;
    }
}

这段代码中的构造方法实现了调用其他构造方法,即通过调用其他构造方法,可以创建不同的Student实例,name和age的值可以根据调用的构造方法而定。

4、可以通过构造方法实现父类构造方法的调用:

class Person{
    public Person(){
        System.out.println("Person的构造方法");
    }
}
class Student extends Person{
    private String name;
    private int age;
    public Student(){
        super();
        this.name = "张三";
        this.age = 18;
    }
}

这段代码中的构造方法实现了父类构造方法的调用,即在创建Student实例之前,会先调用其父类的构造方法,即Person的构造方法。继承相关的知识我们会在后面讲到。

因此,构造方法是java编程中非常重要的组成部分,它可以实现对象的初始化,并且可以实现类的重载,支持多种构造方法,满足不同的需求。

还有一点就是上一节遇到的,如果你写了有参构造,就要显示定义无参构造方法。这是因为当程序运行时,会调用类中的构造函数,如果有参构造函数被定义,但是没有定义无参构造函数,那么程序就无法正常运行,因为它不知道如何去调用构造函数,从而导致程序运行出错。

所以程序强制要求你显示定义无参构造方法。

咱们再缕一缕:

-Java写个带参的构造方法,那默认的无参的就必须再显示写一个,但这是为什么呢?

-很简单

-jvm会在语义分析过程中来为没有构造函数的类搭建构造函数。

-如果有构造函数的话就不会自己默认搭建构造函数。

-如果设置了无论是否有构造函数都写构造函数

-那就有一个问题,如果已经有一个无参构造函数了,再构造一个,到时候调用哪个呢?

也就是说当一个类你没有给他构造函数,则编译器会自动补上一个无参的,若有的话就不会,你需要显示将此无参的构造函数写出来。这是编译器帮你做的,防止你忘了写无参构造函数,没什么好纠结的,记住就行了。

2.this关键字

this是java中的一个关键字,它代表当前对象的引用,它可以在构造方法、普通方法中使用。尤其在构造方法中可以指定某个属性,可以避免类的属性构造方法参数重名的尴尬。

例如:

public class Person { 
  private String name; 
  private int age;

  public Person(){
    this.name="张三"; //使用this关键字来引用name变量
    this.age=18; //使用this关键字来引用age变量 
  }
}

this关键字还有一个作用,就是在构造方法中调用另一个构造方法。注意,你不能在普通方法里面调用构造方法。只能在构造方法中用this去调用另一个构造方法。

public class Person {
    private String name;
    private int age;

    public Person(){
        this.name="张三"; //使用this关键字来引用name变量
        this.age=18; //使用this关键字来引用age变量 
    }
    
    //重载1
    public Person(String name){
        this.name = name;
    }
    
    //重载2
    public Person(String name,int age){
        this(name); //根据参数的类型和格式,会自动地去匹配对应地重载构造方法
        this.age = age;
    }
}

为了方便测试,我们用idea生成一下toString方法:

@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

测试:

public class TestPerson {

    public static void main(String[] args) {
        Person p = new Person("jack",18);
        System.out.println(p);
    }
}

结果:

Person{name='jack', age=18}

this还可以用来在普通方法中调用属性和其他普通方法。

3.课后作业

又到课后练习啦,这一节比较重要,大家不要偷懒,一定要把习题做一做哦!

创建一个汽车类Car,拥有品牌brand和颜色color两个属性。分别用带参构造器和无参构造器来实例化Car类,并编写toString方法。再写一个测试类,在测试类的main方法中进行测试。

顺便附上上一节的答案,题目是:

设计一个宠物类Pet,构造方法用于接收宠物的名字、类型及性别,实例化宠物后,可以用实例化的宠物对象来访问宠物的名字、类型及性别,并实现宠物的叫声功能,要求叫声不同类型的宠物不同,实现叫声时可以显示出宠物的名字和类型。

参考答案:

public class Pet {
    private String name;//宠物名字
    private String type;//宠物类型
    private String gender;//宠物性别

    public Pet(String name, String type, String gender) {
        this.name = name;
        this.type = type;
        this.gender = gender;
    }

    //获取宠物名字
    public String getName() {
        return name;
    }

    //获取宠物类型
    public String getType() {
        return type;
    }

    //获取宠物性别
    public String getGender() {
        return gender;
    }

    //宠物叫声
    public void cry() {
        if (type.equals("dog")) {
            System.out.println(name + ": 汪汪汪");
        } else if (type.equals("cat")) {
            System.out.println(name + ": 喵喵喵");
        } else {
            System.out.println("叫声未知");
        }
    }
}

有任何不懂的地方,可以点击下方的“发消息”给我留言。

PS:从这一节开始,欢迎你使用任何你喜欢的IDE完成作业,比如eclipse,IDEA,如果不会使用工具,可以去B站搜索相关的视频进行学习哈。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gl inet mt1300读写性能测试

为什么买这个路由器 1.最近需要一个路由器, 2.我需要在局域网存储一些东西方便手机电脑访问(微型nas), 3.另外还希望这个路由器是开源智能路由器(能装插件玩), 4.小,非常小,typec 供电(5v 1.5A),非常方便,支持tf卡 usb3.0 wifi 5GHz (1)不用nas的原因:我只是轻度使用nas,专…

Fedora 装系统后连接不上无线网络和蓝牙设备

Fedora 装系统后连接不上蓝牙鼠标0.升级系统,升级后仍然无法使用,执行步骤1-3的方法。1.查看本机是否有无线硬件模块——有2. 查看本机是否有蓝牙固件【驱动】——无3. 安装无线网络驱动3.1 打开终端3.2 安装dnf并配置3.3 使用dnf安装kmod-wl&#xff0c…

钉钉6亿用户的哲学:产业互联网的海洋里,没有人是一座孤岛

除了拥有大人口和大市场条件的中国,或许难有另一个国家再现数亿人共同投身产业互联网的场景。除了钉钉,或许也很难有别的软件能同时承载6亿人的数字化理想。 12月28日,钉钉总裁叶军在2022钉钉7.0产品发布会上,带来了钉钉的最新数…

知识变现海哥:如何将你的知识变成一套解决方案

知识变现海哥:如何将你的知识变成一套解决方案 之前我说过我们卖的不是自己能力,而是一套成体系的解决方案,因为没有人会单纯地为能力买单,我们越是能证明自己的能力有价值,就越能将自己的能力卖高价。而价值要怎么证…

Acwing---789.数的范围

数的范围1.题目2.基本思想3.代码实现4.总结1.题目 给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。 对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。 如果数组中不存在该元素,则返回“…

使用递归和非递归方式实现二叉树先序、中序、后序遍历

题目: 用递归和非递归方式,分别按照二叉树先序、中序和后续打印所有的节点。先序为根左右,中序为左根右,后序为左右根。 递归方式: (1)先序: //先序 根左右public static void pr…

TypeScript入门

这两天终于抽空学习了typescript,把欠了四年的帐给补上了。 废话不多说,先上官网链接:TypeScript中文网 TypeScript——JavaScript的超集 一、下载安装:用npm > npm install -g typescript 验证是否安装成功: …

保存网页内容 自动过滤广告和网页头尾

网页可以非常方便的为我们展示各种信息,如果遇到重要的资料文献,希望在本地电脑上保存下来该怎么操作呢?把网址添加到收藏夹,下次直接打开网址查看,但如果资源被网站删除,就再也找不到了。还是保存在自己电…

msf联动cs

Cobalt Strike简称CS 用于团队作战使用,由一个服务端和多个客户端组成,能让多个攻击者这在一个团队服务器上共享目标资源和信息,我们在使用msf获得权限以后,可以将信息共享到cs上,使用cs来进行监听以及其他的操作。 1…

理解Kotlin泛型

文章目录Kotlin泛型声明处型变协变< out T>逆变< in T>使用处型变(类型投影)参考Kotlin泛型 声明处型变 协变< out T> interface GenericsP<T> {fun get(): T //读取并返回T&#xff0c;可以认为只能读取T的对象是生产者 }如上声明了GenericsP<…

【C++】STL —— 用哈希表同时封装出unordered_set和unordered_map

目录 一、底层结构 1. 哈希的概念 二、哈希冲突 三、哈希函数 四、解决哈希冲突 1. 闭散列&#xff08;开放定址法&#xff09; 1. 线性探测 2. 二次探测 2. 闭散列的实现 3. 开散列&#xff08;拉链法&#xff09; 4. 开散列和闭散列的比较 五、HashTable的…

树莓派内核编译

文章参考&#xff1a; 深海游弋的鱼 – 默默的点滴 (mobibrw.com) 深海游弋的鱼 – 默默的点滴 (mobibrw.com) 1. 安装 git sudo apt install git 2. 下载树莓派内核源码 git clone --depth1 -b rpi-4.9.y https://github.com/raspberrypi/linux.git rpi-linux 3. 安装…

Python采集wangyi财经数据信息,做个可视化小案例

前言 2022年全球股市普跌&#xff0c;你亏了多少钱&#xff1f; 亏多少我也不知道&#xff0c;我只是想着来采集数据&#xff0c;做个可视化小案例来玩玩 话不多说&#xff0c;咱就直接开始吧 开发环境 解释器版本: python 3.8代码编辑器: pycharm 2021.2requests: pip ins…

Python笔记 | 卡布列克常数

0x00 前言 任意一个不是由完全相同数字组成的四位数&#xff0c;如果对它们的每位数字重新排序&#xff0c;组成一个较大的数和一个较小的数&#xff0c;然后用较大数减去较小数&#xff0c;差不够四位数时补零&#xff0c;类推下去&#xff0c;最后将变成一个固定的数&#xf…

使用kubeadm安装kubernetes记录

1.查看版本信息 # 在 master 节点和 worker 节点都要执行 cat /etc/redhat-release# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字 # 不能使用 localhost 作为节点的名字 hostname# 请使用 lscpu 命令&#xff0c;核对 CPU 信息 # Architecture: x86_64 …

C语言指针全解

C语言指针全解指针的定义指针的大小指针类型指针类型意义野指针二级指针字符指针指针数组数组指针&数组名 VS 数组名应用数组参数、指针参数函数指针函数指针数组函数指针数组的使用 - 模拟计算器指向函数指针数组的指针回调函数回调函数的使用 - qsort函数指针的定义 在计…

澳亚集团在港交所上市:IPO首日破发,毛利率走低,盈利能力下滑

12月30日&#xff0c;澳亚集团有限公司&#xff08;下称“澳亚集团”&#xff0c;HK:02425&#xff09;在港交所上市。本次上市&#xff0c;澳亚集团的发行价为6.40港元/股&#xff0c;发行数量为3064万股&#xff0c;募资总额约为1.96亿港元&#xff0c;募资净额约为1.01亿港元…

DoIP协议从入门到精通——DoIP企业规范常见疑问解答

基于自己在做DoIP测试过程中遇到的一些让自己困惑的点,汇总后与你分享,期望有所帮助。 具体内容如下: 1、IP地址 背景信息: 在通常Tester与车辆进行诊断通信时,Tester端设置好自己的IP地址信息,而对于待测ECU IP地址信息通常不设置,或者说不知道怎么设置。 穿拖鞋的…

ext4 extent详解1之示意图演示

本文将从内核源码、实例演示等角度详细ext4 extent B树的前世今生&#xff0c;希望看过本文的读者从理解ext4 extent的工作原理。内核版本3.10.96&#xff0c;详细内核详细源码注释见GitHub - dongzhiyan-stack/kernel-code-comment: 3.10.96 内核源代码注释。 1 ext4 extent由…

题库自定义配置,满足各种使用习惯,专治强迫症

目录 自定义题型 自定义选项 章节、难度增加排序属性 下一个版本预告 根据吐槽社区的反馈情况&#xff0c;没想到居然有台湾同胞使用土著刷题微信小程序&#xff0c;鉴于与内地的试题题目有所不同&#xff0c;所以土著刷题微信小程序v1.9主要迭代了题库自定义相关配置。 自…