现在的位置: 首页 > 综合 > 正文

第三章 面向对象(一)–类与对象

2013年11月20日 ⁄ 综合 ⁄ 共 2748字 ⁄ 字号 评论关闭

1、基本概念

1)过程与对象都是一种解决问题的思想。

     面向过程:强调的是功能行为,一种过程,先干啥,再干啥;

         面向对象:将功能封装到对象里,强调的是具备某功能的对象;

2)面向对象的三个特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)

 

2、类与对象

1关系:类是对象的抽象,而对象是类的具体实例

    类:表示一个客观世界某类群体的一些基本特征的抽象

    对象:是表示一个个具体的东西

2)类的定义

        [修饰符] class  类名

       {     

              1~n个构造方法;   

              0~n个字段(field);   

             0~n个方法; 

        }

     1)修饰符:可省略,或是publicfinalabstract中的一个

     2)构造方法:用来构造类的实例(默认有一个无参的构造方法,得使用new调用)

            格式:[修饰符构造方法名(形参列表)。。。}

            修饰符:可省略,或是publicprotectedprivate中的一个

           构造方法名:必须与类名相同

   【注】:A、其声明处不能有任何返回值类型的声明

          B、不能使用return返回一个值;(return;可以)

    3field(成员变量|字段|域):类或对象所包含的数据,对类状态的一种描述

           格式:[修饰符] field类型 field[=默认值]

           修饰符:可省略,或是publicprotectedprivate中的一个,staticfinal

  4)方法:类或对象的特征和行为

        格式:[修饰符方法返回值类型 方法名(形参列表){。。。}

        修饰符:可省略,或是publicprotectedprivate中的一个,staticfinal|abstract

3)对象的定义、创建和使用

         A、格式:类名  对象名称 = new 类名(); //其实是两步操作

             类名  对象名称 ;     //声明对象

             对象名称 =  new 类名();     //实例化对象

         B对象名保存在栈内存(访问地址)中,对象的具体内容保存在堆内存

         C、“对象名.对象成员”的方式来操作对象中的内容

                访问属性:对象名.属性名;

                访问方法:对象名.方法名

(3)匿名对象

   定义:不定义变量引用对象,使用new关键字创建对象后直接使用,这样的对象没有名字,所以叫匿名对象

   特点:A匿名对象只进行一次调用,而且它只在堆内存中开辟空间,而没有在栈内存的引用。当对象对成员进行多次调用时,不能使用匿名对象,必须给对象起名字。B可作为实际参数进行传递。new Car().show(new Car());

(4)成员变量和局部变量的区别:

    1:成员变量直接定义在类中,整个类中都可以访问;局部变量定义在方法中,参数上,语句中,只在所属的区域上有效。

    2:成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。

    3、成员变量都有默认初始值,而局部变量则没有

   补充:成员变量初始化

              当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。基本数据类型初始化值为0,引用数据类型初始化值为null

 

(5)构造函数 (构造器 == 构造方法)

        1特点:A方法名与类名相同 B不用定义返回值类型 C不需要写return语句

        2作用:给类中的字段进行初始化,可以用来创建对象

        3记住:所有对象创建时,都需要初始化才可以使用。(new都会调用构造函数

       注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。

      一个类中,可以有多个构造函数,因为它们的函数名称都相同,所以只能通过参数列表来区分。所以,一个类中如果出现多个构造函数。它们的存在是以重载体现的。

    4构造函数和一般函数有什么区别呢?

     1:两个函数定义格式不同。

     2:构造函数是在对象创建时,就被调用,用于初始化,而且初始化动作只执行一次。一般函数,是对象创建后,需要调用才执行,可以被调用多次。

    5什么时候使用构造函数呢?

         分析事物时,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内。

   6构造代码块和构造函数有什么区别?

         构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。构造函数:是给与之对应的对象进行初始化。它具有针对性。

    7Person p = new Person();

    创建一个对象都在内存中做了什么事情?

            1:先将硬盘上指定位置的Person.class文件加载进内存。

             2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p

            3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new

            4:在该实体空间中进行属性的空间分配,并进行了默认初始化。

            5:对空间中的属性进行显示初始化。

            6:进行实体的构造代码块初始化。

            7:调用该实体对应的构造函数,进行构造函数初始化。()

            8:将首地址赋值给p变量就引用了该实体。(指向了该对象)

8setter方法和构造方法都可以用来初始化字段的值,那么什么时候用构造方法什么时候用setter

      A当字段的值是和类的对象紧密相关不可分割的时候,用构造方法,就是说我要有这个实例,就必须有这个字段值,就用构造方法。

      B需要初始化的字段值不太多的时候可以用构造方法,如果字段值太多,构造方法的参数列表太。。。了。

      C其他时候都可以用setter方法。

 

 

抱歉!评论已关闭.