Java---类和对象第一节

目录

1.面向对象初步认识

1.1什么是面向对象

1.2面向对象和面向过程的区别

2.类的定义和使用

2.1简单认识类

2.2类的定义格式

2.3类的实例化

2.4类和对象的说明

3.this关键字

3.1访问本类成员变量

3.2调用构造方法初始化成员变量

3.3this引用的特性

4.对象的构造以及初始化

4.1就地初始化与默认初始化

4.2构造方法

4.2.1默认构造方法

4.2.2构造方法的特性:

4.2.3构造方法中,通过this调用其他构造方法


1.面向对象初步认识

1.1什么是面向对象

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

1.2面向对象和面向过程的区别

传统洗衣服:

传统洗衣服注重的是面向过程,也就是按照步骤一步一步实现,少一个步骤都不行

每一种衣服鞋子清洗的方式都不同,处理起来就比较麻烦

如果我们按这种方式去写代码,后期对代码的扩展和维护就比较麻烦

现代洗衣服:

现代洗衣服方式中总共有4个对象人,衣服,洗衣液,洗衣机

洗衣服的过程:人将衣服和洗衣液放进洗衣机,启动洗衣机

在整个洗衣服的过程中,人,衣服,洗衣液,洗衣机这4个对象交互完成了洗衣服这件事,而人并不需要关系衣服是怎么被搓干净和拧干净的

以面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。

注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。

2.类的定义和使用

2.1简单认识类

类是对一个实物(对象)的属性以及功能进行描述的

对比于现实生活中产品的说明书

在这个说明书里有产品的属性:产品名称,产品部件,型号等等

产品的功能:使用方法,安装,拆卸,清洁

2.2类的定义格式

java中定义一个类需要用到class关键字

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

类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类 具有哪些功能,称为类的成员方法。

定义一个洗衣机的类

class Washer{public String name;  //名称public int size;     //大小public String model; //型号public String color; //颜色public void function1(){     //洗衣功能System.out.println("洗衣功能");
}public void function2(){     //脱水功能System.out.println("脱水功能");
}
}

在行业里,类名一般采用大驼峰的命名规则

2.3类的实例化

类相当于一份说明书,我们要完成某件事就需要一个这个类描述的实物来帮我们进行完成

当我们了解了这个类的功能和用途,我们就需要“买”这个类对应的产品,而“买”这个类对应的产品就叫类的实例化

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

举例:

创建一个洗衣机类的对象

类名 对象名=new 类名();
Washer washer=new Washer();

这样实例化一个对象,washer就相当于我们买回来的那个产品了

注意事项:

1.new 关键字用于创建一个对象的实例.

2.使用 . 来访问对象中的属性和方法.

3.同一个类可以创建对个实例

2.4类和对象的说明

1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.

2. 类是一种自定义的类型,可以用来定义变量.

3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

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

对比一下:

3.this关键字

3.1访问本类成员变量

class Student{private String name;private int age;private String id;public Student(String name,int age,String id){name=name;age=age;id=id;}public void show(){System.out.println("我是"+name+",今年"+age+"岁了,我的id是"+id);}
}public class Test1 {public static void main(String[] args) {Student student=new Student("小明",18,"2024511");student.show();}
}

先来看看这段代码它的输出结果

我相信你的第一反应应该是:我是小明,今年18岁了,我的id是2024511;

输出结果是我是null,今年0岁了,我的id是null;

解释:

在这下面这段代码中

  public Student(String name,int age,String id){name=name;age=age;id=id;}

我们认为左边的name,age,id是成员变量,但实际上在这段代码中左边的name,age,id是局部变量,此时局部变量给局部变赋值,没有给成员变量赋值,成员变量的值没有改变,依然是默认值

然而当构造方法中的形参名和成员变量名不相同时,就不会出现以上情况

class Student{private String name;private int age;private String id;public Student(String n,int a,String i){name=n;age=a;id=i;}public void show(){System.out.println("我是"+name+",今年"+age+"岁了,我的id是"+id);}
}public class Test1 {public static void main(String[] args) {Student student=new Student("小明",18,"2024511");student.show();}

输出结果是:我是小明,今年18岁了,我的id是2024511

想要解决形参名与成员变量名相同时给成员变量赋值的问题就需要使用this关键字,this关键字表示本类中的成员变量和成员方法

  public Student(String name,int age,String id){this.name=name;this.age=age;this.id=id;}

加上this就表示本类中的成员变量

在成员变量和局部变量重名时,优先使用局部变量,也就是就近原则。

3.2调用构造方法初始化成员变量

class Student{private String name;private int age;private String id;public Student(){this("haha",12,"202451101");}public Student(String name,int age,String id){this.name=name;this.age=age;this.id=id;}public void show(){System.out.println("我是"+name+",今年"+age+"岁了,我的id是"+id);}
}

在不带参数的构造方法中初始化成员变量,用this调用带三个参数的构造方法,直接在this后面的括号中填写对应的参数就行

在构造方法中使用this调用其他构造方法对成员变量进行初始化时this语句必须放在该构造方法的第一行

3.3this引用的特性

1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

2. this只能在"成员方法"中使用

3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this负责来接收 在代码层面来简单演示--->注意:下图右侧中的Date类也是可以通过编译的

4.对象的构造以及初始化

4.1就地初始化与默认初始化

在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败。

   public static void main(String[] args) {int a;System.out.println(a);}
//运行结果:java: 可能尚未初始化变量a

所以在创建局部变量时需要在使用变量之前对变量进行初始化

但是在创建类时,对类进行实例化后调用成员变量时我们会发现,编译器没有报错,这是为什么呢?

class Date{private int year;private int month;private int day;
private String zodiac;public void setDate(int y, int m, int d) {year = y;month = m;day = d;}public void show(){System.out.println("year:"+year+" month:"+month+" day: "+day+" zodiac"+zodiac);}
}public class Test01 {public static void main(String[] args) {Date date=new Date();date.show();}
}

这是因为我们在实例化对象时,编译器默认的给我成员变量赋值了

当然我们不需要默认初始化的值可以就地初始化,也就是创建类的时候就给成员变量赋值

class Date{private int year=2024;private int month=5;private int day=12;
}

4.2构造方法

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

4.2.1默认构造方法

class Date{private int year=2024;private int month=5;private int day=12;// 构造方法:// 名字与类名相同,没有返回值类型,设置为void也不行// 一般情况下使用public修饰// 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次public Date(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}public void show(){System.out.println("year:"+year+" month:"+month+" day: "+day);}
}

当我们实例化对象时下面这样写会报错

这是为什么呢,我们没写构造方法前是对的,反而写了就错了。难道我们写的代码有问题?

这是因为编译器有一个就穷不救急的性格,当我们没有构造方法时,他会提供一个默认的构造方法,当我们写了构造方法,他就不提供默认的构造方法了,如果想使用默认的构造方法就必须自己在类里面写一个

  public Date(){}

添加一个这样的类就行了,方法体什么都不写

4.2.2构造方法的特性:

1. 名字必须与类名相同

2. 没有返回值类型,设置为void也不行

3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)

4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)

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

上述两个构造方法:名字相同,参数列表不同,因此构成了方法重载。

4.2.3构造方法中,通过this调用其他构造方法

在构造方法中,可以通过this调用其他构造方法来简化代码

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

在构造方法中使用this调用其他构造方法时,要注意在这个构造方法中方法的重载问题

public Date(){}public Date(){
this(1900,2,12);}

比如这样,我们写的默认构造方法和this的构造方法形参一样,编译器就会报错

注意:

1.this在构造方法中必须是第一条语句

2.this调用其他构造方法时不能成环

public Date(){this(1900,1,1);
}public Date(int year, int month, int day) {this();
}

无参构造器调用三个参数的构造器,而三个参数构造器有调用无参的构造器,形成构造器的递归调用
编译报错:Error:(19, 12) java: 递归构造器调用

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

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

相关文章

MES系统与WMS集成方法(满分100学习资料)

导语 大家好,我是智能仓储物流技术研习社的社长,老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载 这份文件是关于MES系…

运用分支结构与循环结构写一个猜拳小游戏

下面我们运用平常所学的知识来写一个小游戏,这样能够加强我们学习的趣味性,并且能够更加的巩固我们所学的知识。 游戏代码: 直接放代码:(手势可以使用数字来代替,比如0对应石头,1对应剪刀&…

Sass深度解析:性能优化的秘密

首先,这篇文章是基于笔尖AI写作进行文章创作的,喜欢的宝子,也可以去体验下,解放双手,上班直接摸鱼~ 按照惯例,先介绍下这款笔尖AI写作,宝子也可以直接下滑跳过看正文~ 笔尖Ai写作:…

Linux的基础IO:软硬连接 动态库 静态库

目录 软硬连接 硬链接的作用 静态库 制作静态库 安装自定义静态库 动态库 制作动态库 协助OS查找动态库的五种方法 总结 动态库加载 软硬连接 创建硬链接指令:ln 目标文件 链接者 创建软链接指令:ln -s 目标文件 链接者 删除链接指令&…

【管理咨询宝藏96】企业数字化转型的中台战略培训方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏96】企业数字化转型的中台战略培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 数字化转型是指&…

苹果电脑MAC清理系统空间工具CleanMyMacX4.15.3中文版下载

苹果电脑以其出色的性能、优雅的设计和高效的操作系统而受到许多用户的喜爱。然而,随着时间的推移和使用量的增加,你可能会发现你的Mac开始变得缓慢和响应迟缓。这通常是因为硬盘空间被大量占用,影响了系统的整体性能。幸运的是,有…

03.Linux文件操作

1.操作系统与Linux io框架 1.1 io与操作系统 1.1.1 io概念 io 描述的是硬件设备之间的数据交互,分为输⼊ (input) 与输出 (output)。 输⼊:应⽤程序从其他设备获取数据 (read) 暂存到内存设备中;输出:应⽤程序将内存暂存的数据…

蛋糕店做配送小程序的作用是什么

蛋糕烘焙除了生日需要,对喜吃之人来说往往复购率较高,除线下实体店经营外,更多的商家选择线上多种方式获客转化、持续提高生意营收,而除了进驻第三方平台外,构建品牌私域自营店铺也同样重要。 运用【雨科】平台搭建蛋…

zookeeper安装集群模式

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 ZooKeeper是一个分…

【大数据】分布式数据库HBase下载安装教程

目录 1.下载安装 2.配置 2.1.启动hadoop 2.2.单机模式 2.3.伪分布式集群 1.下载安装 HBase和Hadoop之间有版本对应关系,之前用的hadoop是3.1.3,选择的HBase的版本是2.2.X。 下载地址: Index of /dist/hbase 配置环境变量&#xff1a…

Codigger:Vim的革新者,提升开发体验和功能性

深知Vim在编程和文本编辑领域的卓越地位,因此,在设计和开发过程中,Codigger始终将保留Vim的核心功能和高度定制能力作为首要任务。然而,Vim的复杂性和高度定制性也让很多新用户望而却步。为了降低这种使用门槛,Codigge…

Adobe Premiere Pro安装

一、安装包下载 链接:https://pan.baidu.com/s/1aYqTSQQutDguKYZE-yNHiw?pwd72l8 提取码:72l8 二、安装步骤 1.鼠标右击【Pr2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Pr2024(64bit)】。 2.打开…

基于大模型的idea提炼:围绕论文和引用提炼idea之ResearchAgent

前言 对本博客比较熟悉的朋友知道,我司论文项目组正在基于大模型做论文的审稿(含CS英文论文审稿、和金融中文论文审稿)、翻译,且除了审稿翻译之外,我们还将继续做润色/修订、idea提炼(包含论文检索),是一个大的系统,包…

comfyui安装deforum启动不了,多半是ffmpeg的问题

如果报错中出现imageio 和 ffmpeg 的字样,去装requirement也没啥用 这里最好到cmd中,进入comfyui的python环境,运行以下两句: import imageio imageio.plugins.ffmpeg.download() 图例: 如果节点不报错了&#xff0…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制,以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统,不仅具有全球性、全…

codeforces round 149 div2(a,b,c,d)

手速场&#xff0c;可惜我傻逼卡 c c c了 题目链接 A #include<bits/stdc.h>using namespace std;#define int long long #define PII pair<int,int>void solve() {int n,k;cin>>n>>k;if(n<k){cout<<1<<\n;cout<<n<<\n;}…

[机器学习-05] Scikit-Learn机器学习工具包进阶指南:协方差估计和交叉分解功能实战【2024最新】

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Elasticsearch查看集群信息,设置ES密码,Kibana部署

Elasticsearch查看集群信息&#xff0c;设置ES密码&#xff0c;Kibana部署 查看集群信息查看节点信息查看集群健康状态查看分片信息查看其他集群信息 Kibana部署安装设置ES密码 查看集群信息 查看节点信息 curl http://127.0.0.1:9200/_cat/nodes?v 参数说明&#xff1a; ip…

pyqt颜色变换动画效果

pyqt颜色变换动画效果 QPropertyAnimation介绍颜色变换效果代码 QPropertyAnimation介绍 QPropertyAnimation 是 PyQt中的一个类&#xff0c;它用于对 Qt 对象的属性进行动画处理。通过使用 QPropertyAnimation&#xff0c;你可以平滑地改变一个对象的属性值&#xff0c;例如窗…

2024年深圳市教师招聘报名流程(建议电脑)

2024年深圳市教师招聘报名流程&#xff08;建议电脑&#xff09; #深圳教师招聘 #深圳教招 #深圳教师招聘考试 #教师招聘报名照片处理 #深圳教师招聘笔试