JavaSE - 面向对象编程01

01 什么是面向对象编程(oop)

答:面向对象编程就是把现实问题抽象为对象,通过调用对象的属性和方法去解决问题。

面向对象:以对象为核心,关注的是对象的行为和属性,以及对象之间的交互。 

面向过程:以过程为核心,关注的是解决问题的步骤和流程。

例如把一个大象放进冰箱需要几步?如果是面向对象编程只会思考冰箱和大象之间的交互,那么给出的答案就是:把冰箱门打开,把大象放进冰箱,把冰箱门关闭。如果是面向过程编程则会思考,如果把大象一整个放进冰箱是不可能的,只能把它剁了才可能装进去,那么先剁哪个部位呢等一些步骤和流程上的问题,这就是我理解的什么是面向对象编程,以及面向对象编程和面向过程编程之间的区别。

02 面向对象编程(oop)的好处

答:在祖师爷看来一切实体皆对象。在现实生活中我们要干什么事时其实都是让一个个对象去完成的,例如,你想去哪里可以利用汽车这个对象通过它的载人功能来实现、你想和你的朋友通话可以利用手机这个对象通过它的通话功能来实现。在面向对象编程中也是如此,计算机是用来处理数据的,如果我们想要处理学生的数据可以利用学生这个对象来处理,如果我们想要处理汽车的数据可以利用汽车这个对象来处理。总之凡是使用面向对象编程的套路,更符合人类的思维习惯,也会使得编程更加简单,直观。

03 什么是类,什么是对象

答:Java中一切实体皆对象,类使用来描述对象的。可以简单理解为类是一个模板,而对象是模板的具体表现。C语言中描述一个复杂的对象用的是结构体,而Java和C++中用的是类。

04 类和对象的区别

答:① 类使用来描述对象的,一个类可以实例化无数个对象 ② 类不占用具体的内存空间,对象占用具体的内存空间

05 怎样面向对象编程(oop)

答:例如我们要处理汽车的数据时,① 首先先通过class关键字创建出汽车类,即描述汽车的模板 ② 通过new关键字实例化出具体的汽车对象 ③ 对对象的数据进行封装 ④ 调用类中的方法对对象的数据进行处理 (哪个对象调用的方法,处理的就是哪个对象的数据)。总之,在处理一个具体的业务时我们的编程思路是:① 找对象,即确认我们要处理哪些对象的数据 ② 创建对象的模板,即创建类 ③ 实例化对象 ⑤ 调用相关方法对对象的数据进行处理。 

06 怎样定义一个类

【1】语法格式:

【2】注意事项:

   ① 一个Java文件中定义几个类的问题:一个Java文件中可以定义多个类,但只能有一个被public修饰的主类,且主类类名必须与所在的Java文件名保持一致。不过我们在开发时通常只会在一个Java文件中写一个类,使用idea创建Java文件时,idea会自动为我们在Java文件里面创建一个被public修饰且类名与所在Java文件名一致的主类。

   ② 类的修饰符问题:类只能被public修饰或不被修饰,其他的修饰符是不能修饰类的。被public修饰的类可以在任意包下被访问到(不同包下要导包),不被修饰的类只能在同一个包下被访问到。

   ③ 如何修改类名:不要轻易修改public修饰的主类类名,如果非要修改可以通过开发工具进行修改,且通过开发工具修改类名有一个前提:这个类所在的java文件只能有一个类存在(这个类就是我们想去修改类名的主类)。具体修改步骤如下:右键单机该类所在的java文件 -- 》选择refactor --》选择rename --》修改即可。

  ④ 类名命名格式:Java文件名和类名采用的都是大驼峰的方式命名。

  ⑤ 类中包含的内容:一个类中可以包含五大板块的内容,我们可以根据实际的需求定义这些板块,并不需要都写上。

  ⑥ 成员变量本身存在默认值,在定义成员变量时一般不需要进行初始化赋值(没有意义)。

07 怎样实例化对象

【1】语法格式:new + 构造器;

【2】实例化举例:

   ① 实例化数组时,int[] array = new int[]{1,2,3,4,5}; 或int[] array = new int[10];

   ② 使用从键盘读入操作之前,会实例化一个Scanner类的对象,Scanner scan = new Scanner();

   ③ WashMachine washMachine = new WashMachine();

【3】注意事项:

   ① 实例化出的对象在内存中的存储位置:使用new关键字实例化的对象都存储在虚拟机的堆区,我们可以通过实例化多个对象,但也要注意堆区的内存是有限的。

   ② 实例化代码可以写在哪里:写在自己或其他类的成员变量的位置,用于就地初始化引用类型的成员变量;自己或其他类的成员方法,代码块,内部类中也可以写。

   ③ 对象和对象之间的数据是不会相互影响的,但如果有多个引用指向同一个对象则会相互影响。

   ④ 如果某个对象没有一个引用去引用它,则这个对象会被系统认为是垃圾对象,且Java中存在垃圾回收机制,会自动清理掉垃圾对象,我们并不需要关心它。

【4】匿名对象:例如:

    OuterClass out = new OuterClass() 和 new OuterClass(),后者是匿名对象只能被使用一次。

08 计算机如何执行面向对象的程序

【1】前置知识:计算机是通过虚拟机中的栈区,堆区,方法区配合来执行面向对象程序的。

【2】实例分析:

  ① 将调用main方法的Test类加载到方法区中。

  ② 在栈区为main方法开辟栈帧空间。

  ③ 执行main方法的第一行代码:检测到会用到Student类于是会先将Student类加载到方法区中。接着在main方法的栈帧中为局部变量s1开辟空间。然后在堆区开辟一块内存空间存放new出来的学生对象。这个学生对象的地址存放在局部变量s1中 (我们可以通过s1里面的地址找到地址所指向的学生对象) 学生对象内部会依据学生类的格式为实例变量开辟内存空间,这些空间用于存储这个对象自己的数据,且这些实例变量都会有默认值(null/0)。学生对象的内部同时存放着对应类的地址。

  ④ 执行main方法的第二、三行:通过s1中的地址找到对应的学生对象,然后把这个学生对象里面相关变量的值进行更新;

  ⑤ 指向main方法的第三、四行:通过s1中的地址找到对应的学生对象,然后通过学生对象中的存储的类的地址,找到对应的类,最后通过方法名定位到要调用的方法进行调用,且哪个对象调用的方法,方法中处理的数据就是哪个对象的数据(注意:方法并不占用存储空间)

09 什么是引用

答:引用类型的变量简称引用,里面存储着对象的地址。

10 this关键字

【1】含义:this引用是所有实例方法的一个隐藏参数,哪个对象调用这个实例方法,this引用就指向哪个对象。

【2】用处:解决变量名冲突问题:当实例方法的局部变量名和成员变量名(类变量和实例变量)相同时,在前面加this.的代表的是成员变量,前面没有this.的则为局部变量。

11 构造器(构造方法)

【1】语法格式:修饰符 类名 参数列表 {}

【2】注意事项:

    构造器的修饰符一般是public,如果使用private修饰则会使得该类无法实例化对象。

   ② 构造器是特殊的方法,它和普通方法相比它并没有返回类型,且方法名必须与所在类名一致。

   ③ 构造器可以发生重载。

    构造器什么时候被调用:关于new 构造器;的理解。其一:实例化某对象,其二:调用带有几个参数的构造器。即,构造器不需要我们自己调用,在实例化对象的时会根据我们传的参数调用对应的构造器。因此构造器的常见应用场景:完成对实例变量的初始化赋值(类变量也可以,不过类变量的初始化一般会写在静态代码块中),如此我们就可以不用再利用点号去一个个赋值啦。

   ⑤ 构造器并不负责给对象开辟内存空间。

    在创建类时如果不写构造器,Java会自动生成一个不带参数的构造器(通过反汇编可以看到)

   ⑦ 一旦定义了带参数的构造器,Java就不再提供不带参数的构造器,此时我们想使用不带参数的构造器就得自己手写了。

   ⑧ 在构造器的第一行可以通过this(...)调用其他的构造器,但是注意不能成环。

    构造方法在每一个对象的生命周期中只会调用一次。

12 封装

【1】介绍:封装是面向对象编程的三大特征之一。概念:用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。

【2】封装的设计规范:合理隐藏,合理暴露。我们在设计对象的成员时,将对象的成员变量都隐藏起来,并暴露合适的get 和 set 方法供外界访问(get和set方法里面我们可以通过逻辑控制语句对取值和赋值进行限制);在设计对象的成员方法时暴露必须暴露的就行了。

【3】代码层面控制公开和隐藏的关键字是:public 和 private。

【4】进一步解释:如果将一个成员变量完全暴露,那么使用者就可以任意修改该成员变量的值,  如果更改成一些不合理的值显然是不行,所以我们可以将成员变量使用private关键字封装起来,当使用者想要对被封装的成员变量进行重新赋值和获取时,我们可以设计合适的get和set方法提供用户使用(get和set方法里面我们可以通过逻辑控制语句,控制用户的赋值和取值,例如下图代码)。

13 实体类(JavaBean)

【1】形式:第一点:这个类中的成员变量必须定义成私有的,且要对外提供相应的get 和 set方法,第二点:这个类中必须有一个公共的无参数构造方法,其他的构造方法可写可不写。

【2】意义:实体类只负责数据的存储,而对于数据的处理交给其他类来完成,以实现对数据和数据业务相分离的效果 (这时现阶段软件开发里比较流开发模式)。

【3】使用示例:判断某学生的成绩是否及格:

【4】对于使用实体类的思想理解可以从:上图中的《判断某学生的成绩是否及格》或 文件夹中的《模仿电影信息系统》,《上架菜品和展示菜品》进行感悟。

14 成员变量和局部变量的区别

15 案例:模仿电影信息系统


代码位置:模仿电影信息系统.txt

面向对象编程是一种编程范式,它将程序的构建和设计思路以面向对象的方式进行组织和实现。在Java中,面向对象编程是基于Java SE(Standard Edition)的一种编程方式。第07讲主要介绍了面向对象编程中的一些基本概念和关键术语。 在面向对象编程中,我们将程序中的数据和对数据的操作(方法)封装在一起,形成一个对象。对象由两部分构成:属性和方法。属性是用来描述对象的特征,而方法则是对象可以执行的操作。对象之间通过消息(方法调用)进行通信和交互。面向对象的核心思想是通过封装、继承和多态实现程序的复用和扩展。 封装是面向对象编程中的一个重要概念,它指的是将类的属性和方法进行封装,使得外部无法直接访问和修改对象的内部状态,只能通过公共的方法来操作属性和执行方法。封装提供了一种将数据和行为组合在一起的方式,可以保护数据的完整性和安全性。 继承是面向对象编程中的另一个重要概念,它指的是通过定义一个新的类来继承现有类的属性和方法。通过继承,子类可以继承父类的属性和方法,并可以在此基础上进行扩展和修改。继承提供了一种代码复用的机制,可以减少重复编码的工作量。 多态是面向对象编程的又一个重要概念,它指的是同一类型的对象在不同的情况下可以有不同的表现形式。多态通过方法的重写和方法的重载实现。方法的重写指的是在子类中重新定义和实现父类的方法,方法的重载指的是在同一个类中可以定义多个同名但参数列表不同的方法。 总结来说,面向对象编程是一种将程序组织和设计思路以对象为中心的编程方式。在JavaSE中,我们可以通过封装、继承和多态来实现面向对象编程的目标。封装可以提高程序的可维护性和可复用性,继承可以减少重复编码的工作量,多态可以灵活地操作对象。掌握这些基本概念和关键术语,可以帮助我们更好地理解和应用面向对象编程的思想。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值