黑马程序员——Java基础---面向对象总结

来源:互联网 发布:java 就业培训机构 编辑:程序博客网 时间:2024/05/09 10:05
------- android培训、java培训、期待与您交流! ---------

面向对象

一,概述

学习JAVA语言必须掌握理解面向对象,这样可以从深层次理解JAVA这种面向对象的程序开发理念,从而更好更快地掌握JAVA的编程思想和方法。掌握面向对象是JAVA语言编程的基础,那么,首先到底什么是对象呢?

对象就是事物存在的实体,例如:人、计算机、手机、鞋子等。我们解决一个问题,首先是将复杂的事物简单化,分析这个事物是由哪些部分组成的。通常都会将对象划分为两个部分,即动态部分与静态部分。

静态部分,顾名思义就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,它包括高矮、胖瘦、性别、年龄等属性。然而具有这些属性的人会执行哪些动作也是一个值得探讨的部分,这个人可以吃饭、说话、走路、睡觉,这些是这个人具备的行为(动态部分),我们通过探讨对象的属性和观察对象的行为了解对象。

Java就是一门面向对象的语言,怎么理解面向对象?首先,我们知道C语言是一门面向过程的语言,它强调的是过程,例如:打开冰箱——>把大象装进冰箱——>关闭冰箱。而Java面向对象的思想就是强调具有功能的对象:冰箱打开,冰箱存储,冰箱关闭。面向过程给人的感觉就像是你亲自在做,而面向对象是你指挥对象去做。

 

二,面向对象的特点:

1. 是一种符合人们思考习惯的思想

2. 可以将复杂的事情简单化

3.将程序员从执行者转换成了指挥者

4. 完成需求时:

     a) 先要去找具有所需的功能的对象来用。

     b) 如果该对象不存在,那么创建一个具有所需功能的对象。

     c) 这样简化开发并提高复用。

在Java的开发过程,其实就是不断的创建对象,使用对象,指挥对象做事情。设计的过程,其实就是在管理和维护对象之间的关系。

面向对象的三个特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)

 

三,封装

1,概述

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。

2,优点

a) 将变化隔离。

b) 便于使用。

c) 提高重用性。

d) 调高安全性。

3,原则

将不该对外提供的,都隐藏起来。提供公共的访问方法。        

4,私有(private)

私有就是封装的一种体现形式。注意:私有仅仅是封装的一种体现形式而已。

private : 是一个权限修饰符,只能修饰成员(成员变量和成员函数),私有的成员只在本类中有效。

当成员私有后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有方法的形式对其进行访问,这样的好处是:可以在方法中对成员变量的访问进行控制。

通常将成员变量私有化,并通过对外提供set和 get方法对其进行设置和获取。

例如:一个美女,你只知道她的名字,生日只有她自己知道。

下面用代码来实现这个对象:

/* * 创建一个美女对象 * */class BelleModel {public String name;//公有化美女的姓名private int age;//私有化美女生日public int getAge() {//提供共有的获取方法return age;}public void setAge(int age) {//提供访问方法,并判断是否有效 if(age>0 && age<150)          {  this.age = age;          }          else {        System.out.println("无效的年龄");        } }}class Belle{public static void main(String[] args) {BelleModel b = new BelleModel();//创建美女对象b.setAge(21);//使用封装提供的访问方法修改年龄b.name = "小红";//姓名是公有的,直接进行赋值int age = b.getAge();//获取封装提供的获取方法获得年龄System.out.println("这个美女的名字是"+b.name+",芳龄"+age);}}

四,构造函数

1、 特点:

            a) 函数名与类名相同。

            b) 不用定义返回值类型。

            c) 不可以写return语句。

             d)在对象建立时就直接被调用。

        2,作用

              在建立对象时,对对象进行初始化操作。

        3,构造函数与一般函数的区别

一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立时,应该具备的一些内容。也就是对象的初始化内容。

构造函数是在对象建立时被调用。给对象初始化。一般函数是对象建立后,当对象调用该功能时才会执行。

4,什么时候使用构造函数?

                当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

5,什么是构造代码块?

用于给所有对象进行初始化。

它在构造函数之前执行。

构造函数是给与之对应的对象进行针对行的初始化。

6,对象的建立以及初始化过程

Person p = new Person();//到底在内存中做了什么事情.

 

a,将Person.class文件加载进内存。

b,如果p定义函数中,那么在栈内存中开辟一个变量空间p。

c,在堆内存中给对象分配空间。

d,给对象中的属性进行默认初始化。

e,给对象中的属性进行显示初始化。

f,调用构造代码块对对象进行初始化。(执行类中的构造代码块)

g,调用对应的构造函数进行对象初始化。对象初始化完毕。

h,将对象内存地址赋值给p变量。让p变量指向该对象。

 

构造函数和构造代码块代码示例:

/* * 创建一个美女对象 * */class BelleModel {public String name;//公有化美女的姓名private int age;//私有化美女生日{this.name = "美女";this.age = 18;System.out.println("这是构造代码块,优先于构造函数执行,为所有的对象进行初始化");System.out.println("这个美女的名字是"+this.name+",芳龄"+this.age);}BelleModel(String name) {//构造函数,只初始化姓名this.name = name;}BelleModel(int age) {//构造函数,只初始化年龄this.age = age;}BelleModel(String name,int age) {//构造函数,只初始化年龄this.name = name;this.age = age;}public int getAge() {//提供共有的获取方法return age;}public void setAge(int age) {//提供访问方法,并判断是否有效 if(age>0 && age<150)          {  this.age = age;          }          else {        System.out.println("无效的年龄");        } }}class Belle{public static void main(String[] args) {BelleModel b = new BelleModel("小红",21);//创建美女对象,并初始化int age = b.getAge();//获取封装提供的获取方法获得年龄System.out.println("这个美女的名字是"+b.name+",芳龄"+age);}}

执行结果:



五,this关键字

上面的代码结合了this的使用方法,这里简单介绍一下:

this代表它所在函数所属对象的引用。

   简单说:哪个对象在调用this所在的函数,this就代表哪个对象。

this的应用:

   当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。

   但凡本类功能内部使用到了本类对象,都用this表示。

this语句:

   用于构造函数之间进行互相调用。如:this(name);

   this语句只能定义在构造函数的第一行。因为初始化要先执行。

this的两种用法:

1,用于区分同名变量的情况,说的成员和局部同名的时候;

2,用于构造函数间调用。

注:一般函数不能直接调用构造函数,因为this语句不能用在一般函数中,只能用在构造函数间。

 

六,静态(static)关键字

1,概述

static是一个修饰符,用于修饰成员(成员变量和成员函数)。当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。格式:类名.静态成员。

2,static特点:

        a,随着类的加载而加载,随着类的消失而消失,它的生命周期最长。

         b,优先于对象存在。也就是说静态是先存在,对象是后存在。

        c,被所有对象所共享。

         d,可以直接被类名所调用。

3,利弊

好处:对对象共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。可以直接被类名调用。

       弊端:生命周期过长。访问出现局限性(只能访问静态)。

注意:

a,  静态方法只能访问静态成员。非静态方法既可以访问静态又可以访问非静态。

b,  静态方法中不可以定义this,super关键字。因为this代表是对象。而静态存在时,有可能没有对象。所以静态方法运行时,this是没有任何对象代表的。

简单说,先进内存的数据不可以访问后进内存的数据,可是后进内存数据可以访问先进内存的数据。

c,主函数是静态的。



------- android培训、java培训、期待与您交流! ---------
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机锁屏密码忘了怎么办 黑色t恤洗了掉毛怎么办 老婆要和我离婚我该怎么办 发现老婆有外遇最明智的怎么办 高度近视怎么办我快一千度近 天刀耐久度为0了怎么办 新车被4s店装了怎么办 h面和w面联系线怎么办 造梦西游3到80级怎么办 加95的车加了92怎么办 95的车加92的油怎么办 宝宝六个月了奶水变少了怎么办 六个月的宝宝不爱吃奶粉怎么办 脸上挤黑头留下的小坑怎么办 小孩身上起红疙瘩很痒怎么办 肛门上长了个肉疙瘩怎么办 脚撞了一下肿了怎么办u 怀孕9个月同床了怎么办 结婚两年了都没怀孕怎么办 怀孕快40周了没有生的迹象怎么办 生完小孩掉头发很厉害怎么办 我27岁欠50多万怎么办 8岁童牙齿摔松了怎么办 我的眉毛后半边很稀少怎么办 剑三95修为满了怎么办 21三体综合症临界高风险怎么办 率土之滨没地了怎么办 老公有外遇怎么办他还舍不得小三 11选5输了6万 怎么办 k宝密码忘了怎么办5次 k宝密码输错5次怎么办 上火了牙疼怎么办怎样快速止疼 身体不吸收营养胖不起来怎么办 突然牙疼怎么办教你立刻止疼 蛀牙疼怎么办教你立刻止疼 做了牙套的牙疼怎么办 牙疼怎么办教你立刻止疼 七个月宝宝便秘拉不出来怎么办 喝酒脸上起了很多小红疙瘩怎么办 我的脸又痒又红怎么办 脸又红又痒又烫怎么办