黑马程序员_面向对象

——- 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.静态方法只能访问静态成员,非静态方法可以访问静态成员,因为静态成分是随着类加载而加载,而非静态方法是随着对象创建而加载的,所以静态方法优先于对象存在,所以不能访问非静态成员。
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变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值