Java面向对象入门

主题:Java面向对象编程

主要学习以下内容:
1.编程语言的发展,理解类和对象的概念
2.Java的面向对象详解
1.开场语:
今天咱们来学习java语言的核心特性,面向对象的入门课程。希望大家能够通过讲解了解到类和对象的概念,java中对象的创建,java对象的访问,以及如何用面向对象思维去思考问题。在讲解面向对象编程之前我们先来了解下编程语言的发展历程。
这里写图片描述
2.最早的编程语言是机器语言,也就是大家熟悉的0,1这样的二进制代码,这是第一代编程语言,因为这样的代码计算机硬件直接就可以运行,所以不需要编译,效率很高,但是我们说编程太难,因为程序员要清楚底层硬件的相关知识,而且二进制代码很难记忆,对开发人员要求太高,所以开发成本就太高。
3.正因为难于记忆,后来采用了助记付,也就是汇编语言,用助记符号表示机器指令的符号集合。我们只需要写一些定义好的符号,会被翻译成具体的机器指令,相对好记忆,但是编码还是复杂。当然执行效率还是很高的,毕竟是直接将助记付翻译成机器码运行,这是第二代编程语言。
4.为了降低编码复杂度,后来出现了第三代编程语言,也就是我们说的高级语言,最有代表性的就是大家学的c语言,这种语言更接近与我们的自然语言,降低了我们编码工作量,但是需要编译然后在运行,当然效率比之前要低,但是开发效率得到很大提高。
5.随着对开发效率的要求越来越高,我们希望能够更快的实现编程,而且希望同一段代码能够得到重复使用。最理想的状态是我们编程语言最好是说的大白话,写完需求就做完开发才好,当然这不太可能。为了满足市场需求。第四代编程语言也随之产生,这就是面向对象的语言。虽然达不到理想状态,但是也是很接近自然语言了。这其中具有代表性的就是Java语言。这种面向对象语言的思想是把一个系统看作是由很多对象构成的,问题的解决靠的是对象相互作用和组合完成的,后面我们详细探讨。
6.这几年随着人工智能的发展,第五代语言也称智能化语言。它主要使用在人工智能领域,帮助人们编写推理、演绎程序
下面我们重点来看面向对象的编程语言,先看几个概念吧。既然面向对象,那么第一个概念,什么是对象?
7.一句话,对象是一切客观存在的事物。比如我们的电脑,坐的椅子,吃的食物,只要看得见摸的着的都是对象,他们都可以帮助我们解决一些实际问题的。,比如食物用来吃的,椅子用来休息的,电脑用来工作和玩游戏等等。总体一句话对象是具体的,客观的,通俗说就是能具体做事情的。
8.第二个概念,什么是类?其实类就是类型的意思,有句话叫物以类聚,人以群分。任何人或者物体都最终要被划到某种类型。谁来做这种划分,相信不同的人会做出不同的划分。所以类其实是一个主观的概念。经过人大脑思考的。比如我们看到大黄,小黑,旺财,发现他们都能发出汪汪的叫声,而且睡觉吃饭习性也基本相同,我们可以把他们归纳为一类叫做狗,这就是类的概念.
9.知道了类和对象的概念,那么二者关系是什么呢?我们说狗是类,而大黄,小白都是对象个体,所以类是创建对象的模板,编程语言中需要先创建类,然后才能基于类创建对象。好比说大家上美术课,美术老师下课给大家布置了一个作业,就一句话,要求画一个美女。然后大家可能按照自己头脑印象中的美女样子形成作品,这里美女是一个概念,也就是类,是抽象的,每个人画出来的作品是基于这个概念产生的对象,所以类是产生对象的模板和依据。
10.那么,在java中的类和对象怎么表示呢?其实和刚才生活中的描述是一样的。比方说我们要描述学生这一类群体,就要根据同学们的共同特征和共同功能来归纳一个学生的概念,学生都有姓名,年龄,都能吃饭,能睡觉,能学习。我们用Java代码写成了这样一个简单的类代码。
这里写图片描述
11.我们可以看到java中类的定义有三部分,首先class后面的是类名Student,然后里面定义的是属性和方法,属性有姓名和年龄,方法有学习,吃饭和睡觉,所谓方法就是功能.写好了这个类之后我们只是定了个学生的概念,是一个抽象的东西,而真正能帮我们做事情的是实际存在的对象。用java代码怎么得到对象呢?当然是基于类来创建的,语法是这样的:
这里写图片描述
12.new的意思是产生,新建的意思。后面的Student()明显是一个函数调用的格式,大家学过c语言应该知道。只不过这个函数有点特殊就是方法名字和类的名字一样,所以这个函数还有个名字叫做构造函数,顾名思义,就是构造java对象的函数。这句代码产生了一个真正的学生对象,这种客观存在反映到计算机中就是内存中划了一块空间,专门存放该学生,但此时学生对象的姓名和年龄属性还没有赋值,都是空。
这里写图片描述
14. 可能有同学会问名字叫做Student方法哪来的,类里面没有啊?默认情况下java编译器会自动为类提供一个空参数,空实现的构造函数,所以通过这样的方法调用student对象产生了,但是属性上还没有具体化。我们也可以重新定义一个函数来构造对象,可以写几个同名的函数但是不同参数的方法,但必须保证函数名必须和类名一样。
这里写图片描述
15.大家看到图中这几个构造方法名字一样,但是参数不一样,这叫方法的重载。我们需要新建对象时,可以根据情况调用合适的构造方法即可。这样如果通过调用两个参数的那个构造方法,姓名和年龄一开始就可以赋值到内存的对象中去了。
16.目前的情况是学生对象我们制造出来了,就存放在我们计算机内存中,但是想利用对象帮助我们做事还需要能够访问他,但是问题是我们还无法访问他,原因是我们触碰不到那块内存,那java中如何访问内存中的对象呢? 大家先想想我们怎么放风筝,都是有根线连着,不然就没法控制风筝了,就只能看风筝了。看电视如果没有遥控器,就不方便控制电视了。也就是说我们要操控或者修改对象,是需要有借助于某样东西来操控内存才可以,这样东西在java中就是变量,也叫引用,代码是这样的。
这里写图片描述
17.这里面有个问题大家需要引起注意,我们用变量s来访问java对象,但变量s并不等于对象本身,其实它只是记录了对象的具体地址,如果把整个计算机内存比作一个房子,那student对象就像是一个房间,而变量s的值实际上就是房间号,也就是对象的地址,显然房间地址和房间本身不能划等号。我们知道java代码最终在jvm中运行,那Student s=new Student这句代码反映到虚拟机内存中是怎样呢,我们看一下
这里写图片描述
18.jvm内存逻辑上分为三部分,左边叫堆栈区负责存放局部变量的,比如刚才的变量s就存在这里,大家平时定义的基本数据类型的字面值也存在这里。中间是堆区,负责存放对象,比如我们new出来张三,李四两个学生的对象都在这里,这种对象一般创建开销比较大,而且存在时间比较长,只要是new的java对象是在这里开辟空间,也是在这里被垃圾回收的。最右边是方法区,这部分内存区域里面的内容是变动最少的,一般存放我们定义的类当中的方法,类的字节码信息等,这部分区域被所有对象共享,从而节省了存储空间。这部分知识,大家了解一下可以帮助我们更好的理解以后的java学习。
19.明白了内存结构之后,我们来看看从代码层面来看看具体如何通过变量s访问属性和调用方法
这里写图片描述
20.我们看到用点访问符,用变量点属性访问属性,用变量点方法名访问方法,例如修改对象名字,s.name=“Tom”,s.age=22,修改内存中对象的属性值,调用方法也是一样,s.study表示调用该学生的学习功能,s.sleep表示学生睡觉。
21.有了这些知识,我们可以想象,只要有现成的类,我们就可以创建对象,然后通过调用对象的方法来为我们做事情。这非常接近于我们的生活中的实际情况,java就是这么一门编程语言,跟c语言有着巨大的不同。c语言是面向过程的,给你一个问题,我们总是习惯性考虑第一步怎么做,然后第二步怎样,第三部。。。。。,而且步骤之间关联紧密,有一部要改,可能牵动其他步骤,这种方式其实很复杂,一旦修改,难度很大。
22.java语言是面向对象的思维,如果之前学过c语言大家要慢慢转变这种思维,给我们一个问题,我们首先要考虑这个问题涉及到哪些对象,再从这些对象当中求解,如果有现成的对象我们直接使用就行,没有我们也可以自己先设计一个类,然后基于类创建对象,一个问题的解决更像是许多独立对象相互合作完成。
22.就比如许多年前有首歌唱的老张开车去东北,面向过程思维就是先制造一辆车,然后熟悉怎么开车,包括挂挡起步等等,然后知道去东北怎么走,获取路线等等,听起来很复杂,其实面向对象是这样思考的:把车给司机老张,告诉他去东北。是不是很自然,更符合实际问题描述呢?
23.面向对象不仅能简化编程,而且还能减少未来代码修改带来的难度,好比我们开一个餐馆,顾客点了一份炒饭,现在顾客突然提出不想吃里面的鸡蛋,从蛋炒饭里面挑出鸡蛋,你也只能臣妾做不到了。如果我们改进下设计,做成菜和饭分离,比如做成盖浇饭,顾客提出换菜要求,我们可以轻松分离二者,这里的菜和饭分别是两个不同对象,他们是独立的。而且可以自由和别的对象结合,这样就很容易修改客户要求,而且提高了代码重复利用率。Java安装包里面也给我们提供了大量现成的类供我们使用大大降低了我们平时编码的难度,从而使我们开发效率跟高。
24.下面我们举个简单的例子,来体验下面向对象编程。比如需要做一个计算器软件,我们需要先有个计算器的界面,然后里面放上一些数字按钮和运算符按钮,大家都见过这个样子:
这里写图片描述
25.那用Java怎么开发呢?先描述一下界面吧,有个窗口界面是吧(窗口是啥,肯定是一个对象),里面按照一定的布局放置了好多按钮,按钮是什么,肯定还是对象。而这些对象有没有现成的类呢,java里面swing给我们提供了。我们先设计页面布局,想好怎么摆放按钮和符号
这里写图片描述
26.接下来我们准备用java代码实现刚才的设计,既然是面向对象,一切依赖对象实现,javax.swing包里面给我们提供了大部分现成的界面类,具体代码如下图
这里写图片描述

27.大家可以看到,new JFrame就是产生一个窗口,然后新建了一些button对象,然后看到向窗口中调用add方法,添加按钮,最后设置窗口的大小,位置等等。是不是非常接近于我们设计计算器窗口中的实际情况。代码本身是否非常接近于我们的文字描述了。这样我们就产生了一个真正的计算器界面。运行结果
这里写图片描述
28.我们进一步考虑,如果我们需要多个计算器呢?好多地方都可能使用到计算器,大家可以继续用面向对象来考虑,计算器本身就是一个类别,我们为什么不见一个计算器的类呢?
把刚才代码一改造
这里写图片描述
22.我们建立了Calculator类,如果需要计算器只需要new Calculator即可。这实际上就是面向对象的编程。当然面向对象还包括一些其他特性,比如封装,集成和多态,这个需要在理解面向对象概念这个前提下去学习。

最后我们总结下,今天主要内容是1.理解类和对象的概念,明白类是抽象的,对象是具体的,对象是基于类的构造方法创建的。2.如何访问对象,通过变量访问对象,理解变量
的值实际上是对象在内存中的地址。3.学会面向对象思考问题的方式,就是先从项目中找出相应的对象,如果有现成的对象可用就直接使用,没有就先设计类,最后通过对象
的相互作用实现我们的目的。

今天分享到此结束,谢谢大家,希望能有所收获。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值