黑马程序员-Java语言基础–面向对象 第5天

来源:互联网 发布:车秘油耗数据导出 编辑:程序博客网 时间:2024/05/13 00:49

---------------------- android培训java培训、期待与您交流! ----------------------

 

1、面向对象

      一切皆对象,万物皆对象。Everything  is Object!from《Think In Java》

      面向对象是相对于面向过程而言的,是基于面向过程的。都是程序设计的一种思想。

面向过程:强调的是功能行为。

面向对象:将功能封装进对象,强调具备了功能的对象。

面向对象的特点

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

可以将复杂的事情简单化

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

完成需求时:

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

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

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

面向对象的特征:

1、封装(encapsulation)

2、继承(inheritance)

3、多态(polymorphism)

面向对象的开发和设计特征

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系。

 

2、类与对象的关系

谁拥有数据,谁就对外提供操作这些数据的方法。--- ---Mr zhang

使用计算机语言就是不断的在描述现实生活中的事物。

名词提炼法:人开门,门是对象,门拥有数据和功能。

Java中描述事物通过类的形式体现,类就是对现实生活中事物的描述。类是具体事物的抽象,概念上的定义(抽象)。提取对象中共性内容而得来的。

对象即是该类事物实实在在存在的个体(具体)。对象存在于堆内存中。

      理解:生产汽车:类就是图纸,汽车就是堆内存中的对象

 

类的定义:

1·生活中描述事物无非就是描述事物的属性行为

如:人有身高,体重等属性,有说话,打球等行为。

2·Java中用类class来描述事物也是如此。

属性:对应类中的成员变量。

行为:对应类中的成员函数。

3·定义类其实在定义类中的成员(成员变量和成员函数)。

 

//需求:描述一个汽车。描述事物其实就是在描述事物的属性和行为。

//类就是图纸。

//汽车就是堆内存中的对象。

 

//属性对应的是类中的变量,行为对应的类中的函数(方法)。

//其实定义类,就是在描述事物。就是在定义属性和行为。

//属性和行为又共称为类中的成员。(成员变量和成员方法(函数))。

class Car//对Car 这类事物进行描述。 

    String color = "red";  //成员变量,堆内存中

    int num = 4; 

    void show() 

    { 

        System.out.println("color="+color+"..num="+num); 

    } 

class CarDemo  

    public static void main(String[] args)  

    { 

        Car c = new Car();//建立对象,c是一个类类型变量,类类型变量指向对象。 

        c.color = "black";//对对象的属性进行修改。 

        c.show();//使用对象的功能。 

    } 

}

 

成员变量和局部变量(区别)

成员变量:

1·成员变量定义在类中,在整个类中都可以被访问。

2·成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

3·成员变量有默认初始化值。

局部变量:

1·局部变量只定义在局部范围内,如:函数内,语句内等。

2·局部变量存在于栈内存中。

3·作用的范围结束,变量空间会自动释放。

4·局部变量没有默认初始化值。

作用范围:

      成员变量作用于整个类中。范围非常的大。

      局部变量作用于函数中或语句中。范围更小。

在内存中的存储位置。

      成员变量:在堆内存中。因为对象的存在,才在内存中存在。

      局部变量:存放在栈内存中。

 

匿名对象:匿名对象是对象的简化形式。(凡是简化的都有局限性)

匿名对象两种使用情况:

当对对象方法仅进行一次调用的时。

匿名对象可以作为实际参数进行传递。

匿名对象调用属性没意义,调用方法才有意义。如果对一个对象多个成员调用,必须给对象起个名字。)

//匿名对象

           //Car c = new Car();

           //c.num = 5;

           new Car().num = 5;//等于以上两句话。

           new Car().color = "blue";//调用属性,无实际意义。

           new Car().run();//调用方法,调用一次时可以使用。

           //匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样比较简便。

           //如果对一个对象进行多个成员调用,必须给这个对象起个名字。

           //匿名对象使用方法二:可以将匿名对象作为实际参数进行传递

 

           //Car q = new Car();

           //show(q);

           show(new Car());//匿名对象作为实际参数参与传递。

   //需求:汽车修配厂。对汽车进行改装,将来的车改成黑色车。三个轮胎。

      public static void show(Car c)

      {

           c.num = 3;

           c.color = "black";

           c.run();

      }

 

3、 封装(Encapsulation)

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。(函数就是最小的封装体

好处:

1.将变化隔离。

2.便于使用。

3.提高重用性。

4.提高安全性。

封装原则:

1·将不需要对外提供的内容都隐藏起来。

2·把属性都隐藏提供公共方法对其访问

 

private(私有)关键字(仅仅是封装的一种表现形式,最小权限)

1·是一个权限修饰符。

2·用于修饰成员(成员变量和成员函数)。

3·被私有化的成员只在本类中有效。

常用之一:将成员变量私有化,对外提供对应的set,get方法对其进行访问。提高对数据访问的安全性。

注意:私有仅仅是封装的一种表现形式。不私有也可以实现封装。(之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码健壮性。)

private int age;//私有,不是直接访问得到。age已经封装在person类中。

      public  void setAge(int a)//对外提供访问方式,其中可以加入逻辑判断语句。

      {

           if (a>0 && a<130)

           {

                 age = a;

                 speak();

           }

           else

                 System.out.println("null");

      }

 

4、构造函数[day05-08]

特点:

1.函数名与类名相同。

2.不用定义返回值类型。

3.不可以写return 语句。

作用:给对象进行初始化。(对象一建立就调用与之对应的构造函数)

注意:

1、默认构造函数的特点。(构造函数小细节:当类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。方便对象初始化。

2、多个构造函数是以重载的形式存在的。(而当类中自定义了构造函数后,默认的构造函数就没有了。)

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

1、写法不同。

2、运行不同。

构造函数:对象一建立就运行,一个对象建立只运行一次

一般方法:对象调用才运行,作用是添加对象具备的功能,可被调用多次。

什么时候定义构造函数?

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

(构造函数可以私有化,但是私有化之后不能用该构造函数创建对象。)

 

5、构造代码块

构造代码块中定义的是不同对象共性的初始化内容。定义共性的东西。

定义:其中定义的是不同对象共性的初始化内容。

作用:给对象进行初始化。(对象一建立就运行,而且优先于构造函数运行。)

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

1·构造代码块是给所有对象进行统一初始化。

2·构造函数是给对应的对象初始化。

 

 

6、this关键字

特点:this代表其所在函数所属对象的引用。

(哪个对象在调用this所在的(方法)函数,this就代表哪个对象)

换言之:this代表类对象的引用。

什么时候使用this 关键字呢?

1、当在函数内需要用到调用该函数的对象时,就用this。(但凡本类功能内部使用了本类对象,都用this表示)

2、一个类中成员相互调用是对象完成的,同一类中this可省略,但当变量出现同名情况时,一定要加this(此时this用于区分成员变量和局部变量)。

this语句:用于构造函数之间进行相互调用。

this(name);[day05-12]

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

一般函数是不能直接调用构造函数的,因为this语句不能用在一般函数中。


 

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima


 

原创粉丝点击