黑马程序员_Java基础_面向对象(一)_05

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

导读:概述,类与对象,成员变量和局部变量,匿名对象,封装,pravite, 构造函数,this

1、 概述
面向对象是相对面向过程而言
面向过程,强调的是功能行为。
面向对象,将功能封装进对象,强调具备了功能的对象。
面向过程和面向对象是一种思想。
面向过程,是面向对象的基础。
  • 面向对象使复杂的问题变得简单。以前要面向好多的动作,现在只在面向一个对象就要以了。
  • 面向对象的角色发生了变化,由以前面向过程的执行者变成了面向对象的指挥者。面向过程有一个所有代码从前到后的执行过程,面向对象只要找到相应的对象就可以了。
  • 例:把大象放到冰箱里。
    面向过程:(1)打开冰箱    (2)存储进冰箱    (3)关闭冰箱
    面向对象:找冰箱就可行了。它就可以完成开门,关门和存储的的功能。
                      (1)
    冰箱.打开    (2)冰箱.存储    (3)冰箱.关闭
把功能封装到事物当中。只要找事物,功能全在。
C语言只要有功能就可以执行。如果以后还需要某个功能的话,还要一个个的找。而如果用面向对象的话,你只用面向冰箱就可了。
  • 我开门,对象是我还是门?
对象是门,开门这个功能的具体的细节(合页打开多少度,弹簧怎么弹的,灯亮),谁最清楚?门最清楚,而不是你最清楚。你在使用门的方法将门打开,因此门是对象。
名词提炼法:

{
    开门(门)
    {
        门.开();
    }


{
    开(){操作门轴}
  • 举例:我去买电脑(查资料,看电脑,买电脑,砍价)(面向过程)。                            
                         我不懂,怕被骗,让小张帮我去买。(面向对象)
  • 结合实际场景去说,到什么场景就说什么样的例子。
  • Thinking In Java:万物皆对象。

2、类与对象的关系

  • 面向对象有三个特征:封装,继承,多态。
  • 以后的开发:其实就是找对象在使用。没有对象,就创建一个对象。
  • 找对象,建立对象,使用对象。维护对象的关系
  • 类和对象的关系:
类:在现实生活中事物的描述。(提取对象中共性内容、对具体的描述。如:姓名,年龄,性别)
对象:就是这类事物,实实在在的个体。(张三,李四)
映射到java中,描述就是class定义的类。具体对象就是对应java在堆内存中用new建立实体。
描述事物其实就是在描述事物的属性和行为。属性对应类中变量,行为对应的类中的函数(方法)。
定义类,就是描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)(要先分析,分析完了才能写代码)
  • 引用类型变量:第二种,类类型变量(第一种数组类型已经学过)
Car c = new Car();   //c就是一个类类型的变量。记住:类类型变量指向对象(该类产生的实体)
  • 堆内存有一个特点,每一个对象的量在刚产生时都有一个默认初始化值(隐性),再把显性的值赋给它。
  • 在java中指挥对象的方式:对象.对象成员

3、成员变量和局部变量

  • 如果一个类,只是为了描述事物,并不需要独立运行的时候不需要写主函数
  • 成员变量和局部变量区别:
作用范围:成员变量作用于整个类中,局部变量作用于函数中或语句中。
在内存中的位置:成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量:存在在栈内存中
是否初始化:成员变量都有一个默认的值,即使不赋值,它也是能参与运算的,因为它在堆内存中。而局部变量不初始化是不能参与运算的。
局部变量作用范围结束,变量空间会自动释放。

4、匿名对象

  • 匿名对象是对象的简化形式
  • 匿名对象两种使用情况:
(1)当对对象方法进行一次调用时,可以用匿名对象来完成这样写来完成比较简便。如果对一个对象进行多个成员调用,必须给这个对象起个起个名字     
new car.color = blue;      匿名对象,改变属性没有意义,改完之后变成垃圾了。
new car.run() ;       调用方法有意义
(2)匿名对象可以做为实际参数进行传递 
  • 在开发中想让某对象变垃圾,可以指定一下:q = null;

5、封装概述
封装:是指隐藏对象的属性和实现细节,只对外提供公共访问方式。
  • 好处:将变化隔离。便于使用。提高重用性。提高安全性。
  • 封装原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问

6、封装private

private关键字:  私有的权限修饰符,用于修饰类中的成员(成员变量,成员函数)。
    • 私有只在本类中有效,将age私有化以后,类以外即使建立了对象也不能直接访问。但是人应该有年龄,就需要在Person类中提供对应访问age的方式。
    • 对于变量有一个规范。它(属性)有两种操作方式,一种是get,一种是set。set的返回值是void,要设置传入参数,get没有传入参数,它的返回值类型和它要获取的参数的变量一致。如果看到一个类中有两相操作:setXXX和getXXX,则它一定会有一个私有的属性,叫做XXX。一个事物中可能有n多个属性,这些属性可能都会被初始化。
    • 注意:封装不是私有,私有仅仅是封装的一种表现形式。私有是一种最小的权限。
    • 属性之所以对外提供访问方式,就因为可以在它的访问方式中加入逻辑判断等语句。进而对访问的数据进行操作。提高代码健壮性。


    7、构造函数
    • 特点:
    (1)函数名与类名相同
    (2)不用定义返回值类型。(void是一种返回值类型,代表没有返回值的情况。而构造函数是根本不需要定义返回值类型)
    (3)不可以写return语句
    对象一建立就会自动调用与之相对应的构造函数。如果只需要调用一次的话,不用再用手动的方式去调用这个构造方法。
    • 作用:给对象进行初始化。
    • 注意:
    (1)默认构造函数的特点。( 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,如person(){   } , 方便该类进行初始化,否则该类是建不出来的。 当在类中自定义了构造函数后,默认的构造函数就没有了。
    (2)多个构造函数是以重载的形式存在的。 
    •   构造函数和一般函数的区别:
    (1)在写法上有不同。 构造函数是在对象一建立就运行。给对象初始化。 而一般方法是对象调用才执行, 给对象添加对象具备的功能。
    (2) 在运行上不同。 一个对象建立,构造函数只运行一次。 而一般方法可以被该对象调用多次,调用才执行。
    •  什么时候定义构造函数呢?
    该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

    8、构造代码块(面试用,开发不常用)
    • 作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
    • 和构造函数的区别:构造代码块是给所有对象进行统一初始化(定义的是不同对象共性的初始化内容),而构造函数是给对应的对象初始化。

    9、this关键字
    •  两种用法:(1)区分同名变量的情况 (成员和局部重名的时候)  (2)构造函数单调用。
    • 一般函数是不能调用构造函数的,因为this语句是不能用在一般函数中的。
    •  构造函数也是可以私有化的,可是如果把所有的构造函数私有化的话,那么是不可能创建对象的,因为对象都不能进行初始化动作。
      class Person
    {
        private String name;
        Person(String name);
        {
            name = name;            
            //局部变量和成员变量有一样的name名字。第一个name不是成员变量,局部中有,就在局部中找name使用,如果没有再就去找成员变量中的name。
        }
    • this为什么可以解决这个问题? 
    this:用于区分局部变量和成员变量同名情况。this.name = name;  把name赋给对象中的name;
    • this到底代表的是什么呢?
      this:就代表本类对象。一个类可以有多个对象,但到底代表哪一个呢? this代表它所在函数所属对象的引用。( 简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
      • 在一个类里成员之间互相调用的时候,其实都是对象完成的。通过对象来区分是哪个对象中的成员。
       
      10、this关键字的应用   
      • this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时(如,人和人比较,人自身具有一个功能,这个功能又使用到了人这个对象),这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都在功能中用this表示。如下代码:
      class Person 
      {
          private int age;
          Person(int age)
          {
                this.age = age;
          }
          public boolean compare(Person p)
          {
               return p.age == this.age;     //看到对象的时候要想到这是一个对象的引用,this在这里和p1的所指向是一致的。
          }

      public static void main(String[] args) 
      {
          Person p1 = new Person(20);
          Person p2 = new Person(25);
          boolean b = p1.compare(p2);
          System.out.println(b);
      }
      • 什么时候使用this关键字呢?
      当在该函数内需要用到调用该函数的对象时,就用this。(不能用p.name = name; 因为你在描述的时候还不知道你要建立对象的名称是p呢,怎么用p去调用。用this谁调用我,我就代表谁,预先给对象留了一个位置)

      11、this关键字在构造函数间调用
      class Person       // this语句:仅适用于构造函数之间进行互相调用时使用
      {
          private String name;
          private int age;
          Person()
          {
          } 
          Person(String name)
          {
             this(); 
             this.name = name;          //(2)将lisi传给p.name;
          }
          Person(String name,int age)    //初始化两个值
          {
               this(name);      //即p(name);   即new Person(name);
                //this后面没有点。相当于初始化两个值中的一个值。(1)相当于对p这个对象进行姓名的初始化。
               this.age = age;
          }
      }
        public static void main(String[] args) 
      {
          Person p = new Person("lisi" , 20);
      • 构造方法可能有很多个,但可能对外只提供一个(用户用起来方便),而内部有很多初始化方式(内部初始化动作)
      • this语句只能定义在构造函数的第一行(否则编译出错)。初始化的动作要先执行,如果初始化中还有初始化的话,要先执行那个更细节的初始化。然后再执行自己的初始化。
        Person(String name)
      {
          this.name = "haha";         
      }
      Person(String name,int age)   
      {
              this.name = name; 
              this(name);              //传入lisi输出haha错误
              this.age = age;
      }
       
                                                  -------  android培训 java培训 、期待与您交流! ---------- 


      • 1
        点赞
      • 0
        收藏
        觉得还不错? 一键收藏
      • 0
        评论

      “相关推荐”对你有帮助么?

      • 非常没帮助
      • 没帮助
      • 一般
      • 有帮助
      • 非常有帮助
      提交
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值