JavaSE(类和对象、this用法、构造方法)

news2024/11/19 5:48:29

1. 面向对象

C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
JAVA是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
面向过程注重的是过程,在整个过程中所涉及的行为,就是功能。
面向对象注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来
面向对象就是用代码(类)来描述客观世界的事物的一种方式. 一个类主要包含一个事物的属性和行为

1. 注重洗衣服过程
在这里插入图片描述
2.注重洗衣对象
在这里插入图片描述
总共有四个对象:人、衣服、洗衣粉、洗衣机。

整个过程主要是:人、衣服、洗衣粉、洗衣机四个对象之间交互完成的,人不需要关心洗衣机具体是如何洗衣粉的,是如何甩干的。以面向对象的方式进行处理,就不需要关注洗衣服的过程,是通过对象之间的交互来完成的

什么是类

对象从何而来,从类来,你可以想象成一个类型,面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识。这个类我们要定义出来,该怎么定义呢?需要开发人员告诉给计算机什么是洗衣机。
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥)
在这里插入图片描述

比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色…
功能:洗衣,烘干、定时…
class为定义类的关键字,WashMachine为类的名字,{}中为类的主体(类体)。 类中的元素称为:成员属性(成员变量)。类中的函数称为:成员方法。

class WashMachine{
	public String brand; // 品牌
	public String type; // 型号
	public double weight; // 重量
	public double length; // 长
	public double width; // 宽
	public double height; // 高
	public String color; // 颜色
	public void washClothes(){ // 洗衣服
	System.out.println("洗衣功能");
	}
public void dryClothes(){ // 脱水
	System.out.println("脱水功能");
	}
public void setTime(){ // 定时
	System.out.println("定时功能");
	}
}

类new个对象

用类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

public class ClassAndObject {
    public static void main(String[] args) {
        // 现在我们有了类,那么怎么产生对象的呢? 通过  new 去实例化一个对象,也就是说去产生一个对象
        WashMachine xiyiji = new WashMachine();//xiyiji是一个变量
        // 注意此时的变量是由类定义的,由类定义的变量,都是引用变量,意味着初值可以赋 null

        // 而且 前面也说,同一个类,我们可以产生很多对象
        // 意味着 我们生成 很多人 xiyiji
         WashMachine xiyiji2 = new  WashMachine();
         WashMachine xiyiji3 = new  WashMachine();
         WashMachine xiyiji4 = new  WashMachine();
        //    ......
    }
}

在这里插入图片描述

类.成员变量

使用 . 来访问对象中的属性和方法.

public class ClassAndObject {
    public static void main(String[] args) {
        WashMachine xiyiji = new WashMachine();
       xiyiji.brand="苹果牌";
       xiyiji.length=100;
       xiyiji.washClothes();
       //.....
       System.out.println(xiyiji.length);
    }
}

类和对象的内存

在这里插入图片描述

public类名修改

注意事项:

  1. 一一个java文件当中只能定义一个public类
  2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  3. public修饰的类必须要和文件名相同
  4. 不要轻易去修改public修饰的类的名称,要通过开发工具修改(src–>旧类名右击—>Refactor---->Rename—>新的类名)

在这里插入图片描述

类的说法易错点

在这里插入图片描述

2.this

为什么要有this引用

定义了一个日期类,然后main方法中创建了三个对象,并通过Date类中的成员方法对对象进行设置和打
印,代码整体逻辑非常简单,没有任何问题。

public class Date {
	public int year;
	public int month;
	public int day;
	public void setDay(int y, int m, int d){
	year = y;
	month = m;
	day = d;
	}
	public void printDate(){
	System.out.println(year + "/" + month + "/" + day);
	}
	public static void main(String[] args) {
	// 构造三个日期类型的对象 d1 d2 d3
	Date d1 = new Date();
	Date d2 = new Date();
	Date d3 = new Date();
	// 对d1,d2,d3的日期设置
	d1.setDay(2020,9,15);
	d2.setDay(2020,9,16);
	d3.setDay(2020,9,17);
	// 打印日期中的内容
	d1.printDate();
	d2.printDate();
	d3.printDate();
	}
}

但是细思之下有以下两个疑问?

  1. 形参名不小心与成员变量名相同
    public void setDay(int year, int month, int day){
    year = year;
    month = month;
    day = day;
    }
    结果就不能赋值,全部都是默认值0,原因是形参是局部变量,局部变量优先使用,不能对成员变量进行赋值。
  2. 三个对象都在调用setDate和printDate函数,但是这两个函数中没有任何有关对象的说明,setDate和
    printDate函数如何知道打印的是那个对象的数据呢?

this引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
    在这里插入图片描述
  2. this只能在"成员方法"中使用
  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收
    在这里插入图片描述

在这里插入图片描述

this的用法

1.this.data 调用当前的对象的 属性/字段/成员变量
2.this.func() 调用当前的对象的方法
3.this() 调用当前对象的其他构造方法====类( )

class Date{
    public int year;

    public Date(){
        this();
        // 注意不能这么去写,因为 this() 表示调用当前对象的构造方法
        // 而现在Date 就是当前的构造方法,两者嵌套使用,会造成死循环
        // Date(){} 调用 this(), this() 调用 Date(){}
        // 而且编译器也出现 红色波浪线警告
        System.out.println("不带参数的构造方法");
   }
}

3. 构造方法

什么是构造方法?

这个方法没有返回值,方法名和类名是一样(都是Date)的。

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
public Date(){//括号里不含参数
	System.out.println("不带参数的构造方法");
}
public Date(int x,char y,double z){//括号里含参数
	System.out.println("带参数的构造方法");
}
系统提供的:
public Date(){//什么都没有

}

不带参数:当你什么构造方法都没有写的时候,系统是默认给你写上一个不带参数的。
带参数:肯定就是你写的,也只会调用你写的,那系统就不会多此一举再提供了。
构造方法只会调用一次Date d = new Date();实例化对象调用

构造方法的作用?

在构造函数时就可以去初始化了,而不需要去构造一个类似于setDate这样的函数。

public class Date {
    public int year;
    public int month;
    public int day;
    public Date(int year,int month,int day) {
    //this();
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带有3个参数的构造方法!");
        this.show();
    }
    public void setDate(int year,int month,int day) {
        this.show();
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void show() {
        System.out.println("年:"+this.year+" 月:"+this.month+" 日:"+this.day);
    }
    public static void main(String[] args) {
        Date date = new Date(2022,12,23);//传参
        date.show();
    }

}
输出结果:
调用了带有3个参数的构造方法!
年:2022 月:12 日:23
年:2022 月:12 日:23

通过this调用其他构造方法来简化代

public class Date {
    public int year;
    public int month;
    public int day;
    // 无参构造方法-内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复
    // 此处可以在无参构造方法中通过this调用带有三个参数的构造方法
    // 但是this(1900,1,1);必须是构造方法中第一条语句
    public Date(){
        //System.out.println(year);   注释取消掉,编译会失败
        this(1900, 1, 1);    
        //this.year = 1900;
        //this.month = 1;
        //this.day = 1;
    }
    // 带有三个参数的构造方法
    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
}
 public static void main(String[] args) {
        Date date = new Date();

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

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

相关文章

2005-2020年全国及31省绿色信贷水平原始数据及测算

2005-2020年各省绿色信贷水平原始数据及测算 1、时间:2005-2020年 2、来源:整理自统计NJ、工业NJ、2018年经济普查,其中2017年采用插值法填补 3、范围:包括全国及31省市 4、数据内容:包含计算过程和原始数据 5、具…

动态规划——线性dp

基于数字三角形问题扩展 参考闫氏dp分析法参考闫氏dp分析法参考闫氏dp分析法 方格取数 f[i1][j1][i2][j2]表示(1,1)到(i1,j1)和(1,1)到(i2,j2)和的最大值f[i1][j1][i2][j2]表示(1,1&#xff09…

ubuntu小技巧29--frp实现通过公网访问内网服务

ubuntu小技巧29--frp实现通过公网访问内网服务1 介绍2 方法步骤3 注意事项4 说明1 介绍 很多时候我们需要在外部网络中访问局域网或者个人家庭主机,以便于实现一个机器在多个地方都能用,此时我们就可以使用 frp 或者其竞品来实现该功能。 frp 是一个专…

11Python面相对象基础语法

面相对象基础语法 01. dir 内置函数 在 Python 中 对象几乎是无所不在的,我们之前学习的 变量、数据、函数 都是对象 在 Python 中可以使用以下两个方法验证: 使用内置函数 dir 传入 标识符 / 数据,可以查看对象内的 所有属性及方法 提示…

基于 UWB 数字孪生钢厂人员安全定位

钢铁冶炼从原料采购、焦化烧结、炼铁、炼钢、轧钢、到产出成品,其冗长的生产工序、复杂的作业场景,更应加以重视生产现场的人员作业安全,将安全防范监管贯穿日常作业全过程,打通安全生产责任“最后一公里”。 随着近几年钢厂信息…

电源管理芯片|“小方寸”大作为—TMI3191直击智能穿戴电源痛点!

随着移动通信、人工智能等技术的不断发展和融合, 智能终端产业正在加速裂变,智能穿戴迅速成为人们日常生活和工作中的新宠。 根据IDC最新数据显示,2016年~2020年出货量从1.02亿台增长至4.45亿台,预测2020-2025年全球智能可穿戴设备出货量复合…

手写B+树

1.特点 https://blog.csdn.net/weixin_57128596/article/details/127030901?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167176442416800188598723%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id167176442416800…

springboot mybatis大学生校园宿舍管理系统源码含文档

摘 要:宿舍是大学生学习与生活的主要场所之一,宿舍管理是高校学工管理事务中 尤为重要的一项。随着我国高校招生规模的进一步扩大,学生总体人数的不断增加, 宿舍管理工作变得愈加沉重和琐碎,学生宿舍信息的采集、汇总…

Classifier Guided Diffusion

前言 上次已经学习了open AI的 DDPM(DDPM原理与代码剖析)和 IDDPM(IDDPM原理和代码剖析), 以及 斯坦福的 DDIM DDIM原理及代码(Denoising diffusion implicit models). 这次来看openAI的另一个作品 Diffusion Models Beat GANs on Image Synthesis github: https://github.com…

操作系统(4)页面替换策略算法模拟实现

1. 效果展示 2. 程序流程图 (1) 程序总流程 (2) FIFO策略 (3) LRU策略 (4) OPT策略 3. 数据结构设计 //页面数据结构struct PageInfo {int id;int visit;};PageInfo* Block; // 物…

我国电力物流行业发展现存问题及解决策略分析 企业应加强信息化建设

电力物流是电力发、输、配、售流程的一部分,是为了满足终端用户需求,对电力从发电到终端用户的高效率、高效益的流动以及流程各环节相互提供的服务和相关信息在此过程中的正、反向流动所进行的计划、实施与控制过程。 根据观研报告网发布的《中国电力物流…

nginx反向代理ssl配置

nginx反向代理是各大应用环境最重要的环节,今天我们来说说如何配置反代理SSL这书,首先配置准备好:nginx环境、SSL证书、确定需要设置的端口防火墙开放(尤其是云服务器需要单独设置,windows防火墙单独设置)。…

电巢:上海半导体投资浪潮的前奏、高潮与转折

朱旭东是上海半导体投资界的开创性人物,他带领浦科投资投出了中微半导体、盛美半导体等当下的「国之重器」,并控股了万业企业、上工申贝等A股上市公司。随后又在国内率先发起设立并管理了上海半导体装备材料产业投资基金,推动旗下上市公司万业…

前端开发--JavaScript Bom和Dom

JavaScript Bom和Dom这一篇就够啦JavaScript Bom和Dom1、Web API 基本认知2、DOM -- 基础2.1 DOM简介2.2 获取元素2.3 事件基础2.4 操作元素2.5 节点操作2.6 DOM重点核心3、DOM -- 事件高级3.1 注册事件(绑定事件)3.2 删除事件(解绑事件)3.3 DOM事件流3.4 事件对象3.5 事件委托…

如何理解UML2.5.1(05篇)

标记subsets和redefines可以说是UML2.5.1中最重要的一对标记。标记subsets相对要好理解一些,但是redefines的含义就没有那么直白。先看一下目前已知的subsets和redefines的效果: 假定图一中A1和B1的关联两端的标记都是subsets&#xff0…

Torch计算方法

Torch 中的计算方法与 Numpy 的计算方法很类似;Torch中带 “下划线 ” 的操作,都是in-place的。 求和: torch.sum() 对输入的 tensor 数据的某一维度求和; 1.torch.sum(input, dtypeNone) 2&…

硬盘 / 硬盘控制器主要端口寄存器 / Controller Register

文章目录IDE 与 SATA硬盘分区表结构硬盘控制器主要端口寄存器data 寄存器Error && FeaturesErrorFeaturesSector countLBA low | mid | highdevice 寄存器StatusCommandIDE 与 SATA 很久以前,硬盘控制器和硬盘是分开的,后面开发了一个新接口&am…

【观察】新华三:智慧计算“再进化”,算力创新“再升级”

今天,算力就是生产力已成为业界共识,特别是算力作为数字经济时代的关键生产力要素,更成为了挖掘数据要素价值,推动数字经济发展的核心支撑力和驱动力。在此过程中,由算力驱动的数字经济除了以信息产业这一独立的经济形…

Linux进程间通信(二):命名管道的使用和原理

文章目录一、前言二、命名管道的使用一、前言 我们上篇博客里谈到,进程间通信的本质在于如何让两个进程看到同一份资源。匿名管道的核心思想就是让子进程继承父进程,从而让父子进程看到同一份管道文件,但这也使通信仅仅局限在具有血缘关系的进…

比Sqoop功能更加强大开源数据同步工具DataX实战

文章目录概述定义与Sqoop对比框架设计支持插件核心架构核心优势部署基础环境安装从stream读取数据并打印到控制台读取MySQL写入HDFS读取HDFS写入MySQL执行流程概述 定义 DataX 官网地址 https://maxwells-daemon.io/ DataX GitHub源码地址 https://github.com/alibaba/DataX D…