目录

一. 面向对象的初步认知

1.1 什么是面向对象

1.2 面向对象与面向过程

二. 类定义和使用

2.1 简单认识类

2.2 类的定义格式

三. 类的实例化

3.1 什么是实例化

3.2 实例化对象

四. this引用(重点)

4.1 为什么要有this引用

4.2 this的使用

4.3 this引用的特性

五.对象的构造及初始化

5.1 默认初始化

5.2就地初始化

​编辑

5.3 构造方法(重点)

总结:


本篇文章为JavaSE中的重点内容 希望大家好好看看


一. 面向对象的初步认知

1.1 什么是面向对象

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

1.2 面向对象与面向过程

举例说明面向对象与面向过程的区别:

面向过程:

传统洗衣服过程

传统的方式:注重的是洗衣服的过程,少了一个环节可能都不行。 这就是面向过程

C语言就是面向过程的语言

面向对象:

现代洗衣服过程:

整个洗衣服过程:人把衣服放进洗衣机,倒入洗衣粉到洗衣机,启动洗衣机。衣服便总动洗好

总共分为四步,整个过程都是由这四个对象交互完成,不需要管它如何实现洗衣服这些过程,更注重结果

总共四个对象:人,衣服,洗衣机,洗衣服

面向对象方式来进行处理,就不关注洗衣服的过程,具体洗衣机是怎么来洗衣服,如何来甩干的,用户不用去关心,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,通过对象之间的交互来完成的。
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。


二. 类定义和使用

2.1 简单认识类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

例如:

比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色…
功能:洗衣,烘干、定时….

2.2 类的定义格式

在java中定义类时需要用到class关键字

// 创建类class ClassName{ field; // 字段(属性) 或者 成员变量method; // 行为 或者 成员方法}
  • class为定义类的关键字
  • ClassName为类的名字
  • {}中为类的主体

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

例如刚才的洗衣机我们可以给它描述:

class WashMachine{public String brand; // 品牌public String type; // 型号public double weight; // 重量public double length; // 长public double width; // 宽public double height; // 高public String color; // 颜色public void washClothes(){ // 洗衣服System.out.println("洗衣功能");}public void dryClothes(){ // 脱水System.out.println("脱水功能");}public void setTime(){ // 定时System.out.println("定时功能");}}

再定义一个狗类:

class Dog {public String name;public String color;public int age;public void eat() {System.out.println(name + "吃东西");}public void wag() {System.out.println(name + "摇尾巴");}}

注意事项:

  • 类名注意采用大驼峰定义
  • 成员前写法统一为public
  • 此处写的方法不带 static 关键字
  • 一般一个文件当中只定义一个类
  • public修饰的类必须要和文件名相同
  • public修饰的类必须要和文件名相同

三. 类的实例化

3.1 什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型;

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

3.2 实例化对象

拿上处狗的例子来举例:

这样我们就通过new 来创建了一个dog对象,并且对它可以实例化对象

通过. 可以通过类对象访问到它里面的对象 ,并且可以对它初始化

注意事项:

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

类和对象的说明:

1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
2. 类是一种自定义的类型,可以用来定义变量.
3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量
4. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间

习题:

1.引用可以指向-引用吗?

解析:不能。引用只能指向对象

只能这样说,dog2指向了dog1所指向的对象

2.一个引用 能不能同时指向 多个对象吗?

解析:不行的 dog1这个引用,只能存储一个对象

3.dog1指向了null对象?

解析:错误 ,dog1不指向任何对象

实现俩个数字的交换(重点)

class myValue1 {public int val;}class myValue2 {public int val;}public class Test {public static void swap(myValue1 val1,myValue2 val2) {int tmp = val1.val;val1.val = val2.val;;val2.val = tmp;}public static void main(String[] args) {myValue1 val1 = new myValue1();val1.val = 10;myValue2 val2 = new myValue2();val2.val = 20;System.out.println("交换前");System.out.println(val1.val);System.out.println(val2.val);swap(val1,val2);System.out.println("交换后");System.out.println(val1.val);System.out.println(val2.val);}}

注意基本类型一定不能进行交换,一定要通过引用访问它们中的对象,从地址上改变了它们的对象


四. this引用(重点)

4.1 为什么要有this引用

引用一个例子就明白了:

public class Date {public int year;public int month;public int day;public void setDate(int y,int m,int d) {year = y;month = m;day = d;}public void printDate() {System.out.println( year + "年" + month + "月" + day + "日 ");}public static void main(String[] args) {Date date = new Date();date.setDate(2023,11,11);date.printDate();}}

这里是成功打印出来了,而现在我稍作一点改变,就会发生错误


原来:

现在:形参名不小心与成员变量名相同

再来看看打印结果

只是修改了变量名字,为什么就打印不出来

原因是

这里都使用了局部变量,并没有赋值到

局部变量优先使用

接下来就可以使用this 这个方法


4.2 this的使用

this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。


即使写了很多个,系统都可以自动识别出 :

this引用的是调用成员方法的对象。


4.3 this引用的特性

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

五.对象的构造及初始化

5.1 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:
1. 检测对象对应的类是否加载了,如果没有加载则加载
2. 为对象分配内存空间
3. 处理并发安全问题
比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

4. 初始化所分配的空间
即:对象空间被申请好之后,对象中包含的成员已经设置好了初始值

所以它们都有默认值

5.2就地初始化

在声明成员变量时,就直接给出了初始值。


5.3 构造方法(重点)

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

构造方法的调用 是在实例化对象的时候

之前没有构造的方法,也会被执行,只不过是不带任何参数的

构造方法至少有一个,Java会自带一个不带任何参数的


名字相同,参数列表不同,因此构成了方法重载。

这里就可以对成员变量进行初始化


假如只写了一个构造方法:

假如你创建了一个带参数的构造方法,但这里却调用不带参数的构造方法,就会报错,因为必须使用你创建了那个构造方法,如果没写构造方法,才可以写不带参数的。

这里由一个编写构造方法的快捷方法,就不用一个一个输入:

或者直接用快捷键alt+insert 想创建几个就可以创建几个

总结:

明天更新 【Java SE】封装

如有不足之处欢迎补充交流

看到这里的友友们,支持一下博主,来个免费三连,感谢! ! !