Java面向对象-程序开发分类-什么是对象-对象和类

26 篇文章 0 订阅
12 篇文章 0 订阅

        Java是一门完全面向对象的编程语言

一、程序开发分类

1.1.面向过程

        所谓的面向过程,就是把一件事情按部就班的一条一条将事情解决。就像去买烟,整个过程就是:找钱-》拿钱-》开门-》下楼-》找商店-》进门-》选烟-》到前台-》付款(省略了收银台的扫描等)-》出门-》回家

        面向过程是一种线性思维,比较适合解决一些比较小的问题。

1.2.面向对象

        面向对象的思维则是,买烟就是买烟,至于怎么买烟,经过了什么样的步骤,不论是去超市买烟还是去便利店买烟;这在面向对象的思维中,是不管的。

        所以说,面向对象的就是找合适的人干合适的事情。就像上述的买烟,找到能买烟的人就可以。就像我们写的求两个数的和的方法,这个方法就是那个合适的人,我们要做的事情是求和,找到这个方法就是找到了合适做求和运算的人。至于,方法中怎么实现求和运算的,这我们并不需要知道。
        这个时候,我们肯定有了大大的疑惑,方法不是也是我们写的嘛?里面的逻辑我们也是知道 的鸭。但是我们要知道,方法我们有可能自己写,也有可能用别人写的鸭,这个时候,难道我们还需要专门把别人的代码看一遍,看懂了照着编写完才能使用嘛?
        这个时候相信我们也有了一定的判断:我们创建编写一个对象是面向过程的,因为对象里面的逻辑,以及对象能够完成什么样的功能是我们一步一步编写的,但是我们后面使用对象的时候,就只需要使用这个对象就可以了,而不需要把过程再写一遍。

核心:找对对象
作用:能够更好的在宏观上把控事务的走向,更适合复杂的业务

自我思考:实际上我们在编写Java程序的过程中,所有的代码肯定都是自己编写;因此,我们创建类、方法的过程是面向过程的,但是我们使用对象的时候,是面向对象的。
        也就是说,面向对象并不是完全脱离面向过程的,两者是互相提供支撑来让我们更好的编写代码。

二、什么是对象

        在Java中,你们看到的所有的东西都可以是一个对象。但是,实际上,我们不能为了对象而说是对象,也就是说,我们要明确划分什么样的一个模块可以是一个对象,而什么样的代码只是对象中的一些逻辑。

三、对象和类

3.1.对象和类的关系

         对象是可以帮助我们解决问题的,而以目前所学,我们在类中编写的代码也是帮助我们解决某个问题的。所以,我们需要理清对象和类之间的关系。
        对象:具体的某种事物
        类:对对象的抽象。

3.2.类

        类,是一种抽象的概念
        所谓的类,就是我们将某些具备相同特征或是具备类似功能的东西的统称。

        就像生活中,我们所谓的猫是一个大类,只要满足一定的特征,就可以说它是一只猫。
        在代码中,也是一样的,就像是求和,两个数的求和是求和,三个数的也是,四个数的也是,此时,就可以把这些统称为求和类。

3.3.对象

        对象,就是类的实例化。
        就比如,我们说是一只,但是我们口中的是碰不到的,是一种概念。而我们所看到的则是我们可以碰得到,看得见的。这个就是一个对象
        所以,我们通过类进行具象化实例化出来的内容,就是对象。

3.4.先有类还是先有对象

        构建的角度:先有类,才有对象。只有有了类,我们才能根据这个类来实例化对象
        编码的角度:先有对象,才有类。只有有了对象,类才可以被创建(我理解为使用角度)

什么意思呢?

        其实,我们在实际编程业务的时候中,需要先对业务进行分析,我们分析出来的实际上就是一个一个的对象,我们通过创建一个个对象,将一些拥有共性的对象放在一起来组成我们的一个类。在这个角度,我们是先有对象才有类;(构建角度)
        但是,我们在编写代码的过程中,我们需要使用对象,此时,我们就需要先把类写出来,才能去创建对象来使用。此时,就是先有类,再有对象了。(编码角度)

3.5.类和对象的编写

3.5.1.使用工具

Intellij IDEA

        我们在使用idea编写java程序的时候需要先新建一个java项目,在java项目中的src目录下创建包,在包中创建类来编写代码。
        创建包的意义,事实上,我们一个类尽量只包含一项功能,就像四则运算,我们可以在不同的类中将+、-、*、/分开编写,而他们又同属于四则运算,所以,我们可以把这些有一定共同点的类放到一个包中。优点在于可以明确的找到我们想要使用的类

创建包的注意事项:

        1.包名,一般而言,包名一定要是唯一的,而为了保障唯一性,我们可以把公司域名倒着写来保证唯一性,然后在最后面加上你真正想要的包名做区分以及见名知意。

3.5.2.通过对象写类

        所谓的通过对象编写类,就是分析我们的需求,将我们的一些近似的需求写到同一个类中。就像上面所举过的例子,两个数的求和以及三个数的求和,可以把他们放到一个类中,这样,我们再想用求和类中的方法的时候,就需要通过类来创建对象使用方法。
        那么这样写有什么好处呢?
        这样写,会让我们的代码更有逻辑,还有代码的复用性也会提高,重复的代码我们只需要编写一次,后期,用到哪个就调用哪个即可,发生问题的时候,也更容易找到问题的来源。

3.5.3.通过类创建对象

        当我们依据需求将类创建好之后,我们就需要编写实际的业务了,而在业务编写的过程中,如果我们需要使用类中的方法的时候,我们就可以通过这个类来创建一个对象来使用类中的一些方法来得到想要的结果。

3.5.4.创建类

        在idea中,我们 只需要在包名右击点击新建一个java类即可创建一个类。此时这个类是一个空类,里面是什么也没有的。我们需要根据业务需求在这个类中编写相应的代码去实现一些功能。

类体

        我们所创建的那个类,后面的{}中的所有内容都是写到类体中的内容,也就是说这个{}就是类体。

字段(成员变量)

        类中,方法外
        我们可以在类体中定义一些变量,这些变量就是我们这个类中的一个成员变量,被称为字段。

        比如,我们有一个类:人类;那么该类的字段就可以是人的姓名、年龄、性别等。
        有没有感觉很熟悉?
        在我的理解下,所谓的字段就是类中的各个对象的共同点,什么意思呢?
        就好像猫咪,都是猫;但是可以细分成中华田园猫,布偶猫;人,也可以分成黄种人、黑种人、白种人。满足一定特征的是一只布偶猫,满足另一些特征的是田园猫,但是他们都是猫这个类。

        我们怎么访问这些成员变量呢?
        直接通过对象名.字段名称来访问。也就是说,我们想要访问这个字段的时候,需要先实例化一个对象,再通过对象名.字段名称来访问字段

实例字段

        在类中未通过static来修饰的变量。
        通过对象名.字段名称来访问字段

类字段(类变量,静态变量)

        在类中通过static来修饰的变量。
        既可以通过对象名.字段名称来访问字段;也可以通过类名.字段名称来访问。
        为了和实例字段做区分以及更加方便使用的问题,一般使用类名.字段名称来访问。

方法

       CSDN

       基础知识中,我们已经学过方法了。但是,现在我们已经对类有了一定的了解,所以,我们应该可以联想到,方法就是对类中的成员进行修饰的。比如。人类,可以有一个eat方法(吃饭)、sleep方法(睡觉).......
        为什么说方法是对该类中的成员进行修饰?
        我们不可能把跟这个类中的成员有关的方法写道另外一个类中,就像你的钱不能放进我的口袋一样。

3.5.5.类的加载

        方式一:当我们需要调用到某个类的main方法的时候,该类就会被加载
        方式二:当我们创建某一个类的实例的时候,这个类会被加载
        方式三:调用某个类中的静态内容的时候,类会被加载

3.5.6.创建对象

        我们在创建好类之后,假设我们创建的求和类,而我们此时需要使用求和类中的两个数求和的字段或是方法。
        我们就需要先依据这个类创建一个实例化对象,再通过对象名.[字段名称|方法名]来使用

3.6.内存分析

        所谓的内存分析,就是要告诉我们在内存中,我们代码执行到实例化一个对象的时候,内存做了什么。

        0.程序进入方法中的时候,就会在栈内存中开辟一块对应的方法栈空间,用来保存这个方法中的变量。
        1.在堆内存中开辟一块空间
        2.在这块空间中初始化成员变量,根据自己代码中编写的成变量的类型、数量来初始化
        3.将这片空间的内存地址给我们的对象名保存在栈中

3.7.构造器

        构造器就是构造创建对象的机器。
        是一个方法。该方法可以通过new关键词创建出当前类的实例对象。
        我们使用的实例化对象本质上就是调用了构造器

3.7.1.构造器的特性

        1.不存在返回值(这里的不存在不是真的不存在,而是我们不能在构造器中自己编写返回值)
推理:
        第一步:
我们可以在一个类中创建一个方法,该方法的方法名和类名一致。当我们通过main方法调用这个方法的时候,我们发现,该方法并不执行;
        第二步:这可能和我们方法没有返回值有关系,毕竟构造器本身是会返回一个对象的。那么我们可以将我们书写的方法的返回值类型和类名保持一致(毕竟是返回当前类的实例化对象),编译运行,仍然不执行
        第三步:这可能是因为类名和返回值类型重复了,但是当我们把返回值类型删除的时候,我们发现retrun语句报错:这是因为不写返回值类型的时候默认为void,即没有返回值,但是我们的方法中有返回值
        第四步:删除return语句,我们发现方法中的代码段执行了。
        也就是说,我们在编写构造器的时候不能编写返回值。
        2.方法名称和当前类的名称一致
        3.一个类默认会存在一个空参数的构造器,方便用户的调用,创建该类的实例对象。当我们在当前类中定义其他构造器,此时默认的构造器就不存在了[有意识地写一个空构造器]
        为什么要定义其他的构造器?
        这是因为我们默认的构造器在初始化的时候,都是通过默认值来进行初始化,后面还需要我们向对象的属性添加值,而我们有时候希望在创建新对象的时候,让其通过我们传递的参数来进行对应的初始化,直接添加值。
        通俗的讲,默认的构造器新建的对象都是一个样子的,而我们传参之后就会根据参数不同而各不相同。
        4.构造器允许重载
        构造器允许重载使得我们既可以通过默认进行初始化,也可以通过自己创建构造器来传递不同参数进行初始化。
        值得注意的是,构造器是在对成员变量进行初始化,而成员变量中static修饰的成员变量(实例变量)是可以直接通过变量名来进行使用的。

3.7.2.构造器的编写

语法
        pubilc 构造器名称() {}

pubilc Persion() {

}

3.7.3.构造器的重载

pubilc Persion() {

}
//成员变量中static修饰的成员变量(实例变量)是可以直接通过变量名来进行使用的。
pubilc Persion(String pname) {
    name = pname;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值