java学习之面向对象概念
思考的两种方式:
举例:
把大象放到冰箱里
一、面向过程 :【打开冰箱-》把大象放里面-》关上冰箱门】面向过程注重的是过程,也就是(动作【函数】),然后按照动作依次去执行就好了。
代表语言是C语言
二、面向对象:找到冰箱,做了封装【冰箱打开,冰箱存储,冰箱关闭】面向对象强调的是对象,面向对象强调的是对象(实体)。冰箱就是一个对象,本身具有的功能有:打开、关闭、 存储。
代表语言:C++,java,C#
面向对象的特点:
1、面向对象是常见的一种思想,符合人们的思考习惯。
2、面向对象的出现,将复杂的事情简单化了。
3、面向对象的出现,让在过程当中的执行者,变成了面向对象过程中的指挥者。
举例:
1、去科技市场攒机。
面向过程: 步骤:1、查看杂志,查看资料,
2、去询价,拿报价单。
3、组装电脑
面向对象: 步骤:找一个对象,比如说找个攒机高手一起去攒机,让他去查资料、询价、砍价、组装电脑。至于他怎么做,我们都不用管,我们只关注结果就好了。为什么找这个攒机 高手呢,因为他有这个功能。这样我们就能提高效率,并且能够发挥对象的最大功能。这里的攒机高手就是一个高手,他就有攒机的这些功能,我们直接调用就可以 了。
面试:1、面试官会问对面向对象的理解。首先要说出面向对象的三个特点,由于表述还有各个人理解的方式不一样。所以得举例。
首先他符合我们现在人的思考方式,他能够使复杂的事情简单化,由执行者变成指挥者。面试官,您本身就在用面向对象的方式思考问题:因为您的能力而言,软件项目您从 开发,测试都能够完成,但是特别耗时间,所以为了提高效率,您需要找专业编程能力的去写程序,我就是您要找的那个对象,我具备编程能力的功能。
多琢磨日常生活中的例子。
在进行java变成的时候,我们操纵的数据都是有所属的。一个人的年龄,高度,数据就存在在对象当中,找到对象就找到数据了。对象就是一种对数据的封装,考虑一个问题的时候,要知道其中存在哪些对象,找具有相关功能的对象去完成,然后去维护各个对象之间的关系。
二、面向对象的三个特征,只有具有这三个特征才会称之为面向对象编程。
1、封装
2、继承
3、多态
大象的能吃、能睡、能跑。这样是不可以的,面向对象语言,要体现其特征:大象很大,大象鼻子很长......
举个例子:人们开门,在人开门的过程当中。简单的分析,名词体现法,名词就是对象。两个对象:人、门。 “开”功能是归属人呢?还是门呢?诀窍:当我们创造对象的时候,这个就是要考虑的。基本判断规则:哪个对象对这个规则最清楚,就定义在谁上面。 在这个例子当中,人最清楚如何去使用门,开的功能是门所具备的,门最清楚如何怎么开,门开的的时候需要叶片,门轴这些东西,这些东西都在门里面,这些东西都得门去操作。人开门是调用的门的开的方法。
先分析有哪些对象,核心是对象。想实现功能,先考虑有哪些对象。
那么在之前没学对象的时候,那个类是什么东西呢?类跟对象有什么关系呢?
举个例子来说:
比如说现在我们有两辆汽车,如何描述这两个汽车呢?
首先汽车有4个轮子,汽车的颜色不一样。如果我们想生产汽车,必须要一张图纸。图纸要描述,我们要造一个小汽车。
图纸:这些小汽车都有轮胎数,都有颜色。
图纸的作用就是描述,小汽车这类事物。描述完之后,就开始造汽车了,汽车这个实体就是图纸的表现。
接下来,通过java语言来对现实事物进行描述,这里就是通过类来进行描述的。对于事物描述,我们只关注两个方面,一个是:属性(姓名、年龄);一个是:行为(功能,能干什么)。
属性是通过数值来体现,行为的体现是功能。这些就是类的特点:描述。java当中的类,来对现实生活的描述,包括属性和行为。
对象的产生,只要用new java类就得到了这个类的对象。对象就是类实实在在存在的个体。
那么如何定义这个类呢?在java当中定义类,要用class关键字声明,然后类里面声明类的属性还有类的功能。代码示例:
class Car { int num;//num成员变量这个声明了汽车的轮胎数 String s;//String成员方法这个声明了汽车的颜色 /** *run()函数声明了这个类中的成员方法 */ void run() { System.out.println(num+"-------"+s); } } class CarDemo { public static void main(String[] args) { Car c1 = new Car();//通过new关键词,这里声明了c1这个汽车对象,Car就是这个对象的类型 c1.num = 4; c1.s = "red"; c1.run();//这里调用了这个对象的方法。 } }
那么这个对象在内存当中是如何表现的呢:
在写代码之前,一定要想好思路,因为代码是思想的一种体现。
定义类就是定义类中的成员。
两种成员:1、成员函数;2、成员变量。
成员变量是定义在类当中的,作用域为整个类,而局部变量是存在与函数当中的,只能存在于函数当中。
成员变量和局部变量的区别:
1、成员变量的是定义在类当中的,作用域为整个类。局部变量是定义在函数当中的,其作用域只存在于函数当中。
2、成员变量必须进行初始化,JVM在成员变量为空的情况下,会自动初始化其值。而局部变量必须人为初始化。
3、成员变量在堆当中随着对象的消亡而消亡,局部变量在栈当中,函数执行完之后,就会消亡。
4、成员变量在整个类当中都可以被访问,但是局部变量只能在自己的作用域当中即自己所在的函数当中被使用。
面向对象成员变量和面向对象局部变量同名的时候,会调用哪个呢?
class Car { int num;//成员变量,为空的时候是默认初始化,当我们给它赋值的时候是显示初始化:int num=4;这个就是显示初始化 String s; void run() { int num = 10;//局部变量,因为当他加载的时候是在栈当中,在栈当中找到之后,就不会去堆内存当中找了,此时打印的就是num=10 System.out.println(num+"-------"+s); } } class CarDemo { public static void main(String[] args) { Car c1 = new Car(); c1.num = 4; c1.s = "red"; c1.run(); } }
当我们定义成员变量的时候,如果给其赋值,这个是显示初始化,如果不给他赋值的话 是默认初始化。同样当,成员变量和局部变量,在局部变量所在的作用域被调用的时候,会优先使用局部变量,因为局部变量在栈当中,和成员方法在一个内存区域,他就不会去堆内存当中去寻找了。
匿名对象:
什么是匿名对象?匿名对象顾名思义,就是没有名字的对象。比如现在我们定义一个
class Car { int num; String color; void run() { System.out.println(num+"----"+color); } } class CarDemo { public static void main(String[] args) { new Car().run(); } }
这里需要注意的是,在类CarDemo中我们直接new 了一个对象,并没有把这个对象赋给谁,那么这里的new Car()就是一个匿名对象,那么他在内存当中是如何存储的呢?
匿名对象的使用场景是:当只需要调用一次对象的属性或者方法的时候,可以使用匿名对象。
(tobecontinue)
class CarDemo { public static void main(String[] args) { int x = 3; Vset(x); System.out.print(x); } public static void Vset(int x) { x =4; } } class CarDemo { int x = 3; public static void main(String[] args) { CarDemo cd = new CarDemo(); Vset(cd); System.out.print(d.x); } public static void Vset(CarDemo d) { d.x = 4; } }
java是一门面向对象的语言。那么什么叫做面向对象呢,这个意思是说在java当中一切皆为对象。