Java 类和对象

爱吃香菜¹ 2024-06-22 14:35:03 阅读 57

目录

1、面向对象的初步认知

2、类定义和使用

 2、1 简单认识类

2、2类的定义

3、类的实例化

3、1什么是实例化

3、2类和对象的说明使用 

​编辑

4、this引用 

4、1什么是this引用

4、2 this引用的特性

5、对象的构造及初始化

5、1构造方法

 5、2默认初始化

5、3就地初始值


本篇博客学习Java类与对象。会涉及到许多新的概念,小伙伴们认真看完并及时巩固消化知识点哦

1、面向对象的初步认知

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

面向对象与面向过程的区别:

面向对象:注重的是对象(结果)(1.找对象 2.创建对象 3.使用对象),如像洗衣服注重的只有洗衣机,衣服和洗衣粉几个对象是如何交互完成工作的,而不注意是怎么洗的

面向过程:注重的是过程,如洗衣服时洗衣服的过程必须每个环节都在,少一个环节都不行,按照这种方式写代码,将来扩展或维护起来会很麻烦

 以洗衣服为例,感受面向过程与面向对象编程语言的区别。

面向过程编程语言就像传统洗衣方式一样。

 

7b9453a5e25346cfb121f5a06e47dea5.jpeg

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

而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种放方式。按照该种方式来写代码,将来扩展或者维护起来会比较麻烦。

而面向过程编程语言就像现代洗衣方式一样。

e075a3183f584e8da0b0e9a3ab33d82a.jpeg

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

2、类定义和使用

面相对象程序设计关注的是对象,而对象是现实生活中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉给计算机什么是洗衣机。

e60874344ee7451c950ca8a6478e9803.jpeg

上图左侧就是对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面相对象的编程语言来进行描述,比如:Java语言。 

 2、1 简单认识类

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

在Java语言中,如何对上述的洗衣机类来进行定义呢?

2、2类的定义

在java中定义类中,class为定义类的关键字。WashMachin为类名(建议采用大驼峰式命名)。{}中为类的主体。类中包含的内容称为类的成员。属性主要是描述类的,称之为类的成员属性或类的成员变量。而方法主要说明类有哪些功能,称之为类的成员方法。因此,类的主体由成员变量和成员方法构成,合称为类的成员。

    //创建洗衣机类

 public 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("定时功能");

        }

}

 

注意事项:

1. 一般一个文件当中只定义一个类

2. main方法所在的类一般要使用public修饰

3. public修饰的类必须要和文件名相同

4. 不要轻易去修改public修饰的类的名称。

采用Java语言将洗衣机在计算机中定义完成,经过Javac文件之后形成 .class文件。在JVM上=的基础上计算机就可以识别了。  

3、类的实例化

3、1什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:WashMachine类。是(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。用类类型创建对象的过程,称为类的实例化在java中采用new关键字,配合类名来实例化对象。

//创建狗类public class PetDog { //狗的属性(成员变量) public String name; public String color; //狗的行为(成员方法) public void bark(){ System.out.println("汪汪汪~~~"); } public void eat(){ System.out.println("吃狗粮..."); }}public class Test { public static void main(String[] args) { PetDog dog1 = new PetDog(); //通过new实例化对象 dog1.name = "大黄";//用"对象名."来访问对象的成员(变量/方法) dog1.color = "黑黄色"; dog1.bark(); dog1.eat(); }}

 注意事项:

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

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

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

3、2类和对象的说明使用 

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

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

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

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

b0f0b5873e204ea69113a805c75df7c8.jpeg

4、this引用 

4、1什么是this引用

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

public class PetDog {

    public String name;

    public int age;

    public String color;

    public void SetPetDog(String name, int age, String color) {

        this.name = name;

        this.age = age;

        this.color = color;

    }

    public void say(){

        System.out.println(this.name+"说我"+this.age+"岁了是"+this.color);

    }

}

public class Test {

        public static void main(String[] args) {

            PetDog dog1 = new PetDog();

            dog1.SetPetDog("大黄",3,"黑黄色");

            dog1.say();

        }

}

4、2 this引用的特性

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

2. this只能在"成员方法"中使用不能在静态方法中使用。

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

总结this用法

1、通过this访问当前对象的成员变量。

2、通过this访问当前对象的成员方法

3、通过this访问当前对象的其他构造方法(必须放在该方法的第一行!)

5、对象的构造及初始化

先看上述this引用来赋值初始化示范代码

  public void SetPetDog(String name, int age, String color) {

        this.name = name;

        this.age = age;

        this.color = color;

    }

需要调用之前写的SetPetDog方法才可以将具体的日期设置到对象中。通过上述例子发现问题并引发思考:

1. 每次对象创建好后调用SetDate方法设置具体日期,比较麻烦。

2、局部变量必须要初始化才能使用,那么成员变量声明后,没有赋值直接使用会报错吗

这就得引出构造方法了

5、1构造方法

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

在整个对象的生命周期内只调用一次。

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

构造方法必须满足的条件;

1、方法名与类名相同

2、方法名的前面无返回值

3、构造方法中不能使用return语句返回一个值,但是可以单独写return语句作为方法的结束。

public class Date { public int year; public int month; public int day; //构造方法 public Date(int year, int month, int day) { this.year = year; this.month = month; this.day = day; System.out.println("Date(int,int,int)构造方法被调用了"); } public void printDate() { System.out.println(year + "-" + month + "-" + day); }}public class Test { public static void main(String[] args) { Date date = new Date(2024,6,2); date.printDate(); }}

注意:在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次 。

构造方法的重载;

构造方法重载的条件

1、方法名相同

2、参数不同(个数不同/依次类型不同)

// 无参构造方法public Date(){ }// 带有三个参数的构造方法public Date(int year, int month, int day) { this.year = year; this.month = month; this.day = day;}

注意:

如果用户没有定义构造方法,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。

一旦用户定义构造方法,编译器则不再生成构造方法。

可以在无参构造方法中通过this调用带有三个参数的构造方法但是this(参数);必须是构造方法中第一条语句,并且不能形成环。

 5、2默认初始化

首先,必须对局部变量和全局变量的区别有清晰认知。

局部变量:定义在方法中的变量。

全局变量:定义在类中方法外的变量,成员变量就是全局变量。

在上文中提出的第二个问题:为什么在使用时局部变量必须要初始化,而成员变量可以不用呢?

Date date = new Date(2024,6,2);

要搞清楚这个过程,就需要知道 new 关键字背后所发生的一些事情: 

在程序层面只是简单的一条语句,在JVM层面需要做好多事情,下面简单介绍下:

1. 检测对象对应的类是否加载了,如果没有加载则加载

2. 为对象分配内存空间

3. 处理并发安全问题

比如:多个线程同时申请对象,JVM要保证给对象分配的空间不冲突

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

5、3就地初始值

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

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

 注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中

本篇类和对象就学习到这里啦,是不是收获满满呢,如果觉得文章写的不错,留下小红心再走吧。后面学习面向对象编程语言的三大特征,关注我,不要错过哦!~



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。