您的位置:首页 > 职场人生

黑马程序员_面向对象

2015-04-22 15:29 239 查看
——- android培训java培训、期待与您交流! ———-

1 什么是面向对象

面向对象是基于面向过程的,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。


比如说,早上我吃肉夹馍。

面向过程的话:

1.我要去买材料

2.自己做肉夹馍

3.做好后我才可以吃

面向对象的话

1.我直接去街上找做肉夹馍的店铺

2.给老板钱,然后老板就给我一个肉夹馍

肉夹馍的材料啊,中间制作的过程啊都不需要我自己操心。

2 面向对象思想的特点

1.面对过程强调的是功能行为,而面向对象将功能封装成对象,强调具备了功能的对象。
2. 面向对象是基于面向过程的。
3. 是一种符合人思考的思想,可以将复杂的事情简单化,使我们的角色从执行者转变为指挥者


3 类的定义

3.1 类与对象的关系

我们学习编程就是为了把日常生活中的事物用编程语言来描述,类就是对现实生活中事物的具体描述,对象就是这类事物实实在在存在的个体。

描述事物,其实就是在描述描述事物的属性和行为,属性对应类中的成员变量,而行为,就是对应类中的方法。

例如人,每个人都具有姓名和年龄,这就是属性。而每个人都有吃饭睡觉的行为。因此在定义类时,就应该创建姓名和方法的成员变量,并提供吃饭、睡觉的方法。人的这个类就是对人的具体描述,而对象就是具体的某个人。接下来,用代码来定义一个Person的类:

public class Person {
String name; // 定义人的name属性
int age; // 定义人人的age属性

// 定义睡觉的方法
public void sleep() {
System.out.println(this.name + "睡了");
}

// 定义吃饭的方法
public void eat() {
System.out.println(this.name + "吃饭中");
}

public Person(String name, int age) {
this.name = name;
this.age = age;
}

}


3.2 成员变量

什么时候定义成员变量:

如果这个变量是用来描述这个类的信息的,就将其定义为成员变量,

定义变量时,变量的范围越小越好,这样可以使变量及时被回收。

成员变量与局部变量的区别

1.在类中的位置不同

成员变量在类总,方法外;

局部变量在方法中、形式参数的声明上、或者语句内(如for循环)。

2.在内存的位置不同

成员变量随着对象储存在堆内存中;

局部变量储存在栈内存中。

3.生命周期不同

成员变量随着对象的创建而创建,随着对象的消失消失;

局部变量随着方法(语句)的调用而存在,方法(语句)执行完成完毕就消失;

4.初始化方式不同。

成员变量由系统进行默认初始化。

局部变量没有默认初始化值,必须定义,赋值后才可以使用。

注意:方法中可以存在与成员变量同名的局部变量,使用时遵循就近原则,即如果方法中有的,就使用方法中的,方法中没有的才使用成员变量,如果想在具有同名局部变量和成员变量的方法中调用成员变量,则需要在变量名称前面加上this.。

3.3 匿名对象的使用

匿名对象是指没有名称的对象,即没用引用指向。匿名对象的使用可以简化代码,但是对于使用的场景有一定的限制。

匿名对像的使用场景:

1.调用方法,而且只调用一次的情况。如果调用多次,不建议使用这种方法,因为每调用一次就会在堆内存中创建一个对象。当调用完成时,匿名对象就成为垃圾被垃圾回收器回收。

2.匿名对象可以作为实际参数传递。

3.4 构造函数

构造函数的特点:

函数名与类名一致;

不用定义返回值类型;

不可以写retrun语句。

作用: 给对象初始化

需要注意的地方:

1.当一个类中未定义的构造方法时,那么系统就会默认给该类加入一个空参数的构造方法,而且默认构造方法的权限跟类的权限一一致;当在类中定义了构造函数,默认的构造函数就没有了。如果还想使用空参数的构造方法,就需要自己在类中创建。类中如果有多个构造方法的话,是以重载的形式存在的。

2.构造函数可以用private,如果类中所有的构造函数都被private修饰,则不能在其他类中创建对象。

构造方法与一般方法的区别:

1.构造方法随着对象的创建而运行,创建一个对象构造方法只运行一次;而一般方法只有在被调用时才能运行,而且可以重复调用

2.构造方法没有返回值,而且也不用写void;一般方法如果没有返回值也要写void

3.构造方法不能用static修饰。

3.5构造代码块

构造代码块是用于给对象初始化的 ,对象一旦建立就运行,而且优先于构造函数执行。

构造代码块与构造函数的区别

构造代码块是给所有的对象进行统一初始化的,构造代码块定义的是不同对象的共性的初始化内容,而构造方法是给对应的对象初始化的。

3.6 this关键字的应用

this:代表当前对象的引用,即调用this所在方法的对象。

当局部变量与成员变量同名时,可以用this.区分。

this也可以用在构造函数间的调用,例:

`public class Person {

String name;

int age;

public Person(String name) {
this.name=name;
}

public  Person(String name, int age) {
this(name);
this.age = age;
}


}

当我们要对name初始化时,由于已经有构造函数专门对name进行初始化的,就只需要通过this()调用存在的构造方法。

3.7 static关键字

static:是一个修饰符,用于修饰成员方法和成员变量。

被修饰的成员称之为静态成员,可以直接通过类名.成员变量名称、成员方法名称(…)调用;

被static修饰的成员的特点:

1.随着类的加载而加载(生命周期最长,与类一致);

2.优先于对象存在;

3.被所有对象共享;

4.可以直接用类名.调用;

5.储存于方法区中。

使用静态的注意事项:

1.静态方法只能访问静态成员,非静态方法可以访问静态成员,因为静态成分是随着类加载而加载,而非静态方法是随着对象创建而
4000
加载的,所以静态方法优先于对象存在,所以不能访问非静态成员。

2.静态方法不能使用this和super关键字,因为静态优先于对象存在。

3.主方法是静态的。

静态的应用:

1.当对象出现共享数据,则该数据可以被静态所修饰。对象中的特有数据应该定义成非静态存放与堆内存中。

2.当功能内部没有访问到非静态数据时,可以将该功能定义成静态的。

3.若方法不需要对象,可将方法定义为static。

3.8 静态代码块

格式:

static{
执行语句;
}


特点:随着类的加载而执行,且只执行一次,

用于给类进行初始化。

4.对象的初始化过程

例:
Person p = new Person("xxx",12);


1.找到Person.class文件,加载到方法区中

2.如果有静态代码块则执行静态的代码块为类进行初始化

3.在堆内存中开辟空间,分配内存地址值

4.在堆内存中建立对象特有的属性,并进行默认初始化

5.对属性进行显示初始化

6.运行构造代码块(如果有的话)

7.运行构造函数

8.将内存地址值赋给栈内存中的p变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java