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

目录

一、拜访对象村

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只能引用当前对象,不能再引用其他对象 

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

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

相关文章

基于SSM考研助手系统的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教学秘书管理,考研资讯管理,考研名师管理,考研信息管理,系统管理 教学秘书账号功能包括:系统首页,个人中心…

让你的 IDEA 使用更流畅 | IDEA内存修改

随着idea使用越来越频繁,笔者最近发现使用过程中有时候会出现卡顿现象,例如,启动软件变慢,打开项目的速度变慢等: 因此如果各位朋友觉得最近也遇到了同样的困惑,不妨跟着笔者一起来设置IDEA的内存大小吧~ …

基于Bert+Attention+LSTM智能校园知识图谱问答推荐系统

获取更多完整项目代码数据集,点此加入免费社区群 : 首页-置顶必看 1. 项目简介 本项目旨在实现基于ALBERT模型的命名实体识别(NER)任务。ALBERT(A Lite BERT)是谷歌提出的轻量级BERT模型,具有…

贪心算法与盛雨水问题

啥是盛雨水问题?给个图就熟悉了 欸? 这其中的关键在于: 1. 容量2D化就是长 * 宽 2. 木桶效应:宽取决于短板。 那我们来分析,怎么样能达到最佳的结果呢?穷举一下所有可能性不就好了?每两个板子…

ArcGIS001:ArcGIS10.2安装教程

摘要:本文详细介绍arcgis10.2的安装、破解、汉化过程。 一、软件下载 安装包链接:https://pan.baidu.com/s/1T3UJ7t_ELZ73TH2wGOcfpg?pwd08zk 提取码:08zk 二、安装NET Framework 3.5 双击打开控制面板,点击【卸载程序】&…

【c++篇】:解析c++类--优化编程的关键所在(二)

文章目录 一.默认成员函数二.构造函数2.1.构造函数的概念2.2构造函数的特性 三.析构函数3.1析构函数的概念3.2析构函数的特性 四.拷贝构造函数4.1拷贝构造函数的概念4.2拷贝构造函数的特性 五. 赋值运算符重载5.1运算符重载5.2赋值运算符重载5.3前置和后置重载 六.const成员七.…

【业务】群组服务功能重构测试总结

背景: 群组微服务重构想法上半年就开始了,目前老群组服务除了代码设计不合理,服务部署无法启动也是痛点。研发侧发起技术重构。 测试角度来说我这边痛点有三个: 业务不熟悉也没有完整有效case->有哪些功能点,那些…

docker 单节点arm架构服务器安装zookeeper、kafka并测试通信

kafka、zookeeper常用镜像介绍 kafka和zookeeper常见的镜像有以下三个:wurstmeister/zookeeper、kafka、confluentinc/cp-zookeeper、cp-kafka 和 bitnami/zookeeper、kafka。 wurstmeister/xxx: 由wurstmeister团队维护,提供的镜像适用于开发和测试环…

Mac apache配置cgi环境-修改httpd.conf文件、启动apache

Mac自带Apache,配置CGI,分以下几步: 找到httpd.conf。打开终端,编辑以下几处,去掉#或补充内容。在这个路径下写一个测试文件.py格式的,/Library/WebServer/CGI-Executables,注意第一行的python…

矩阵概念 和 性质

目录 一、矩阵因式分解 二、矩阵在图形学的运用 一、矩阵因式分解 1、先将矩阵化为上三角阵,得到U 2、每个主元列以下元素 主元 得到下三角阵 二、矩阵在图形学的运用 二维移动: 子空间H: 零向量属于H 对H中任意向量u、v,uv…

2024-10-25 算法学习及论文辅导(每日更新,随时联系)

看看学习小群的学习氛围👇🏻 很多同学自己学习遇到问题没人解决,最终消耗了时间,精力同时大大消耗了自己对学习的信心😧 🥳来看看跟班学习,大家遇到问题的时候是怎么解决的: 首先…

idea安装visualVm插件

idea 安装visualVM插件用于分析java程序, 1.在插件市场安装visualvm launcher 2.安装成功后,重启idea,此时启动按钮旁边有这两个按钮 3.需要在这里配置插件的visualvm位置 4.配置完后,点击启动

ArcGIS计算落入面图层中的线的长度或面的面积

本文介绍在ArcMap软件中,计算落入某个指定矢量面图层中的另一个线图层的长度、面图层的面积等指标的方法。 如下图所示,现在有2个矢量要素集,其中一个为面要素,表示某些区域;另一个为线要素,表示道路路网。…

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

Shell原理及其模拟实现 在认识进程exec系列函数、命令行参数列表、环境变量之后,我们可以尝试理解一下Shell的原理,将各方知识串联起来,让Shell跑起来才能真正理解这些概念。我会以模拟Shell执行的原理模拟一个Shell。途中配上相关讲解。 1…

InnoDB 存储引擎<一>InnoDB简介与MySQL存储架构及相关数据结构

目录 回顾MySQL架构 InnoDB简介 ​MySQL存储结构 回顾MySQL架构 对MySQL架构图的总结: MySQL服务器是以网络服务的方式对外提供数据库服务的,我们使用的应用程序以及客户端统称为外部程序。 外部程序通过发送网络请求的方式来连接MySQL服务器,这时首先每…

Leetcode239. 滑动窗口最大值

问题描述: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,…

Python爬虫教程:从入门到精通

Python爬虫教程:从入门到精通 前言 在信息爆炸的时代,数据是最宝贵的资源之一。Python作为一种简洁而强大的编程语言,因其丰富的库和框架,成为了数据爬取的首选工具。本文将带您深入了解Python爬虫的基本概念、实用技巧以及应用…

文件下载漏洞

文件安全 文件下载 常见敏感信息路径 Windows C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码 C:\Program Files\mysql\my.ini //Mysql配置 C:\Program Files\mysql\data\mysql\user.…

Python小游戏13——植物大战僵尸

代码 import random import time # 植物类 class Plant: def __init__(self, name, health): self.name name self.health health def is_alive(self): return self.health > 0 # 僵尸类 class Zombie: def __init__(self, name, health): self.name name self.health h…

Tornado简单使用

Tornado简单使用 1 介绍 Tornado 是一个基于Python的Web服务框架和 异步网络库,它最初由 FriendFeed 开发,后来被 Facebook 收购并开源,通过利用非阻塞网络 I/O, Tornado 可以承载成千上万的活动连接,完美的实现了 长连接、WebS…