类和对象(一)

类和对象(一)

  • 一:类的实例化
    • 1:什么是实例化
    • 2:类和对象的关系
  • 二:类的初始化
    • 1:就地初始化
    • 2:默认初始化
  • 三:this引用
    • 1:先看一个日期类的例子
    • 2:什么是this引用
    • 3:this引用的特点:
    • 4:this 的使用
  • 四:构造方法
    • 1:构造方法的概念:
    • 2:构造方法的作用:
    • 3:构造方法的特点:

一:类的实例化

1:什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的数据类型,与int,double类似,只不过int,double是java语言自带的内置类型,而类是我们自己自定义了一种新的类型。
用类类型创建对象的过程,叫作类的实例化。在java中采用new 关键字完成对类的实例化。
下面我将举个例子,创建一个Dog类来解释一下。

class Dog{//定义了一个Dog类public String name;//定义Dog类的name成员变量public int age;//定义Dog类的age成员变量public String color;//定义Dog类的color成员变量public void barks(){//定义Dog类的barks成员方法System.out.println(name+"摇尾巴");}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();//通过new关键字创建了一个Dog类dog.name="阿黄";//通过.来访问对象中的属性dog.barks();//通过.来访问对象中的方法}
}

在这里插入图片描述

2:类和对象的关系

1:类只是一个模型一样的东西,是对对象的描述,比如是那么的例子,Dog类中有成员变量name,age,color,就像狗有名字,年龄,颜色,我们把狗的这些属性抽取出来,定义一个类,用这个类来描述狗这个实体。
2:类是一种自定义类型,可以用来定义变量。
3:一个类可以实例化多个对象,实例化的对象会占用内存空间。

二:类的初始化

1:就地初始化

就地初始化就是自己根据实际问题,进行初始化。

方法一:

class Dog{//定义了一个Dog类public String name;//定义Dog类的name成员变量public int age;//定义Dog类的age成员变量public String color;//定义Dog类的color成员变量public void barks(){//定义Dog类的barks成员方法System.out.println(name+"摇尾巴");}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();/*初始化Dog的成员变量*/dog.name="阿黄";dog.age=3;dog.color="黄色";}
}

方法二:

class Dog{//定义了一个Dog类/*在定义Dog类的同时对其初始化*/public String name="阿黄";public int age=3;public String color="黄色";public void barks(){//定义Dog类的barks成员方法System.out.println(name+"摇尾巴");}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();}
}

2:默认初始化

类中的成员变量不像局部变量,不初始化就不可以使用,类在实例化对象的时候,就默认给类的成员变量进行初始化了。int 类型的数据默认值是0,String类型的默认值是0;举例说明一下(哈哈)。

class Dog{//定义了一个Dog类/*在定义Dog类的同时对其初始化*/public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println(name+"摇尾巴");}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();System.out.println("姓名: "+dog.name+" 年龄: "+dog.age+" 颜色: "+dog.color);}
}

在这里插入图片描述

三:this引用

1:先看一个日期类的例子

 class  Date{public int year;public int month;public int day;public void setDay(int y,int m,int d){//三个形参:year,month,dayyear=y;month=m;day=d;}public void printDate(){System.out.println("year:"+year+" month:"+month+" day:"+day);}}
public class Test {public static void main(String[] args) {Date date =new Date();date.setDay(2023,11,4);//实参date.printDate();}
}

看一下输出:
在这里插入图片描述
当我们的形参名和成员变量名相同时:

class  Date{public int year;public int month;public int day;public void setDay(int year,int month,int day){//三个形参:year,month,dayyear=year;month=month;day=day;}public void printDate(){System.out.println("year:"+year+" month:"+month+" day:"+day);}}
public class Test {public static void main(String[] args) {Date date =new Date();date.setDay(2023,11,4);//实参date.printDate();}
}

在这里插入图片描述为什么结果全变成默认值了呢?
这是因为当形参名和成员变量名相同的时候,赋值语句是给形参赋值,而不是给类的成员变量赋值。
再看一段代码:

 class  Date{public int year;public int month;public int day;public void setDay(int year,int month,int day){//三个形参:year,month,daythis.year=year;this.month=month;this.day=day;}public void printDate(){System.out.println("year:"+year+" month:"+month+" day:"+day);}}
public class Test {public static void main(String[] args) {Date date =new Date();date.setDay(2023,11,4);//实参date.printDate();}
}

输出的结果是:
在这里插入图片描述
这里的结果又正常了,这是为什么呢?视力好的小伙伴可能发现了在赋值语句处,出现了:this.。this.叫作this引用。

2:什么是this引用

this引用指的是对当前对象的引用,使用this.就表示对当前对象的成员方法操作。

3:this引用的特点:

1:this引用的类型:调用哪个对象,类型就是哪个对象
比如上面的Date类,这里的this引用的类型就是Date.
2:this只能在成员方法中使用。
3:this是成员方法中的第一个隐藏的参数,编译器会自动传递。

class  Date{public int year;public int month;public int day;public void setDay(Date this,int year,int month,int day){//加上Date this编译器并不会报错this.year=year;this.month=month;this.day=day;}public void printDate(){System.out.println("year:"+year+" month:"+month+" day:"+day);}}
public class Test {public static void main(String[] args) {Date date =new Date();date.setDay(2023,11,4);//实参date.printDate();}
}

4:this 的使用

public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println("name:"+name+"摇尾巴!!");//this.成员变量,访问成员变量this.fun();//this.成员方法,访问成员方法}public void fun(){System.out.println("哈哈");
}
}
public class Test {public static void main(String[] args) {Dog dog=new Dog();dog.barks();}
}

四:构造方法

1:构造方法的概念:

构造方法是一个特殊的的成员方法,方法名必必须和类名相同,没有返回值,在创建对象的时候,编译器会自动调用,如果我们不添加任何的构造方法,编译器也会提供一个不带参数的构造方法,所以构造方法至少有一个。
但如果一个类提供了任意一种的构造方法,编译器都不会再提供不带参数的构造方法。
在大多数的情况下,构造方法使用public来修饰。

2:构造方法的作用:

构造方法的作用就是对对象中的成员进行初始化,但不负责给对象开辟空间。

实例化对象的时候,一定会调用合适的构造方法(根据参数列表调用)
对象的产生有2步:
1:为对象分配内存,
2:调用合适的构造方法。

3:构造方法的特点:

1:方法名必须和类名相同;
2:没有返回值类型,返回类型为void也不行;
3:创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次;
4:构造方法可以重载。
5:在构造方法中,可以通过this来调用其他构造方法,当this这条语句必须放在方法的第一行。

class Dog{//定义了一个Dog类public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println("name:"+name+"摇尾巴!!");}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();//在new对象,也就是在创建对象的时候,调用构造方法,// 此时我们没有提供构造方法,编译器会提供一个不带参数的构造方法dog.barks();}
}
class Dog{//定义了一个Dog类public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println("name:"+name+"摇尾巴!!");}//提供带3个参数的构造方法public Dog(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();//我们提供了一个带3个参数的构造方法,编译器不会再提供不带参数的构造方法,// 所以编译器会报错dog.barks();}
}

构造方法的正确使用:

class Dog{//定义了一个Dog类public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println("name:"+this.name+"摇尾巴!!");//this.成员变量this.fun();//this.成员方法}//提供带3个参数的构造方法public Dog(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}//不带参数的构造方法public Dog() {}public void fun(){System.out.println("哈哈");
}
}
public class Test {public static void main(String[] args) {Dog dog=new Dog("来福",3,"黄色");//传入三个参数,所以会调用带三个参数的构造方法dog.barks();}
}

在构造方法中调用其他的构造方法:

class Dog{//定义了一个Dog类public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println(this.name+"摇尾巴!!");//this.成员变量}//提供带3个参数的构造方法public Dog(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}//不带参数的构造方法public Dog() {this("来福",3,"黄色");//通过this关键字来调用带三个参数的构造方法,请必须放在方法的第一行}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();//调用不带参数的构造方法dog.barks();}
}

构造方法不能形成环:

class Dog{//定义了一个Dog类public String name;public int age;public String color;public void barks(){//定义Dog类的barks成员方法System.out.println(this.name+"摇尾巴!!");//this.成员变量}//提供带3个参数的构造方法public Dog(String name, int age, String color) {this();//调用不带参数的构造方法this.name = name;this.age = age;this.color = color;}//不带参数的构造方法public Dog() {this("来福",3,"黄色");//通过this关键字来调用带三个参数的构造方法,请必须放在方法的第一行}}
public class Test {public static void main(String[] args) {Dog dog=new Dog();//调用不带参数的构造方法dog.barks();}
}

在这个例子中,在不带参数的构造方法中调用带3个参数的构造方法,然后又在带3个参数的构造方法中调用不带参数的构造方法,你调它,它调你,永远结束不了,所以不允许这样使用。

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

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

相关文章

基于单片机的智能饮水机系统

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、系统设计方案分析2.1 设计功能及性能分析2.2设计方案分析 二、系统的硬件设计3.1 系统设计框图系统软件设计4.1 总体介绍原理图 四、 结论 概要 现在很多学校以及家庭使用的饮水机的功能都是比较单一的&#…

【Mac开发环境搭建】JDK安装、多JDK安装与切换

文章目录 JDK下载与安装下载安装 配置环境变量安装多个JDK共存 JDK下载与安装 下载 Oracle官网提供了非常多个版本的JDK供下载,可以点击如下链接重定向到JDK下载页面 ORACLE官网JDK下载 安装 下面的官方文档可以点开收藏到浏览器的收藏夹,这样后续在开…

高性能三防工业平板电脑 防摔防爆电容屏工控平板

HT1000是一款高性能工业三防平板,10.1英寸超清大屏,厚度仅14.9mm,超薄机身,可轻松插入袋中,方便携带,搭载8核2.0GHz高性能CPU,行业领先的Android 11.0,设备性能大幅提升,…

leetcode2054

leetcode 2054 #include <iostream> #include <vector> #include <tuple> #include <algorithm>using namespace std;struct Event {// 时间戳int ts;// op 0 表示左边界&#xff0c;op 1 表示右边界int op;int val;Event(int _ts, int _op, int _v…

本周三商店更新:多款套装下线,四款升级武器带异色皮肤返厂

本周三将迎来26.2版本更新与11商店大更新&#xff0c;版本更新可点击26.2版本更新公告进行查看&#xff0c;这里不一一赘述了&#xff0c;下面大概罗列一下商店更新&#xff0c;有皮肤下架&#xff0c;大家还能趁最后时间入手&#xff0c;最重要的是四款升级武器返厂咯。 危险玩…

Git 安全警告修复手册:解决 `fatal: detected dubious ownership in repository at ` 问题 ️

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Unity meta的一些常见属性

Unity会项目文件夹中的每个文件分配一个同名后缀为.meta的文件。 我们可以将meta文件理解不同文件之间的桥梁&#xff0c;通过它引擎可以管理不同文件之间的依赖关系。 使用TXT文本文件打开之后&#xff0c;大致属性如下&#xff1a; 其中常用的属性有guid、 assetBundleName以…

MYSQL:主从复制简述

&#xff08;图片来自于马士兵教育&#xff09; 从节点的I/O线程会请求主节点的Binlog&#xff0c;并且将得到的Binlog写入到本地relay_log&#xff08;中继日志&#xff09;中&#xff0c;SQL线程会读取realy_log中的日志文件&#xff0c;并且解析成SQL逐行执行。 主库会生成…

C-DS二叉树_另一棵树的子树

Description 给你两棵二叉树tree1和tree2&#xff0c;检验tree1中是否包含和tree2具有相同结构和结点值的子树。如果存在&#xff0c;输出true&#xff1b;否则&#xff0c;输出false。 Input 第一行输入t&#xff0c;表示有t个测试样例。 第二行首先输入n1&#xff0c;接着…

WPS表格无法粘贴信息,原因是复制区域与粘贴区域形状不同

WPS表格无法粘贴信息&#xff0c;原因是复制区域与粘贴区域形状不同 问题描述 我是选中了一整列&#xff0c;复制&#xff0c;但是无法粘贴到另一个EXCEL表格中 原因 首先我的数据量很大&#xff0c;有20万行&#xff0c;然后需要复制的EXCEL是.xls格式的&#xff0c;.xls格…

【UART】UART QA

UART常见知识点整理 定义&#xff1a;Universal Asynchronous Receiver/Transmitter - 通用异步收发传输器。 特点&#xff1a;速率不快、可全双工、结构上一般由波特率产生器、UART发送器、UART接收器组成&#xff0c;硬件2-3线。 线&#xff1a;RXD&#xff0c;TXD&#xff0…

SonarQube的使用心得

一、使用背景&#xff1a; SonarQube 是一个用于代码质量管理的开源平台&#xff0c;用于管理源代码的质量。 通过插件形式&#xff0c;可以支持包括 java, C#, C/C, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。 Sonar可以从以下七个维度…

LSTM缓解梯度消失问题

关于LSTM https://easyai.tech/ai-definition/lstm/ https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21 为何LSTM缓解梯度消失问题 为什么LSTM会减缓梯度消失&#xff1f; - 知乎 LSTM引入长短期记忆&#xf…

【STL】:list的模拟实现

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关list的模拟实现&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据…

【Linux】编译安装nginx,手写service配置文件,深度理解systemd控制管理服务底层原理

目录 一、了解服务 1、服务的本质 2、centos7的systemd的服务 3、service unit file配置文件的组成以及掌握常用选项 4、关于systemd管理的命令学习 5、运行级别 二、编译安装nginx&#xff0c;以及手写service配置文件&#xff0c;请看注释 ​编辑 一、了解服务 1、服…

【C语言】函数的系统化精讲(二)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 &#x1f308;作者寄语 &#x1f308;&#xff1a; 小菜鸟的力量不在于它的体型&#xff0c;而在于它内心的勇气和无限的潜能&#xff0c;只要你有决心&#xff0c;就没有什么事情是不可能的…

AI系统ChatGPT程序源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

【计算机网络】数据链路层-MAC和ARP协议

文章目录 1. 认识以太网2. MAC协议MAC帧的格式MAC地址和IP地址的区别MTU 3. 局域网通信原理碰撞检测和避免 4. ARP协议ARP数据报的格式ARP缓存 1. 认识以太网 网络层解决的是跨网络点到点传输的问题&#xff0c;数据链路层解决的是同一网络中的通信。 数据链路层负责在同一局域…

SpringBoot + Vue2项目打包部署到服务器后,使用Nginx配置SSL证书,配置访问HTTP协议转HTTPS协议

配置nginx.conf文件&#xff0c;这个文件一般在/etc/nginx/...中&#xff0c;由于每个人的体质不一样&#xff0c;也有可能在别的路径里&#xff0c;自己找找... # 配置工作进程的最大连接数 events {worker_connections 1024; }# 配置HTTP服务 http {# 导入mime.types配置文件…

聚观早报 |小鹏P7i 550版上市;零一万物发布大模型

【聚观365】11月7日消息 小鹏P7i 550版上市 零一万物发布大模型 vivo X100现身Geekbench 小马智行与丰田联合发布Robotaxi 王云鹏出任百度IDG负责人 小鹏P7i 550版上市 小鹏P7i 550版正式上市&#xff0c;新车共推出550 Pro、550 Max 两款新版型&#xff0c;售价分别为22…