【JavaSE】类和对象详解(上)

news2024/11/27 8:36:08

欢迎关注个人主页:逸狼

创造不易,可以点点赞吗~

如有错误,欢迎指出~

目录

类和对象

类的组成

对类的理解

成员变量的访问和类方法的调用

this

抛出一个问题

this的作用

初始化成员变量

未初始化的成员变量

代码举例

就地初始化

构造方法初始化成员变量

认识构造方法

注意

快速生成构造方法

快速生成构造方法步骤图解

通过this简化构造方法

代码执行步骤图解

执行结果



类和对象

在Java中,一切皆是对象,类(类型)是描述一个对象的(在C语言中是结构体),对象是一个真正的实体。

目的是:面向对象编程(重点在对象)

类的组成

class为定义类的关键字,ClassName为类的名字(用大驼峰形式),{}中为类的主体。

// 创建类
class ClassName{  
    field;       // 字段(属性) 或者 成员变量
    method;      // 行为 或者 成员方法
}

注意:

  • 一般一个文件当中只定义一个类
  • main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  • public修饰的类必须要和文件名相同
  • 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

例如定义一个类

class Student{
    //成员变量
    public String name;
    public String sex;
    public int age;

    //方法
    public void doClass(){
        System.out.println("学java!");
    }
}

对类的理解

通过new关键字可以实例化多个对象,在 堆 上产生对象

  • 类只是一个模型一样的东西,用来对一个实体进行描述
  • 类是一种自定义的类型,可以用来定义变量.
  • 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东 西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

成员变量的访问和类方法的调用

  • 利用.访问对象中的成员变量和调用类方法
  • 可以new多个实例化对象

如下创建一个洗衣机类,并访问成员变量和调用相关方法

class WashMachine{
    public String brand;
    public String color;
    public double weight;

    public void washClothes(){
        System.out.println("洗衣服!");
    }
    public void dryClothes(){
        System.out.println("脱水!");
    }
}

public class j3_30 {
    public static void main(String[] args) {
        WashMachine washMachine1=new WashMachine();//new一个实例化对象washMachine1
        washMachine1.brand="海尔";//利用.访问对象中的成员变量
        washMachine1.dryClothes();//利用.调用类方法
        System.out.println(washMachine1.brand);
        System.out.println("_________");
        WashMachine washMachine2=new WashMachine();//可以new多个实例化对象
        washMachine2.brand="美的";
        System.out.println(washMachine2.brand);
        washMachine2.dryClothes();
    }

结果

this

抛出一个问题

如下代码运行结果都是0,这是为什么呢?

public class Date {
    //这些变量属于对象
    public int year;
    public int month;
    public int day;
    //设置日期
    public void setDate(int year,int month,int day){
        year=year;//局部变量优先使用
        month=month;//在括号里面自己调用自己,修改的是局部变量,出了括号后,又变为了0
        day=day;
    }
    //打印日期
    public void printDate(){
        System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");
    }

    public static void main(String[] args) {
        Date date=new Date();//new一个对象date
        date.setDate(2024,3,31);
        date.printDate();
        System.out.println("**********");
        Date date2=new Date();//new一个对象date
        date2.setDate(2024,3,30);
        date2.printDate();
    }
}

这里我们就要考虑变量在内存的存储了~

我们可以看到开头我们定义了3个变量(year,month,day),这里的3个变量是属于成员变量,存储在上; 上面代码设置日期的方法里的 定义了3个变量(year,month,day),是局部变量(形参),存储在方法栈上;出现上面的这种情况是因为:对象和局部变量同名时,优先使用局部。

上面局部变量的自我修改(自己修改自己),出了作用域后就又变为了0。

那应该怎样解决该问题呢?我们可以使用this解决

this的作用

我们可以在设置日期的方法里的局部变量前面加上this,用于表示当前对象的引用

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

成功打印结果

this使用注意

  1. 在代码里面我们要习惯使用this,当出现可加可不加时,都加上
  2. this的类型:对应被调用的对象引用类型
  3. this只能在 成员方法中使用,只能引用当前对象

初始化成员变量

未初始化的成员变量

对于一个类的成员变量,在没有初始化前,每个成员变量都有一个默认值(引用类型是null,其余基本变量是对应的0值,boolean类型是false)

代码举例

就地初始化

在声明成员变量时,就直接给出了初始值。

public int year=2000;
public int month=1;
public int day=1;

构造方法初始化成员变量

认识构造方法

首先它是一个方法(返回值,方法名,参数列表{}),但又有区别,只有 方法名、参数列表{}、没有返回值 且 方法名和类名相同

 例如

public Date(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("学Java!");
   }

注意

  • 当我们没有写任何构造方法时,会默认存在一个(无参数的)
  • 只要存在任何一个构造方法,编译器就不会再提供了
  • 构造方法可以重载(参数不一样)

快速生成构造方法

通过编译器快速产生多个不同的构造方法,构成方法的重载

    public Date(int year, int month) {
        this.year = year;
        this.month = month;
    }

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

    public Date(int month) {
        this.month = month;
    }

快速生成构造方法步骤图解

通过this简化构造方法

    public Date(){
        this(2024,3,31);//必须放在第一行
        System.out.println("22222222");
    }

    public Date(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("11111111");
    }

代码执行步骤图解

执行结果

注意:this的调用不能形成环

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

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

相关文章

Autodesk Maya 2025 mac玛雅三维动画特效软件

Autodesk Maya 2025 for Mac是一款功能强大、操作简便的三维动画软件,适用于电影、电视、游戏、建筑、工业设计、虚拟现实和动画等领域。无论是专业设计师还是初学者,都可以通过Maya 2025实现自己的创意和想法,创作出高质量的三维作品。 软件…

浅谈Spring体系的理解

浅谈Spring知识体系 Spring Framework架构图Spring家族技术生态全景图XMind汇总 本文不涉及细节,主要回答两个问题: Spring家族技术生态全景图有哪些Spring Framework架构下每个模块有哪些东西,以及部分模块之间的关联关系 Spring Framework架…

探究贪心算法:特点与实际应用

探究贪心算法:特点与实际应用 探究贪心算法:特点与实际应用📝 摘要🚀 引言📋 正文内容(详细介绍)📌 小结📊 表格总结🎯 总结🔮 未来展望&#x1f…

【Redis教程0x08】详解Redis过期删除策略内存淘汰策略

引言 Redis的过期删除策略和内存淘汰策略是经常被问道的问题,这两个机制都是做删除操作,但是触发的条件和使用的策略是不同的。今天就来深入理解一下这两个策略。 过期删除策略 Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将…

智能文档合规检测系统:在央企国企招标采购领域的应用

一、背景介绍 在央企国企采购过程中,合规性是一个不可忽视的重要方面。采购方需要确保供应商的资质、业绩、规模等条件符合采购要求,同时避免设置不合理的条件限制或排斥潜在供应商。为了提高采购效率和确保合规性,智能文档合规检测系统应运…

40.网络游戏逆向分析与漏洞攻防-角色管理功能通信分析-角色删除功能的数据包失败的分析

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于: 易道云信息技术研究院VIP课 上一个内容:39.角色数据的维…

Linux|centos7-postgresql数据库|yum安装数据库和配置repmgr高可用集群以及repmgr的日常管理工作

一、 前言 postgresql 的yum部署其实还是有点东西的,本文就做一个小小的记录,高可用方面repmgr插件还是非常不错的,但如何部署以及部署后如何使用也是一个难点,因此,也在本文里做一个记录 环境介绍: 第…

TonyBai go语言第一课 学习笔记

文章目录 大纲前置篇显式 大纲 前置篇 显式 package main import "fmt" func main() { var a int16 5 var b int 8 var c int64 c a b fmt.Printf("%d\n", c) }如果我们编译这段程序,将得到类似这样的编译器错误:“invalid op…

jmeter性能压测的标准和实战中会遇到的问题

1.性能标准建议 CPU 使用率:不超过 70% 内存使用率:不超过 70% 磁盘:%util到达80%严重繁忙 (os.disIO.filesystem.writeKbPS 每秒写入的千字节) 响应时间:95%的响应时间不超过8000ms 事务成功率&#xff1a…

计算线上点坐标

综上代码 void point_on_line(float* res, float* p, float* q, float lambda) {float tmp 1 - lambda;res[0] tmp* p[0] lambda * q[0];res[1] tmp* p[1] lambda * q[1];res[2] tmp* p[2] lambda * q[2]; }

基于SpringBoot华强北二手手机商城系统

点赞收藏关注 → 私信领取本源代码、数据库 一、项目概述 项目名称:基于SpringBoot华强北二手手机商城 项目架构:B/S架构 开发语言:Java语言 主要技术:SpringBootMybatisMySQL 运行环境:Windows7以上、JDK1.8、M…

【微服务】Nacos(配置中心)

文章目录 1.AP和CP1.基本介绍2.说明 2.Nacos配置中心实例1.架构图2.在Nacos Server加入配置1.配置列表,加号2.加入配置3.点击发布,然后返回4.还可以编辑 3. 创建 Nacos 配置客户端模块获取配置中心信息1.创建子模块 e-commerce-nacos-config-client50002…

【研发日记】Matlab/Simulink开箱报告(十一)——Requirements Toolbox

目录 前言 Requirements Toolbox 编写需求 需求联接设计 需求跟踪开发进度 追溯性矩阵 分析和应用 总结 前言 见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》 见《开箱报告&#x…

弧形导轨在自动化设备中的传动原理

在自动化机械系统中,弧形导轨是一种常见的轨道结构,用于支撑和引导物体沿着指定的弧线运动。其工作原理基于几何学和物理学的原理。 弧形导轨通常由一个弧形的轨道和一个移动部件组成。轨道一般呈弧形,其几何形状可以是圆弧、椭圆弧等&#x…

JavaScript基础语法–变量

文章目录 认识JavaScript变量程序中变量的数据(记录)–变量变量的命名格式在Java script中变量定义包含两部分1. 变量声明(高级JS引擎接下来定义一个变量)2. 其他的写法 变量命名的规范(遵守)变量的练习a. …

使用 eNSP 模拟交换机防御 ARP 泛洪攻击

一、介绍 ARP(地址解析协议)泛洪攻击是一种网络攻击手法,利用 ARP 协议的工作方式来实施。ARP 协议用于将 IP 地址映射到 MAC 地址,以便在局域网中发送数据包。ARP 泛洪攻击的基本原理是向网络中广播大量伪造的 ARP 请求&#xf…

Doris实践——票务平台的实时数仓建设

目录 前言 一、引入 Doris原因 二、基于Doris搭建数据平台 2.1 构建实时数仓 2.2 Flink CDC全库同步 三、基于Doris进行OLAP报表开发 四、未来规划 原文大佬介绍的这篇票务平台的实时数仓建设有借鉴意义,现摘抄下来用作沉淀学习。如有侵权,请告知…

高效解决Visual Studio无法识别到自定义头文件

文章目录 问题解决方案 问题 说明你没有好好配置项目属性 解决方案 把头文件都集中存放到一个文件夹里 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路…

【c++】类和对象(六)深入了解隐式类型转换

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来到初始化列表,隐式类型转换以及explicit的内容 目录 1.初始化列表1.1构造函数体赋值1.2初始化列表1.2.1隐式类型转换与复制初始化 1.3e…

Learning from Multiple Annotator Noisy Labels via Sample-wise Label Fusion

confusion matrix P n ( r ) _n^{(r)} n(r)​ pillow8.3.1和python3.7.11的环境不好满足,不建议复现