零基础Java第十期:类和对象(一)

news2024/12/24 19:52:36

目录

一、拜访对象村

1.1. 什么是面向对象 

1.2. 面向对象与面向过程 

 二、类定义和使用

2.1. 类的定义格式 

2.2. 类的定义练习

三、类的实例化

3.1. 什么是实例化 

3.2. 类和对象的说明

 四、this引用

4.1. 什么是this引用 

4.2. this引用的特性 


一、拜访对象村

       在之前的代码中,我们都是main()方法中执行,但这都是面向过程的。从这一起开始,博主将待大家离开过程化的编程世界,建立起自己的对象。注意:一旦进入对象村,你就再也不想回头。

1.1. 什么是面向对象 

       在对象村里面,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。 

1.2. 面向对象与面向过程 

我们拿洗衣服来举例,洗衣粉、洗衣机、人就是对象;过程如下:

 二、类定义和使用

        类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。到底类和对象有什么不同呢?其实,类不是对象,却是用来创建它们的模型。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量。我们可以使用狗类创建出年龄、性别、姓名。

2.1. 类的定义格式 

 语法规则:类名一般采用大驼峰,字段或成员属性定义在方法外部、类的内部。成员方法和成员变量可以细分为两种,静态与非静态的。public可有可无。

public class 类名{
     字段/成员属性;
     成员方法;

我们拿洗衣机举例,

public class WashMachine{
    public String brand;   // 品牌
    public String type;    // 型号
    public double weight;  // 重量
    public double length;  // 长
    public double width;  // 宽
    public double height;  // 高
    public String color;   // 颜色

2.2. 类的定义练习

(1)定义一个购物车类 

public class ShoppingCart {
    public String cartContents;//定义购物车内容

    public void addToCart(){
        System.out.println(cartContents+"把购买的物品添加进购物车");
    }
}

 (2)定义一个按钮类

public class Button {
    public String label;//定义标签
    public String color;//定义颜色

    public void SetColor(){
        System.out.println("The button is" + color);
    }

    public void setLabel(){
        System.out.println("The button is"+label);
    }
}

三、类的实例化

3.1. 什么是实例化 

       定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自 带的内置类型,而类是用户自定义了一个新的类型,比如上述的:ShoppingCart类和Button类。用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。下面我们来进行一个电影类的实例化:

public class Movie {
    String title;//定义标题
    String genre;//定义题材
    int rating;//定义评级

    public void playIt(){
        System.out.println(title+""+genre+""+rating);
    }
}
public class MovieTestDrive {
    public static void main(String[] args) {
        Movie one =new Movie();
        one.title="Gone with the Stock";
        one.genre="Tragic";
        one.rating=-2;
        one.playIt();

        Movie two =new Movie();
        two.title ="Lost in Cubicle Space";
        two.genre ="Comedy";
        two.rating =5;
        two.playIt();
    }
}

 

那么类的实例化在栈和堆上是如何开辟内存空间的:

       one先在栈上开辟一块内存空间,栈上的地址指向堆里面,此时我们创立的属性title、genre、rating、就会在堆上进行赋值。

        对于类的成员变量来说,每一个成员变量都有一个默认值,引用类型为null,基本类型为对应的默认类型。 

3.2. 类和对象的说明

       到底类和对象两者之间有什么不同呢?首先,类不是对象,是用来创建它们的模型。类是对象的蓝图,它会告诉虚拟机如何创建某种类型的对象。根据某类创建出的对象都会有自己的实例变量 。

       对象可以执行的动作叫方法。在设计类时,我也会同时设计出操作对象数据的方法。举例来说,闹钟对象会有个变量来保存时间,且会有GetTime和SetTIme来保存该时间。

public class Alarm {
    public int AlarmTime;//定义时间
    public String AlarmMode;

    public void GetTime(){
        System.out.println("get the time");
    }
    public void SetTime(){
        System.out.println(" set the time");
    }
}

 四、this引用

4.1. 什么是this引用 

先看一个日期类的例子: 

public class Date {
    public int year;
    public int month;
    public int day;

     public void SetDate(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) {
        Date date = new Date();
        date.SetDate(2005,3,13);
        date.PrintDate();
        System.out.println("=========");

        Date date1 =new Date();
        date1.SetDate(2024,10,25);
        date1.PrintDate();
    }
}

 

此时博主要给出两个问题去思考一下:

1、每个方法只有一个,那么该方法怎么知道给哪个成员变量赋值?

2、当修改SetDate之后,赋值失败

       我们先看第二个问题,当我们修改了之后,就会出了两个形参,相当于形参自己给自己赋值。可我们有时候无法避免命名相同,此时就可以通过this来解决。

public void SetDate(int year,int month,int day){
   year=year;
   month=month;
   day=day;
}
public void SetDate(int year,int month,int day){
   this.year=year;
   this.month=month;
   this.day=day;
}

       那么第一个问题呢?this表示当前对象的引用,在方法的内部还存在着一个隐藏的this,编译器自动接收,谁调用SetDate谁就会把引用传给this,它携带的信息就会包含我要修改的成员变量。

4.2. this引用的特性 

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型 

2. this只能在"成员方法"中使用

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象 

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

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

相关文章

<项目代码>YOLOv8路面病害识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

STMicroelectronics意法半导体车规芯片系列--亿配芯城(ICgoodFind)

在汽车电子领域,意法半导体的车规级芯片系列一直备受瞩目。亿配芯城作为电子元器件领域的可靠供应商,为大家介绍意法半导体车规级芯片系列的卓越之处。 意法半导体在车规级芯片领域拥有深厚的技术积累和丰富的经验。 其车规级芯片涵盖了多个关键领域&am…

8.three.js相机详解

8.three.js相机详解 1、 认识相机 在Threejs中相机的表示是THREE.Camera,它是相机的抽象基类,其子类有两种相机,分别是正投影相机THREE.OrthographicCamera和透视投影相机THREE.PerspectiveCamera: 正投影和透视投影的区别是&am…

【Java】常用方法合集

以 DemoVo 为实体 import lombok.Data; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;Data ExcelIgnoreUnannotated public class ExportPromoteUnitResult {private String id;ExcelProperty(value &qu…

贪心算法记录 - 下

135. 分发糖果 困难 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0c…

一文搞懂指令周期,机器周期和时钟周期

如图: 指令周期 > 机器周期 > 时钟周期 指令周期:一个指令,从取值到执行的全部周期。一个指令执行过程包括取值,译码和执行阶段。 机器周期:,取指、间址、执行和中断等 时钟周期:时钟频率的倒数&am…

什么样的JSON编辑器才好用

简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。随着互联网和应用程序的快速发展,JSON已经成为数据传输和存储的主要格式之一。在处理和编辑JSON数据…

python查询并安装项目所依赖的所有包

引言 如果需要进行代码的移植,肯定少不了在另一台pc或者服务器上进行环境的搭建,那么首先是要知道在已有的工程的代码中用到了哪些包,此时,如果是用人工去一个一个的代码文件中去查看调用了哪些包,这个工作甚是繁琐。…

推荐一款三维数值建模软件:3DEC

3DEC是一种用于土壤、岩石、地下水、结构支撑和砖石等高级岩土工程分析的三维数值建模软件。该软件的数值公式基于离散元法(DEM)进行不连续建模。UDEC是它的二维版本。不连续材料是一组离散的块。不连续性充当着块之间的边界条件。允许块的大位移和旋转。常见的结构可以直接从地…

HTML5教程(一)- 网页与开发工具

1. 什么是网页 网页 基于浏览器阅读的应用程序,是数据(文本、图像、视频、声音、链接等)展示的载体常见的是以 .html 或 .htm 结尾的文件 网站 使用 HTML 等制作的用于展示特定内容相关的网页集合。 2. 网页的组成 浏览器 代替用户向服务…

Cout输出应用举例

Cout输出应用 在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <stdlib.h> //使能exit(); #include <sstream> #include <iomanip> //使能setbase(),setfill(),setw(),setprecision(),setiosflags()和res…

根据用户选择的行和列数据构造数据结构(跨行跨列)

方案一 这段代码的功能是根据用户选择的行和列数据&#xff0c;生成一个适合复制粘贴的字符串表格。代码会先按列的 id 从小到大排序&#xff0c;再根据行列的选择关系将数据按顺序填入表格&#xff0c;每行之间使用换行符分隔&#xff0c;每列之间使用制表符分隔。如果某一行…

【汇编语言】第一个程序(一)—— 一个源程序从写出到执行的过程

文章目录 前言1. 第一步&#xff1a;编写汇编源程序2. 第二步&#xff1a;对源程序进行编译连接3. 第三步&#xff1a;执行可执行文件中的程序结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程…

多元线性回归【正规方程/sklearn】

多元线性回归【正规方程/sklearn】 1. 基本概念1.1 线性回归1.2 一元简单线性回归1.3 最优解1.4 多元线性回归 2. 正规方程求最优解2.1 线性回归的损失函数&#xff08;最小二乘法&#xff09;2.2 推导正规方程2.3 正规方程练习2.4 使用sklearn计算多元线性方程2.5 凸函数 3. 线…

比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis

【实验名称】 实验一&#xff1a;绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders&#xff0c; 20 0000users&#xff0c; …

electron 打包

安装及配置 安装electron包以及electron-builder打包工具 # 安装 electron cnpm install --save-dev electron # 安装打包工具 cnpm install electron-builder -D 参考的package.json文件 其中description和author为必填项目 {"name": "appfile",&qu…

十一、数据库配置

一、Navicat配置 这个软件需要破解 密码是&#xff1a;123456&#xff1b; 新建连接》新建数据库 创建一个表 保存出现名字设置 双击打开 把id设置为自动递增 这里就相当于每一次向数据库添加一个语句&#xff0c;会自动增长id一次 二、数据库的增删改查 1、Vs 建一个控…

C# 创建型设计模式----工厂模式

1 、什么是工厂模式 简单来说就是由一个对象去生成不同的对象&#xff0c;工厂模式是用工厂方法代替new操作的一种模式。工厂方法封装了多个相关联类的new方法&#xff0c;每次实例化这些类的时候不需要new多次&#xff0c;只需要调用工厂类的对应方法即可实例化这些类&#x…

2024年项目管理新风向:敏捷开发与瀑布开发,哪个更优?

一、项目管理的多样格局 2024 年&#xff0c;项目管理领域展现出丰富多样的格局。数字化趋势愈发明显&#xff0c;项目管理软件普及度不断提高&#xff0c;据相关资料显示&#xff0c;随着云计算、大数据等技术的成熟&#xff0c;项目管理软件将更加普及&#xff0c;实现项目信…

单片机_RTOS__架构概念

经典单片机程序 void main() {while(1){函数1&#xff08;&#xff09;&#xff1b;函数2&#xff08;&#xff09;&#xff1b;}} 有无RTOS区别 裸机 RTOS RTOS程序 喂饭&#xff08;&#xff09; {while&#xff08;1&#xff09;{喂一口饭&#xff08;&#xff09;;} } …