Java初识:类和对象(上)
创始人
2024-04-05 18:59:20
0

文章目录

  • 学习目标
  • 1.面向对象的初步认识
    • 1.1认识面向对象
    • 1.2 区分面向对象和面向过程
  • 2.类当定义与使用
    • 2.1认识简单类
    • 2.2 类的定义格式
    • 2.3 小试身手-定义类的小练习
  • 3.类的实例化
    • 3.1 什么是实例化
    • 3.2 实例化注意事项:
    • 3.3 类和对象说明
  • 4. this 引用
    • 4.1为什么要用this
    • 4.2 this引用的特性
  • 5. 对象的构造及初始化
    • 5. 1 如何初始化对象
    • 5.2 构造方法
      • 5.2.1构造方法特性
      • 5.2.2this 调用构造方法
    • 5.3 默认初始化
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


学习目标

本篇我们来了解Java中的类和对象,这里与C语言会有区别,我们不再注重过程,而倾向于对象。本篇将认识面向对象,类的定义,对象的实例化,成员方法和变量的使用,对象初始化过程等。文章可能有错误,如有发现,请在评论区指正,让我们一起交流,共同进步!


本文开始

1.面向对象的初步认识

1.1认识面向对象

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

1.2 区分面向对象和面向过程

面向过程:关注的是过程
对于实现一个程序,我们需要思考,怎么实现,需要准备变量,实现选择或者循环等操作。
例如冒泡排序,我们需要考虑一共需要交换几趟排序,每趟我们需要实现几次交换,在这之前还需要考虑设几个变量等等细节操作,与思考过程。
示例:洗衣过程,考虑过程,细节操作。

在这里插入图片描述

面向对象: 实体(对象)之间协作完成的
我们只需要对象之间的交互完成即可。不需要关系如何具体实现操作的过程,我们只需要调用对象方法即可;
例如:我们需要实现排序,我们只需要知道Arrays这个类里面有sort(排序)方法即可;排序方法直接使用,而不是像C语言一样一步步考虑细节,与过程;
示例:直接把衣服洗衣粉放入洗衣机即可,不用考虑过程。

在这里插入图片描述

2.类当定义与使用

2.1认识简单类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥)。

例如:电脑
属性:产品品牌,型号,产品重量,外观尺寸,颜色等
功能:上网,视频等

2.2 类的定义格式

在Java中定义类是需要用到class关键字,语法格式:

class: 为定义类的关键字,Test为类的名字,{ }中为了的主体
属性:描述类的成员
方法:类具有哪些功能

class Test {filed;// 字段、属性、成员变量method; // 行为 、成员方法
}

【注】类名采用大驼峰
面向对象第一步,学会定义类。

2.3 小试身手-定义类的小练习

定义一个学生类:

public class Student {public String name;//学生的属性(成员变量)public String gender;public short age;public void DoHomeWork() {//学生的行为(成员方法)System.out.println("写作业!");}
}

【注】
1.一般我们在一个文件中只定义一个类
2.mian方法所在的类一般使用public修饰(public class)
3.public 修饰的类必须与文件名相同
4.不用轻易修改public 修饰的类

3.类的实例化

3.1 什么是实例化

我们想要实例化对象,就需要获取对象,而获取对象就需要得到类,通过类来定义实例化。而用类类型创建对象的过程,称为类的实例化。
在java中采用new关键字,配合类名来实例化对象。
new Person =>new 的对象

在这里插入图片描述

【注】
1.new关键字用于创建一个对象的实例(每个对象都有自己的成员,通过引用访问成员)
2.使用点(.)来访问对象中的属性和方法
3.同一个类可以创建多个实例
4.类不占内存,代码片段先存放在方法区中(以后的文章会介绍)

3.2 实例化注意事项:

1.实例化对象赋值为null=>不指向任何对象

public static void main(String[] args) {Person person = null;//代表person 不指向任何对象person.name = "zhang";//errperson.age = 12;//err//person不指向任何对象无法引用}

报错:

在这里插入图片描述

2.引用能不能指向引用?=》不能
引用只能 指向引用的对象,而不是指向引用

//引用指向引用的例子;public static void main3(String[] args) {Person person1 = new Person();Person person2 = new Person();//引用不能指向引用=》说法错误//引用person1可以指向引用person2所指向的对象 =>正确(引用一定指向对象,而不是指向引用)person1 = person2;}

3.一个引用能同时指向多个对象?=》不能
一个引用能指向多个对象?=》err;可以换对象但不能有多个对象

    public static void main4(String[] args) {Person person1 = new Person();//引用的地址
//        Person person1 = new Person();
//        Person person1 = new Person();
//        Person person1 = new Person();}

【注】
1.属性(成员变量)没有赋值不会报错,编译器会给他们默认值
引用类型:默认null;浮点型:0;Boolean:默认false
字符型:‘\u0000’
2.局部变量必须赋值,不负责编译器报错

3.3 类和对象说明

  1. 类只是一个模板,用来对一个实体进行描述,限定了类有哪些成员。
  2. 类是一种自定义的类型,可以用来定义变量 =》自己定义
  3. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量。
  4. 类实例化出对象:现实中使用建筑设计图建造出房子。
    类就像是设计图,但是并没有实体存在,类也只是一个设计。
    实例化出的对象才能实际存储数据,占用物理空间如:盖好的房子。

4. this 引用

4.1为什么要用this

我们实例化对象,可能需要创建多个对象,例如创建三个对象,代码里面是如何区分而找到正确的对象呢? =》根据this,我们来看一下!

public class DateUtil {public int year;public int month;public int day;public void setDate(int y, int m, int d) {//利用方法,多个赋值,// 如果new对象,给对象里面一个个赋值太麻烦year = y;month = m;day = d;}public void show() {System.out.println("年:" + year + " 月:" + month + " 日" + day);}//方法前面是那个引用,就调用那个对象的方法public static void main(String[] args) {DateUtil dateUtil = new DateUtil();dateUtil.setDate(2022,11,9);dateUtil.show();DateUtil dateUtil2 = new DateUtil();dateUtil2.setDate(2022,11,9);dateUtil2.show();DateUtil dateUtil3 = new DateUtil();dateUtil3.setDate(2022,11,9);dateUtil3.show();}
}

上述代码看似正确,但存在问题!

问题1:出现形参名与成员变量名相同的情况
函数体中是谁给谁赋值?参数谁给谁?

//错误代码:
public void setDate1( int year, int month, int day) {//利用方法,多个赋值//这里的year,month,day都是形参, 等号左边是局部变量 优先使用
//实例变量int默认0,相当于形参被默认的值赋值为0;(形参被默认值覆盖)year = year;month = month;day = day;}

在这里插入图片描述

为了防止这种情况出现,我们使用this关键字
代码改正:加上this:给当前对象的属性赋值

 //this:访问成员变量public void setDate1( int year, int month, int day) {//利用方法,多个赋值//这里的year,month,day都是形参,加上this:来表示给当前的对象的属性赋值this.year = year;this.month = month;this.day = day;}

问题2:为什么this能精准找到对应的对象呢?

每个成员方法的第一参数默认是this => 隐藏的参数,可不写;this可根据谁引用方法,就会找到对应的引用对象

 public void setDate(DateUtil this, int y, int m, int d) {//利用方法,多个赋值,// 如果new对象,给对象里面一个个赋值太麻烦year = y;month = m;day = d;}

4.2 this引用的特性

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

一般this的三种用法:
①this.成员变量
②this.成员方法
③this(…)访问构造方法:且必须是构造方法的第一句

this引用的特性:
1.this的类型:当前对象的引用。谁(对象)调用就是谁对象的引用类型
2.在"成员方法"中,this只能引用当前对象,不能再引用其他对象(this只能在成员方法中使用)
3. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收(例如:public void setDate(DateUtil this, int y, int m, int d))

5. 对象的构造及初始化

5. 1 如何初始化对象

通过引用给变量赋值的方式对变量个数多的情况下就不适用了,此时我们可以使用构造方法,为多个变量赋值。

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

实例化对象时,会调用 构造方法(下面介绍),此时我们可以直接在new 的对象中直接赋值。
例如:

DateUtil dateUtil = new DateUtil(2022,11,10);

5.2 构造方法

构造方法:特殊的成员方法:①没有返回值(不能设置void)②方法名和类名一样

5.2.1构造方法特性

构造方法:无参构造与有参构造

  //构造方法可以重载//无参数的构造方法public DateUtil(){//如果没有构造方法,java默认空构造方法//可以写this.year =year;}//有3个参的构造方法,参数是任意的个数public DateUtil( int y, int m, int d) {this.year = year;this.month = month;this.day = day;}
  1. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
  2. 构造方法可以重载(根据自己的需求提供不同参数的构造方法);重载:名字相同,参数列表不同
  3. 用户没有定义有参的构造方法,编译器会默认生成无参构造方法;如果设置有参构造,编译器就不会有无参构造,想要再次使用必须自己构造无参方法。

5.2.2this 调用构造方法

this(…)必须是构造方法中第一条语句
this 不能调用静态的成员方法和属性

 public DateUtil(){this(2000,11,10);//调用当前对象的构造方法//可以写this.year =year;}public void setDate( int year, int month, int day) {this.year = year ;this.month = month;this.day = day;//访问当前对象的成员变量this.show();//访问成员方法}

this()调用构造方法:循环调用的错误示范

在这里插入图片描述

5.3 默认初始化

1.初始化分配空间:对象空间被申请好之后,对象中包含的成员已经设置好了初始值。
2.调用构造方法,给对象各个成员赋值。
3.声明变量是,直接给出初始值


总结

✨✨✨各位读友,本篇分享到内容是否让你认识了JAVA的类和对象,如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关内容

热门资讯

北方铜业(000737)发布市... 截至2025年12月29日收盘,北方铜业(000737)报收于15.2元,较前一交易日下跌2.12%...
制度性突破!这一新机构,在这里... 撰文 | 余晖 12月28日,广州市海珠区人工智能发展局挂牌成立。 这是全国首个独立设置、实体化...
政策动态 | 住建部定调202...   2025年第52周,住建部召开全国城乡建设工作会议,明确来年将着力稳定房地产市场,加快构建房地产...
年内两度减持,獐子岛再遭第三大... 12月29日晚间, 截至公告披露日,和岛一号基金持有公司股份50,082,685股,占公司总股本比...
杭州市滨江区新闻出版局:未发现... 近日,游戏《燕云十六声》上线新时装引发网友争议。12月29日,澎湃新闻记者获悉,据杭州市滨江区新闻出...
赣锋锂业涉嫌内幕交易罪被移送审... 12月29日晚间,锂行业龙头企业赣锋锂业(002460)发布公告称,当日收到宜春市公安局送达的《移送...
湖南芙蓉律师事务所迎来新生力量... 律途添新锐,每月焕新颜! 在法治的广袤星空中,每一位新执业律师都是一颗冉冉升起的新星,为法律界注入全...
车市观察|国内汽车投诉排行榜出... 近日,国内知名的汽车投诉网站“车质网”发布了2025年11月的车型投诉排行榜单,从榜单前30名排行来...
赣锋锂业,涉嫌内幕交易罪单位犯... 12月29日晚,赣锋锂业(002460)公告称,公司收到宜春市公安局的移送起诉告知书:因涉嫌内幕交易...
形势政策系列报告会第四场报告会... 新华社北京12月29日电 由中央宣传部、中央和国家机关工委、教育部、中央军委政治工作部、北京市委联合...