黑马程序员--------------面向对象(一)

来源:互联网 发布:延安大数据 编辑:程序博客网 时间:2024/05/13 08:18
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

1,什么是面向对象

      面向对象是一个抽象的思想,它是相对于面向过程而言的。例如,将大象装到冰箱。面向过程,是先打开冰箱门,再将大象装进去,再关上冰箱门。而面向对象,是将开门和关门的动作封装到冰箱对象的内部,先将冰箱的门打开,再将大象装进装箱里,再将冰箱的门关上。

    面向过程:强调的是开门和关门的动作。面向对象:因为将开门和关门封装到了冰箱内部,我们只是调用冰箱的开门和关门的功能。所以按照而向对象的思想,我们可以将作任何事件都看作是对象。面向对象的特点:1,将复杂的事情简单化。2,将执行者变成了指挥者(冰箱.关门)。

       面向对象有三个特征:多态,继承,封装

2, 怎么对事物进行描述?

     对事物的描述可以分为两个方面:一是属性,二是行为。属性可以看作是成员的变量,行为可以看作是成员函数。例如对小汽车这类事物进行描述,它的属性可以是轮胎数和颜色,而行为是它具备运行的功能。类与对象之间的关系:类是一类事物的描述。而对象则是这类事物的实例。如上例中的汽车图纸是类,而每一辆汽车则是单个的对象,可以通过new 来创建。

3,成员变量和局部变量的区别?

  作用范围:成员变量作用于整个类中。而局部变量是作用于函数中,或者是语句中。

  在内存中的位置:成员变量在堆内存中,随着对象的创建而存在,随着对象的消失而消失。局部变量是随着所属区域的运行而存在,                                当所属区域运行完后就释放。

  初始值:成员变量有默认的初始化值,而局部变量必须要有初始化值,否则编译失败。

4,构造函数

     

      构造函数:创建对象时调用的函数。作用:可以给对象进行初始化。对象的创建必须要通过构造函数进行初始化。一个类中如果 没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数。如果定义了构造函数,那么就没有默认的构造函数。

特点

1该函数的名称和所在类的名称相同。

2不需要定义返回值类型。

3该函数没有具体的返回值。

一般函数与构造函数的区别:

构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化,并且只调用一次。

一般函数:对象创建后,需要它的功能时才调用,可以调用多次。

什么时候定义构造函数?

   在描述事物时,当该事物一存在就具备一些内容时,就将这些内容定义在构造函数中。构造函数可以有多个,它可以用来对不同的对象进行针对性的初始化。当有多个构造函数时,这些构造函数就是以重载的方式体现的。例如:

class Person

{

     Person(String name)

{

    this.name=name;

}

Person(String name,int age)

{

     this.name=name;

      this.age=age;

}

}

以上这个定义Person类中,就有两个构造函数,第一个是表示人出生就有姓名,而第二个则表示人一出生就有姓名和年龄。

当在创建人的对象时,在内存中是怎么样完成的?

   Person p=new Person();

    步骤:

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

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

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

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

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

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

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

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

 

5,构造函数和构造代码块的区别:

    构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块(可以在上面Person中定义一个哭的构造代码块,因为人出生时都会哭)。

  

构造函数:是给与之对应的对象进行初始化。它具有针对性。

6,匿名对象

     当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化代码的书写。

     Car c=new Car();

    c.num=4;

    可以写成:new Car().num=4;

7,匿名内部类

     也就是没有名字的内部类,一般只调用一次的情况下才会写匿名内部类,当需要多次调用内部类时,就要写完整的方法来创建,这样多次调用起来才会比较方便。写匿名内部类的前提是:内部类必须继承一个类或者实现了接口。

    new Oject(){}.show();-------->相当于  Object b=new Object(); b.show();

   在上在这个匿名内部中必须复写Object中的方法。

  new Objcet (){

   void show()

{System.out.println("wo lai le ");

}}.show();

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击