“面向对象”基础知识(什么是面向对象,什么是面向过程以及优缺点,this的特性)

🏆文章导读

本篇文章主要对什么是类,什么是对象,类和对象的区别,什么是实例化,以及this的说明及用法进行一个详细的讲解,主要的重点是 this 的用法

面向对象和面向过程概述

面向对象:面向对象是模型化的,你只需要抽象出一个类,就像一个封闭的盒子,在这里拥有数据也拥有解决问题的方法,需要什么功能直接使用就可以了,不必一步一步的去实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了,面向对象的底层其实还是面向过程,把面向过程抽象成了类,然后封装,以方便我们使用
面向过程:面向过程是具体化的,流程化的,解决一个问题,需要一步一步的去分析,一步一步的实现
面向对象和面向过程的区别
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux等一般采用面向过程开发,性能时最重要的因素
缺点:没有面向对象易于维护,易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,是系统更加灵活,更加易于维护
缺点:性能比面向对象低

类和对象

类的定义类是用来对一个实体或对象进行描述的,他与C语言的结构体很类似,在类中主要是为了描述这个实体的属性和功能,下面通过一个代码来进行讲解:
在这里插入图片描述

再次总结:

注意事项:

1、类名采用大驼峰形式书写

2、成员前统一写public前缀

什么是对象一张图解决

在这里插入图片描述

以上是在Studen这个类中定义了一个main方法,从而对类中的成员变量和成员方法进行调用,当然你也可以在重新定义一个类,在新的类中进行调用,但是,最好一个文件当中只定义一个类!

在这里,我还想讲一下关于在new一个对象时,对象在堆上开辟空间的现象,因为小编曾经在这里有这样一个困扰->

在这里插入图片描述

类和对象的区别

1、类只是一个形式或者说模型一样的东西,只是为了对一个东西的属性以及行为进行描述。不要过度去理解它的意思

2、类是一种自定义类型也属于引用类型,可以用来定义变量

3、一个类可以实例化多个对象 ,实例化的对象占用实际的堆中的物理空间,存储类中的成员变量,其实类就像一张设计图,只是一张图纸而已,并不是什么实际的东西,但实例化出来的对象才能存储实际的数据,占用物理空间

总结注意事项:

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

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

3、同一个类可以创建多个实例

4、一般一个文件当中只定义一个类

5、main方法所在的类一般要使用public修饰(因为Eclipse会在public修饰的类中找main方法,而上面我的代码中没有在类前加public,这个要注意)

6、public修饰的类必须要和文件名相同

7、不要轻易去修改public修饰的类的名称,如果要修改的话要通国工具进行修改,下面进行图解演示。

在这里插入图片描述

什么是实例化

定义了一个类,因为类是引用数据类型的,也就相当与定义了一个新的类型,与int,double,float一样,只不过他们只基本数据类型,是内置的类型,而类则是我们定义的一个新类型而已,这个类型的名字是根据我们自己定义的,但是要注意,我们所说的定义一个新类型是指只是定义了一个新的类型名字,类他是属于引用数据类型的。

用类所创建对象的过程,称为类的实例化在Java中采用new关键字,配合类名来实例化对象,例如上面:new Student()

但是有些同学经常对象,引用,实例化分不清不理解,下面为大家再系统的讲解一些:

this的引用

对于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 date1 = new Date();
        Date date2 = new Date();
        //对date1,date2进行赋值
        date1.setDate(2023,4,23);
        date2.setDate(2023,4,22);
        //打印date1,date2;
        date1.printDate();
        date2.printDate();
    }
}

在这里插入图片描述

上面的代码创建了一个日期的类,然后在main方法中实例化了三个对象,然后通过调用类中的方法对日期进行了赋值,最后调用类中的printDate方法进行打印。看似没有什么问题,其实是存在一些隐形的问题的。例如:

1.形参名称与类中的成员变量名相同怎么办呢?

在这里插入图片描述

2.那方法体中到底是谁给谁赋值呢?成员变量给参数变量?参数给参数?参数给成员变量?成员变量给参数?

在这里插入图片描述

好麻烦呀😅对不对,直接运行一下看结果:

在这里插入图片描述

全部都时0/0/0,那么这样就清楚了,原来这里是参数给参数进行了赋值,那么如果在参数名与成员变量名相同的情况下,如对类中的成员变量进行赋值呢?下面就用到了this的引用。

比如在这些变量前加一个this的话,看一下结果

加上this后就成功打印出了想要的结果,请看图讲解:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这就说明了this引用的是调用当前方法的对象,谁调用了这个方法,这个this指向的就是谁谁谁!!!

this的引用特性

1、this的对象:即那个对象调用,就指向那个对象

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

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

而this不止以上的用法,还可以在构造中使用,具体如何使用,请看下集讲解!!!😁😁😁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值