0


【JavaSE】JavaSE之类和对象(上)

由于在JavaSE中类和对象是入门很重要的一部分,知识点比较多,所以此处我选择分上下两部分来详解类和对象,这样读者不会感到疲劳,我也能更好的为你们做出详解~以此来认知和彻底掌握它!

JavaSE类和对象上半部分详解

一. 面向对象的初步认知

1.1 什么是面向对象

面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP)
oop思想:面向对象的思想(继承,封装和多态等等)

1.2 面向对象与面向过程

面向对象:举例来说我们前面使用的库里面的方法,我们不需要知道它是如何实现的,它的底层原理我们可以忽略,直接使用重视方法的使用就可以了。如洗衣机洗衣服,我们不需要知道洗衣机原理就可以直接使用。
面向过程:在库里面的方法,它注重的是底层原理实现,更加深入细节。如手洗衣服,一步步过程我们都要知道然后实现。
面向过程和面相对象并不是一门语言,而是解决问题的方法,没有哪个好坏之分,都有其专门的应用场景。在面向对象里我们需要先找对象,再创建对象,以及使用对象。我们在创建对象时需要先定义一个类,这时候我们就可以在主函数里创建很多对象,下文将带你深入了解~

二. 类定义和使用

2.1 简单认识类

类是用来对一个实体(对象)来进行描述的,一个文件夹只能定义一个类,里面可以定义它的属性(身高,体重,年龄等等),这些属性又称作成员变量定义在类的里面,方法的外面。

2.2 类的定义格式

在这里插入图片描述
class为定义类的关键字,Person为类的名字,{}中为类的主体
类中包含的内容称为类的成员:属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。
注意:

  1. 类名注意采用大驼峰定义
  2. 成员前写法统一为public,后面会详细解释
  3. 此处写的方法不带 static 关键字. 后面会详细解释

2.3任意定义类深入了解

2.3.1定义一个学生类
在这里插入图片描述
注意:

  1. 一般一个文件当中只定义一个类
  2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  3. public修饰的类必须要和文件名相同
  4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改(先在文件名里去改,然后再把代码里的类名改掉)

三. 类的实例化

3.1什么是实例化

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
语法格式:
在这里插入图片描述

接下来我们将讲到如何去使用类中的成员变量以及赋值,还有多个实例化对象的创建。

类的创建:
在这里插入图片描述

主函数引用:
在这里插入图片描述

结果的打印:
在这里插入图片描述

如果我们创建了一个对象,没有对它进行初始化,直接打印出来属性的时候输出结果就会是他们对应类型的0值。(引用类型对应的是null,boolean对应的是false,char对应的是‘\u0000’(空格))。
注意:

  1. new 关键字用于创建一个对象的实例.
  2. 使用 . 来访问对象中的属性和方法.
  3. 同一个类可以创建多个实例.

3.2 类和对象的说明

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
  2. 类是一种自定义的类型,可以用来定义变量,但是在java中用类定义出来的变量我们称为对象.
  3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量,每一个在栈上创建的对象,都会在堆里开辟一块空间储存成员变量。
  4. 简单易懂来讲,类就是房屋设计图纸,实例化对象就是建造房子

知识总结:
1.如何定义一个类?
class Person{
public String name;
}
2.如何通过这个类,实例化对象?
Person person1 = new Person();
Person person2 = new Person();
3.怎么去访问实例化出来的对象的方法和属性?
通过对象的引用:person1.属性 或者 person1.方法
4.什么是实例化对象?
通过new关键字 实例化一个对象,就会给这个对象分配一个内存。

四. this引用

4.1 为什么要有this引用

举例:
在这里插入图片描述
但是打印结果却是不是如我们所料
在这里插入图片描述

我们可以发现值并没有赋上去,在第四步的时候,我们传参并没有改变属性的值,只是改变了方法里的形参的值。那么此处有两个问题值得我们注意:

  1. 形参名不小心与成员变量名相同
  2. setDate和printDate函数如何知道打印的是那个对象的数据呢?

4.2 什么是this引用

java编译器给每个“成员方法“增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问
正确的修改:
在这里插入图片描述
关于this

  1. 代表当前对象的引用
  2. 可以区别,当参数和成员名字冲突的时候
  3. this本质来说,可以看作是一个隐式的参数(编译器自动添加,不需要我们显式给出),是第一个参数
  4. 在很多情景中,也可以不需要this,但是存在即合理,我们还是要习惯使用this

4.3 this引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在"成员方法"中使用(不能在静态方法static中使用,后面会讲)
  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
  5. this.date–>访问成员变量 this.func()–>访问成员方法 this();–>调用构造方法

五. 对象的构造及初始化

5.1 如何初始化对象

上述代码中我们是先创建对象再进行赋值

  1. 每次对象创建好后调用SetDate方法设置具体日期,比较麻烦,那对象该如何初始化?
  2. 局部变量必须要初始化才能使用,为什么字段声明之后没有给值依然可以使用?

在后文我们会慢慢详解~~

5.2 构造方法

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

5.2.2 特性

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
  5. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。

当我们实例化一个对象时:一定会有为对象分配内存然后调用合适的构造方法,并不意味着只有这两步。
当我们写了一份不带参数的构造方法的时候
在这里插入图片描述
我们主函数就直接调用了这个构造方法
在这里插入图片描述
在程序当中 没有构造方法的时候 ,编译器会帮我们默认提供一个不带参数的构造方法,如果你写了构造方法,编译器就不会再帮你生成一个不带参数的构造方法。(名字相同,参数列表不同,构造方法就形成了重载)
我们写带参数的构造方法只需要在实例化对象的时候,在小括号里进行相应的赋值。
在这里插入图片描述
在IDEA里面,对构造方法生成有快捷键,当参数过多时,我们就不容易写构造方法,如图带四个参数的构造方法,鼠标右键点击空行,点Generate
再点击Constructor,最后摁住Shift和鼠标左键点击你要生成的参数构造方法。
在这里插入图片描述

  1. 构造方法中,可以通过this调用其他构造方法来简化代码在这里插入图片描述在这里插入图片描述 注意他们的执行顺序,且注意:this必须放在第一行(在构造方法里使用)!!!this还不能形成环,环就是在带2个参数构造方法里调用带1个参数的构造方法,然后在带1个参数的构造方法里调用带2个参数的构造方法,形成了无线循环的环。
  2. 绝大多数情况下使用public来修饰,特殊场景下会被private修饰(后序讲单例模式时会遇到)

5.3 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?
局部变量在不初始化的情况下,他们的默认值都是0值
在这个过程里,其中关键字new扮演着很重要的角色,它在JVM层面需要做好多事情,如:

  1. 检测对象对应的类是否加载了,如果没有加载则加载
  2. 为对象分配内存空间
  3. 处理并发安全问题 比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突
  4. 初始化所分配的空间即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值,如:在这里插入图片描述
  5. 设置对象头信息(关于对象内存模型后面会介绍)
  6. 调用构造方法<>,给对象中各个成员赋值

5.4 就地初始化

在声明成员变量时,就直接给出了初始值。
我们也可以创建对象继续赋值,这样就会改变原来就地初始化的值,如果不赋值的话打印出来就是就地初始化的值。
此处我们也可以知道,输出值的时候我们总是要在类里面建立一个show方法输出
在这里插入图片描述

当成员变量多了的时候我们手动打字输出就会异常繁琐,所以我们此处也介绍下在类里面IDEA的成员变量快捷输出键
鼠标右键点击空白处进入Generate,然后进入到toString()里面,按住Shift+鼠标点击完成你想打印输出的成员变量
在这里插入图片描述
那么类和对象前半节就讲到这里了,是不是很简单呢,下篇文章将带你彻头彻尾了解类和对象的后半部分,打好基础一起冲向更高的山峰吧!!!

标签: java

本文转载自: https://blog.csdn.net/m0_67660672/article/details/126980419
版权归原作者 bit me 所有, 如有侵权,请联系我们删除。

“【JavaSE】JavaSE之类和对象(上)”的评论:

还没有评论