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

欢迎关注个人主页:逸狼

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

如有错误,欢迎指出~

目录

类和对象

类的组成

对类的理解

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

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一个实例化对象washMachine1washMachine1.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;//在括号里面自己调用自己,修改的是局部变量,出了括号后,又变为了0day=day;}//打印日期public void printDate(){System.out.println(year+" 年 "+month+" 月 "+day+" 日 ");}public static void main(String[] args) {Date date=new Date();//new一个对象datedate.setDate(2024,3,31);date.printDate();System.out.println("**********");Date date2=new Date();//new一个对象datedate2.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.mzph.cn/news/782873.shtml

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

相关文章

阿里云服务器ECS u1实例ecs.u1-c1m2.large性能测评

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

深入理解两个常用的Python技巧

1. 引言 只需简单搜索一下,就很容易获得许多试图告诉我们关于 Python 技巧的文章。这些技巧要么更 “Pythonic”,要么能让我们的程序更快。这些文章并没有错,因为大多数技巧都非常有用。事实上,我自己也写过很多这类文章。 然而…

蓝桥杯 java 承压计算

题目: 思路: 1:其中的数字代表金属块的重量(计量单位较大) 说明每个数字后面不一定有多少个0 2:假设每块原料的重量都十分精确地平均落在下方的两个金属块上,最后,所有的金属块的重量都严格精确地平分落在最底层的电子…

多维数组和交错数组笔记

1.) 关于数据的几个概念: Rank,即数组的维数,其值是数组类型的方括号之间逗号个数加上1。 Demo:利用一维数组显示斐波那契数列F(n) F(n-1) F(n-2) (n >2 ),每行显示5项,20项. static void Main(string[] args){int[] F n…

http响应练习—在服务器端渲染html(SSR)

一、什么是服务器端渲染(SSR) 简单说,就是在服务器上把网页生成好,整个的HTML页面生成出来,生成出的页面已经包含了所有必要的数据和结构信息,然后直接发给浏览器进行展现。 二、例题 要求搭建http服务&a…

slowhttp攻击漏洞原理解析和防御,以及LiqunKit 综合漏洞利用工具详细使用

slowhttp攻击漏洞原理解析和防御,以及LiqunKit 综合漏洞利用工具详细使用。 Slowhttp攻击是一种拒绝服务(DoS)攻击,它利用了HTTP协议的一些特性来耗尽服务器资源,导致服务器对正常请求的响应变慢或无法响应。这种攻击的特点是长时间占用服务器的连接,而不是发送大量流量…

JSQLParserException异常

前言 SQL中加入了租户字段&#xff0c;报这个错&#xff0c;可以查出数据&#xff0c;但是不多&#xff1b;SQL检查无问题 解决 原因一 引入新的SQL解析器检查解析SQL&#xff0c;与mybatis多租户无关 参考 <!--jsqlparser版本太低也无法解析&#xff0c;如2.0--> &…

2024 年高效开发的 React 生态系统

要使用 React 制作应用程序&#xff0c;需要熟悉正确的库来添加您需要的功能。例如&#xff0c;要添加某个功能&#xff08;例如身份验证或样式&#xff09;&#xff0c;您需要找到一个好的第三方库来处理它。 在这份综合指南中&#xff0c;我将向您展示我建议您在 2024 年使用…

C语言预处理详解

预处理是什么 在我们写完C语言程序的时候当我们开始运行程序时&#xff0c;程序会经过预处理&#xff0c;编译&#xff0c;汇编&#xff0c;链接这些过程之后才会生成可执行程序&#xff0c;这里我们讲的是预处理&#xff0c;预处理是编译的第一个阶段&#xff0c;在这个阶段&a…

传参的指针,你的值到底变了没?!(有关函数形参修改的另类案例)

我们都知道&#xff0c;想要在函数中修改某个变量的值&#xff0c;传变量本身是没有用的。原因在于不同的函数在不同的空间上&#xff0c;函数的生命周期随着函数的调用而结束&#xff0c;因此在函数内部进行的值操作是不会对函数外的变量产生影响的。所以在函数里面想要修改变…

C语言使用STM32开发板手搓高端家居洗衣机

目录 概要 成品效果 背景概述 1.开发环境 2.主要传感器。 技术细节 1. 用户如何知道选择了何种功能 2.启动后如何进行洗衣 3.如何将洗衣机状态上传至服务器并通过APP查看 4.洗衣过程、可燃气检测、OLED屏显示、服务器通信如何并发进行 小结 概要 本文章主要是讲解如…

C语言-写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

0xaaaaaaaa...等是什么&#xff1f;-CSDN博客https://blog.csdn.net/Jason_from_China/article/details/137179252 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define SWAP(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << …

【C++】C到C++的入门知识

目录 1、C关键字 2、命名空间 2.1 命名空间的定义 2.2 命名空间的使用 2.2.1 加命名空间名称及作用域限定符 2.2.2 使用using将命名空间中某个成员引入 2.2.3 使用using namespace 命名空间名称引入 3、C输入&输出 4、缺省参数 4.1 缺省参数的概念 4.2 缺省参数的…

名字真的会影响我们的职业吗?

名字是我们身份的一部分&#xff0c;人们往往喜欢将一个人名字同一种具体的职业联系在一起&#xff0c;而如果这个人名字看上去更适合一项工作&#xff0c;那么他&#xff08;她&#xff09;就有更多的机会得到这份工作。因此&#xff0c;我们在给福主取名改名时也会与职业特点…

10.Python异常处理

为增强程序的健壮性&#xff0c;我们也需要考虑异常处理方面的内容。例如 &#xff0c;在读取文件时需要考虑文件不存在、文件格式不正确等异常情况。这 就是本章要介绍的异常处理。 1 第一个异常——除零异常 在数学中&#xff0c;任何整数都不能除以0&#xff0c;如果在计算…

PCL 计算点与圆的距离(3D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 3D中的圆可以有圆心、半径以及法线来进行表示,如下图所示: 这里我们假设: Δ = P − C \Delta=P-C Δ

Wasm初上手

总之也是为了扩宽技术面吧。。。我也不知道为什么就想试试了&#xff0c;就酱。 参考阅读&#xff1a;极客时间《WebAssembly入门课》 安装wasm的编译器Emscripten。Emscripten 是一个“源到源”语言编译器工具集&#xff0c;这个工具集可以将 C/C 代码编译成对应 JavaScript 代…

CSS使用clip-path实现元素动画

前言&#xff1a; 在日常开发当中&#xff0c;如果想要开发多边形&#xff0c;一般都需要多个盒子或者伪元素的帮助&#xff0c;有没有一直办法能只使用一个盒子实现呢&#xff1f; 有的&#xff1a;css裁剪 目录 前言&#xff1a; clip-path到底是什么&#xff1f; clip-pa…

【御控物联】 JavaScript JSON结构转换(4):对象To对象——规则属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

赋值语句还能当判断条件?涨芝士了!

赋值和条件看似是C语言中毫不相关的两个概念&#xff0c;虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现&#xff0c;但是现在在学习的过程中&#xff0c;为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己…