深度剖析java类和对象

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【JavaSE_primary】
在这里插入图片描述

在Java中,一切皆对象。

目录

  • 一、类的定义和使用
    • 1.1类的定义格式
    • 1.2定义学生类
  • 二、类的实例化
  • 三、this引用
    • 3.1this引用是什么
    • 3.2this引用特性
  • 四、对象的构造及初始化
    • 4.1如何初始化对象
    • 4.2构造方法
    • 4.3构造方法特性
    • 4.4调用本类当中其它构造方法
    • 4.5默认初始化
    • 4.6就地初始化

一、类的定义和使用

在Java中,我们通过类来描述对象。

类的定义:Java类是面向对象编程中的基本构建模块,用于描述对象的属性(成员变量)和行为(方法)

1.1类的定义格式

Java类的定义格式如下:

[访问修饰符] class 类名 {// 成员变量(属性)// 构造方法// 方法
}

一个类应该有以下几部分组成:类声明、成员变量、成员方法、构造方法、访问修饰符。

1.2定义学生类

class Student{//成员变量public String name;public String gender;public short age;public double score;//方法public void DoClass(){}public void DoHomework(){}public void Exam(){}
}

我们定义类时应该注意一下注意事项:

1.一般一个文件当中只定义一个类
2.main方法所在的类一般要使用public修饰
3.public修饰的类必须要和文件名相同
4.不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

二、类的实例化

我们首先要知道,我们定义一个类时其实就是在计算机当中自定义了一个类型,就像int、double一样,只不过类这个类型时我们自己定义的而已,而int、double这样的类型是Java语言自带的内置数据类型。

有了类这个类型(可以理解为我们自己定义的一种自定义类型)之后,我们就可以利用类这个类型来定义实例(也称对象)了,这个过程就称为类的实例化。

举个例子:
下面有一个Teacher类,请看:

class Teacher{//成员变量或字段public String name;public int age;public int ID;//成员函数public void work(){System.out.println("今天的工作是教学");}public void wages(){System.out.println("本月的工资为10000");}
}

我们现在实力化一个Teacher类对象,请看:

public class Test2 {public static void main(String[] args) {//通过new来实例化一个Teacher对象Teacher t1 = new Teacher();t1.name = "李华";t1.age = 25;t1.ID = 123456;System.out.println(t1.name);System.out.println(t1.age);System.out.println(t1.ID);t1.work();t1.wages();}
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述

关于类的实例化这里有以下几点需要注意:

1.通过new 关键字来实例化一个对象。
2.使用 . 来访问对象中的属性和方法。
3.同一个类可以实例化多个对象。
4.**当成员变量没有赋值的时候,默认值就是其对应的初始值。**即int->0 float->0.0f boolean->false char->'\u0000'

三、this引用

3.1this引用是什么

概念:this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。

下面是日期类对象,请看:

class Date {public int year;public int month;public int day;public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}public void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}
}
public class Test3 {public static void main(String[] args) {//先构造3个日期类对象Date d1 = new Date();Date d2 = new Date();Date d3 = new Date();//对每个对象的成员变量进行赋值d1.setDay(23,8,30);d2.setDay(23,8,31);d3.setDay(23,9,1);//对每个日期类对象进行打印d1.printDate();d2.printDate();d3.printDate();}
}

运行结果如下:
在这里插入图片描述

注意关键字this用于引用当前对象,即调用当前方法的对象。它可以在对象的成员方法中引用当前对象的成员变量和方法。
请看举例:

class MyClass {private int value;public void printValue() {System.out.println(this.value); // 使用this引用当前对象的成员变量}
}

3.2this引用特性

this引用有如下几个特性:

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在成员方法中使用(静态成员方法无法使用)
  3. 在成员方法中,this只能引用当前对象,不能再引用其他对象
  4. this是成员方法第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

四、对象的构造及初始化

4.1如何初始化对象

我们先来看一个问题,如果一个对象没有对其成员变量赋值的话,那能不能打印其成员变量呢?依然是那日期类对象来进行举例:
在这里插入图片描述

运行结果如下:在这里插入图片描述

可以看到这里并没有报错。因为如果我们没有显式的初始化对象的成员变量,那么编译器就会默认将对象的成员变量进行初始化。

4.2构造方法

我们也可以通过构造方法来对对象进行初始化

构造方法概念:构造方法(也称为构造器)是一个特殊的成员方法,构造方法的名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次

请看举例:

//不带参数的构造函数
public Date(){System.out.println("不带参数的构造方法");
}
//带参数的构造函数
public Date(int year,int month,int day){System.out.println("带参数的构造方法");
}

我们要想实例化一个对象,就必须调用构造函数,因为只有调用完构造函数之后,才算真正实例化出了一个对象(调用完构造函数之后对象才算真正意义上的产生)。

另外,构造方法是可以构成重载的,如上(一个带参数、一个不带参数的构造方法)。

4.3构造方法特性

  • 名字必须与类名相同
  • 没有返回值类型,设置为void也不行
  • 当创建对象时由编译器自动调用构造函数,并且在对象的生命周期内只调用一次
  • 如果我们自己写了构造方法(无论是带参数还是不带参数),编译器则不会自己生成构造函数。
  • 当没有显式定义构造方法,编译器会自动为我们生成一个不带参数的构造方法
  • 构造方法支持重载(根据自己需求来提供不同参数的构造方法)
  • 大多数情况下,构造方法用public来进行修饰,特殊场景下需要用private来修饰。

4.4调用本类当中其它构造方法

什么是调用本类当中其它构造方法呢?请看举例:

class Date {public int year;public int month;public int day;//无参构造Date(){//调用本类当中其它构造方法this(23,5,21);//不许放在构造方法里面而且是第一行System.out.println("不带参数的构造方法");}//带参构造Date(int year,int month,int day){System.out.println("带参数的构造方法");}public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;}public void printDate(){System.out.println(this.year + "-" + this.month + "-" + this.day);}
}

this(…)有两点需要注意

  • 必须放在构造方法中且是第一行
  • 不能形成环

4.5默认初始化

默认初始化是指在创建对象时,如果没有显式地对成员变量进行初始化,Java会使用默认值来初始化它们。默认值根据成员变量的类型而定,例如,整型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。默认初始化确保了对象在创建时每个成员变量都有一个初始值。

请看举例:
在这里插入图片描述
运行结果如下:
在这里插入图片描述

4.6就地初始化

就地初始化是指在创建对象时,对成员变量进行显式的初始化。我们可以在对象创建的同时为成员变量赋予特定的值。

请看举例:

public class MyClass {//当然,在这里进行就地初始化也是可以的private int value;private String str;// 就地初始化块{value = 10;str = "Hello";}// 构造方法1public MyClass() {// 存在就地初始化的成员变量的初始化语句}// 构造方法2public MyClass(int value) {// 存在就地初始化的成员变量的初始化语句this.value = value;}
}

解释
MyClass类包含一个就地初始化块,在这个块中对成员变量value和str进行了初始化。在编译期间,编译器会将就地初始化块的内容添加到所有的构造函数中(包括无参构造函数和带参构造函数)。
因此,无论是使用无参构造函数还是带参构造函数创建对象,成员变量value和str都会得到就地初始化块中指定的初始值。

所以,就地初始化后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中。这样可以确保无论使用哪个构造函数创建对象,成员变量都得到了正确的初始化

以上就是本文类和对象的全部内容。

好了,本文到这里就结束了,再见啦友友们!!!
在这里插入图片描述

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

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

相关文章

【ES】笔记-Set集合实践

JS <script>let arr[1,2,3,4,5,4,3,2,1];//1.数组去重let result0[...new Set(arr)];console.log(数组去重${result0});//2.交集let arr2[4,5,6,5,6];let result[...new Set(arr)].filter(item>{let s2new Set(arr2);//4 5 6if(s2.has(item)){return true;}else{retur…

【SpringSecurity】七、SpringSecurity集成thymeleaf

文章目录 1、thymeleaf2、依赖部分3、定义Controller4、创建静态页面5、WebSecurityConfigurerAdapter6、权限相关7、当用户没有某权限时&#xff0c;页面不展示该按钮 1、thymeleaf 查了下读音&#xff0c;leaf/li:f/&#xff0c;叶子&#xff0c;前面的单词发音和时间time一…

基于swing的中国象棋java小游戏jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、主要功能 可以实现双人下棋&#xff0c;可以悔棋&#xff0c;可…

微信小程序请求接口返回的二维码(图片),本地工具和真机测试都能显示,上线之后不显示问题

请求后端接口返回的图片&#xff1a; 页面展示&#xff1a; 代码实现&#xff1a; :show-menu-by-longpress"true" 是长按保存图片 base64Code 是转为base64的地址 <image class"code" :src"base64Code" alt"" :show-menu-by-long…

android:控件TextView

一、系统学习Android控制键TextView&#xff0c;我的笔记里面有尝试学着使用自定义控件。 二、具体内容 1.如果在代码中给textView赋值&#xff0c;在xml中也给textView赋值了最后运行出来的结果显示代码中赋的值。因此得出结论&#xff0c;代码中的赋值会覆盖xml所附的值。 …

21.CSS的动态圆形进度条

效果 源码 <!doctype html> <html><head><meta charset="utf-8"><title>Animated Circular Progress | CSS Only</title><link rel="stylesheet" href="style.css"></head><body><di…

Java“牵手”1688商品列表数据,关键词搜索1688商品数据接口,1688API申请指南

1688商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取1688商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

【微服务部署】06-日志集成

文章目录 1. EFK日志三件套集成1.1 核心组件1.2 部署 2. Exceptionless日志系统2.1 Exceptionless核心特性2.2 Exceptionless部署文件2.3 K8s中使用Exceptionless 1. EFK日志三件套集成 1.1 核心组件 Elasticsearch&#xff08;存储&#xff09;Fluentd&#xff08;收集器&am…

jmeter+nmon+crontab简单的执行接口定时压测

一、概述 临时接到任务要对系统的接口进行压测&#xff0c;上面的要求就是&#xff1a;压测&#xff0c;并发2000 在不熟悉系统的情况下&#xff0c;按目前的需求&#xff0c;需要做的步骤&#xff1a; 需要有接口脚本需要能监控系统性能需要能定时执行脚本 二、观察 >针…

4.9 已建立连接的TCP,收到SYN会发生什么?

1. 客户端的 SYN 报文里的端口号与历史连接不相同 此时服务端会认为是新的连接要建立&#xff0c;于是就会通过三次握手来建立新的连接。 旧连接里处于 Established 状态的服务端最后会怎么样呢&#xff1f; 服务端给客户端发消息了&#xff1a;客户端连接已被关闭&#xff…

理解底层— —Golang的log库,二开实现自定义Logger

理解底层— —Golang的log库&#xff0c;实现自定义Logger 1 分析实现思路 基于golang中自带的log库实现&#xff1a;对日志实现设置日志级别&#xff0c;每天生成一个文件&#xff0c;同时添加上前缀以及展示文件名等 日志级别&#xff0c;通过添加prefix&#xff1a;[INFO]、…

初探---Qt

目录 一、介绍Qt 二、软件安装 三、QT工具介绍 四、Assistant帮助文档的使用 五、设计师界面的介绍 ​编辑 六、QT工程项目各文件初始程序的介绍 1> 配置文件&#xff1a;.pro文件 2> 头文件 3> 源文件 4> 主程序 5> 各文件之间调用方式 七、第一个…

24V输入防反接电路

#24V输入防反接电路 &#xff08;部分图片参考东沃电子&#xff09; 用于对输入的24V电源进行防反接及ESD保护&#xff0c;可用于EMC测试实验的电源输入保护&#xff0c;额定电流3A&#xff0c;后级电路最大损坏电压为48V。 1.24V输入防反接原理图 如上图所示&#xff0c;24V_…

Android RecyclerView 之 列表宫格布局的切换

前言 RecyclerView 的使用我就不再多说&#xff0c;接下来的几篇文章主要说一下 RecyclerView 的实用小功能&#xff0c;包括 列表宫格的切换&#xff0c;吸顶效果&#xff0c;多布局效果等&#xff0c;今天这篇文章就来实现一下列表宫格的切换&#xff0c;效果如下 一、数据来…

C++八股记录

C内存管理 C中&#xff0c;内存分成5个区。 栈&#xff1a;函数内局部变量&#xff1b;自动管理&#xff0c;效率高&#xff0c;但空间较小&#xff1b; 堆&#xff1a;new分配的内存块&#xff1b;手动管理&#xff0c;效率低&#xff0c;但空间大&#xff1b; 自由存储区&…

【数据结构与算法 模版】高频题刷题模版

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【】&#xff0c;使用【】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&#xff1a;目标公…

实现带头双向循环链表

&#x1f308;带头双向循环链表 描述&#xff1a;一个节点内包含两个指针&#xff0c;一个指向上一个节点&#xff0c;另一个指向下一个节点。哨兵位指向的下一个节点为头节点&#xff0c;哨兵位的上一个指向尾节点。 结构优势&#xff1a;高效率找尾节点&#xff1b;高效率插入…

设计模式——装饰器模式

装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装。 装饰器模式通过将对象包装在装饰器类中&#xff0c;以便动态…

04架构管理之分支管理实践-一种git分支管理最佳实践

专栏说明&#xff1a;针对于企业的架构管理岗位&#xff0c;分享架构管理岗位的职责&#xff0c;工作内容&#xff0c;指导架构师如何完成架构管理工作&#xff0c;完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作&#xff0c;专栏名称&#xff1a;架构管理…

【数据结构】二叉数的存储与基本操作的实现

文章目录 &#x1f340;二叉树的存储&#x1f333;二叉树的基本操作&#x1f431;‍&#x1f464;二叉树的创建&#x1f431;‍&#x1f453;二叉树的遍历&#x1f3a1;前中后序遍历&#x1f4cc;前序遍历&#x1f4cc;中序遍历&#x1f4cc;后续遍历 &#x1f6eb;层序遍历&am…