黑马程序员技术交流社区

标题: 黑马程序员-JAVA-面向对象-第五天 [打印本页]

作者: jing3133920    时间: 2015-4-30 12:49
标题: 黑马程序员-JAVA-面向对象-第五天
一、面向对象的特点三个特征:封装,继承,多态
面向对象是一种思想,它将功能封装进对象,然后使用具备了功能的对象。
面向对象使复杂的事情变得简单化。并且使我们的角色从执行者过渡到指挥者。
在以后的开发过程中对于对象的使用无外乎:找对象,如果没有就建立对象,使用对象,维护对象的关系。

二、类与对象的关系
类就是:对现实生活中事物的抽象描述(描述事物的属性和行为,属性对应类中的成员变量,行为对应函数())

对象:就是这类事物,实实在在存在个体。
他们的关系就如同模具和用这个模具制作出的物品之间的关系。一个类为它的全部对象给出了一个统一的定义,而他的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系。概括来说类就是对象的集合。
实例:
class Car //在java中创建一个类命名Car.用来生成汽车
{
               int num=4;//汽车轮胎数
               String color="blue"; //汽车的颜色
               void run()//生产,并输出生产出的车的颜色和轮胎数
               {                System.out.println(color+";"+num);        }
}

class CarDemo
{
        public static void main(String[] args)
        {
                //生产汽车。创建对象在java中通过new操作符来完成,其实就是在堆内存产生一个实体。(即生产了一台车)
               //每new出一个对象就表示在堆内存产生一个实体,也就是新生产出一辆车。
                Car c = new Car();//c就是一个类类型变量。记住:类类型变量指向对象。

/*
通过c.方法或成员变量对这个Car类进行操作,如下:
c.num=5;更改轮胎数
c.color='red';更改颜色
c.run();生产
*/
          }
}
三、成员变量和局部变量的区别
1.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;两者都可以定义成final型
2.成员变量存储在堆,局部变量存储在栈
3.他们作用的范围不同,成员变量在定义它的整个类中有效,局部变量只在定义它的方法中有效
4.成员变量有默认值,(被final修饰且没有static的必须显式赋值),局部变量不会自动赋值



四、匿名对象
匿名对象是对象的简化形式,它只在方法仅进行一次调用时使用,或者作为实际参数进行传递。如果对一个对象进行多个成员调用,必须给这个对象起一个名字。
示例:
new Car().run();

五、封装
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。(提供公共访问方式有助于提高代码的健壮性)
好处:将变化隔离;便于使用;提高安全性;提高重用性
原则:将不需要对外提供的内容都隐藏起来。
权限修饰符Private:私有,用于修饰类中的成员(成员变量,成员函数)。私有后只在本类中有效。‘
注:私有仅仅是封装的一种表现形式。
六、构造函数
特点:函数名与类名相同,且不用定义返回值类型,不可以写return语句
作用:给对象初始化
示例:
class Demo
{
         Demo(){执行语句;}
}
对象一建立就会调用与之对应的构造函数。且一个对象建立,构造函数只运行一次。
什么时候使用构造函数?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
注:如果类中没有定义构造函数,系统会默认给该类加入一个隐藏的空参数的构造函数。多个构造函数是以重载的形式存在的。
构造函数代码块:
作用给对象初始化,对象一建立就运行,而且优先于构造函数执行。它给所有对象进行统一初始化。(在里面定义不同对象共性的初始化内容)
this:看上去,是用于区分局部变量和成员变量同名的情况,其实this代表它所在函数所属对象的引用(简单说哪个对象在调用this所在的函数,this就代表哪个对象)。
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。

示例:
class Person
{
      Private String name;
      Person(String name)
      {
            this.name=name;//this代表的就是p
       }
}
Class PersonDemo
{
    public static void main(String[] args)
     {
             Person p = new Person("lisi");
     }
}
构造函数间this的间接调用:
this:用于构造函数之间进行互相调用时只能用this(参数);方式来调用。
示例:
class Person
{
      private String name;
      private int age;
      Person(String name)
      {
            this.name=name;//this代表的就是p
       }
       Person(String name,int age)
       {
              this(name);//this代表的就是p,相当于new Person(name)
              this.age=age;
       }
}
Class PersonDemo
{
    public static void main(String[] args)
     {
             Person p = new Person("lisi",20);
     }
}

注:this();语句规则只能放在构造函数的第一行。因为初始化要先执行。

作者: hoop.zeng    时间: 2015-4-30 18:35
态度认真 值得学习
作者: 18561271203    时间: 2015-4-30 20:20
面向对象这块很重要,好好学吧
作者: xfliyy    时间: 2015-4-30 20:22
好长........
  都说面向对象很难
作者: ninjaes    时间: 2015-4-30 21:37
先Mark了  一定会看的  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2