标题: 成都校区 面向对象总结 [打印本页] 作者: wanqu 时间: 2018-12-12 21:08 标题: 成都校区 面向对象总结 一、面向对象
1、面向对象:OO(Object Oriented)
2、面向对象编程:OOP
3、面向对象具备如下3大特征:
封装、 继承、 多态
Java中的面向对象:
Java中是先有类,然后再根据类创建对应的对象。
1、类是具体事物的抽象,相当于模板、图纸,一个对象的描述
2、创建类:
class 类名 {
类的成员;
——成员变量 ——>> 属性
——成员方法 ——>> 行为
}
二、对象1、对象即是该类事物实实在在存在的个体。2、创建对象:
new 关键字.
可以给对象起名字
Person p = new Person( );
其中 p 就是对象名 p 其实就是一个变量,该变量是Person类型的.
3、创建对象的目的:
i. 使用对象
如何使用? ——>> 可以通过对象名. 的形式操作对象
1. 对象名.属性名 = 值;
设置对象特有的属性(成员变量)
2. 对象名.属性名
获取对象特有的属性
3. 对象名.成员方法
让对象执行特有的行为(成员方法)
三、成员变量和局部变量1、局部变量
i. 方法中,参数列表中,语句中
ii. 必须给初始化值,没有初始值,不能使用
iii. 在栈内存中
2、成员变量
i. 属于类的成员,定义在类中
ii. 有默认的初始化值
iii. 在堆内存中
四、匿名对象1、通过new操作符创建的对象,但是没有给对象起名字
例如:new Person( );
2、作用:
匿名对象可以作为方法的实参传递(常用),例如: = new Car().run();
当对象的方法只想执行一次,使用匿名对象可以简化书写
五、封装1、在其他类中禁止使用 对象名.成员变量 的形式直接修改对象的属性.
封装的好处:提高对象数据的安全性,过滤非法数据
2、关键字:private(私有)
private修饰的成员变量,如果外界需要访问,就需要在本类中添加公共的get和set方法。(根据实际情况需要)
public void setXxx (数据类型 变量名) {
赋值过程;
}
public 数据类型 getXxx ( ) {
return 属性值;
}
3、注意:使用private修饰成员变量,仅仅是封装一种体现形式而已
函数:一段独立功能的小程序,完成特定任务,函数也是一种封装
六、构造函数1、用来给对象初始化的2、构造函数也是一个函数(比较特别)
i. 构造函数的函数名和类名相同
ii. 构造函数没有返回值,和void 不同
3、构造函数的细节:
i. 自定义类时,如果没有自定义构造函数,系统会默认提供一个无参的构造函数(是在javac编译的时候由编译器完成的)
ii. 自定义类时,如果程序员在类中自定义了构造函数,系统默认的就不再提供
iii. 一个类中可以有多个构造函数,构造函数也是函数的一种,所以构造函数也具备函数重载的特性
iv. 如果一个类中的构造函数全部是private 那么是不能通过new 来创建对象的
v. 构造函数用于给对象初始化
在new对象时,根据具体的实参,来确定具体的构造函数的执行
4、构造函数和普通函数的区别:
i. 相同:都是函数,都需要调用才会执行
ii. 不同:
1. 作用:
构造函数是用来给对象初始化的
普通函数是用来完成特定任务的
2. 执行机制:
构造函数创建对象时,JVM根据实参来调用,只执行一次
普通函数需要通过对象来调用才会执行,可以调用多次
七、构造代码块1、构造代码块:
在一个类中,以花括号存在: { }
2、作用:
i. 用于给所有对象初始化
ii. 只要创建对象,构造代码块都会执行
3、构造函数和构造代码块的区别:
i. 构造代码块:
构造代码块优先级 高于 构造函数
只要创建对象,构造代码块就会执行
ii. 构造函数:
构造函数用于给指定的对象初始化,JVM会根据具体的实参,确定调用的具体的构造函数
八、this关键字
1、作用:
i. 可以用于区分成员变量和局部变量
ii. 调用构造函数
2、局部变量:
i. 在方法中的
ii. 在方法上的
for 循环语句中的变量都是局部变量
iii. 在栈内存中
iv. 随着方法的执行初始化,方法消失,局部变量消失
v. 局部变量必须要有初始化值
3、成员变量:
对象的属性在堆内存中
4、由于局部变量和成员变量重名,导致对象的属性无法初始化:
5、注意:使用this 必须放在构造函数的第一行
6、this只能在非静态中(没有static修饰的)函数使用
九、static关键字1、static 修饰成员变量:
i. 静态成员变量
在方法区中,被所有对象所共享
1. 由于被所有对象共享,只要有一个对象改变静态成员变量的值,所有的对象使用的静态变量值也就都改变了
2. 由于在方法区中,所以可以直接通过 类名.静态成员变量 的形式来调用
ii. 原理(理解):
1. 静态成员变量和非静态成员变量的位置:
内存空间不一样:
a) 静态成员变量:依赖于类,在方法区
b) 非静态成员变量:依赖于对象,在堆内存中
2. 静态成员变量和非静态成员变量的生命周期:
生命周期不一样:
a) 静态成员变量,随着类的加载而存在于方法区,类只加载一次
b) 非静态成员变量,随着对象的创建而存在于堆内存中,随着对象的创建而创建,随着对象的消失而消失
只要new 对象,每个对象都有自己特有的变量(属性)
2、static修饰方法:
1. 成员 方法被static 修饰,叫做静态方法
2. 特点:
可以不用创建对象,直接通过 类名.方法 的形式来调用
3. 静态方法:
a) 静态方法不可以访问非静态成员变量
b) 静态方法可以访问静态成员变量
4. 非静态方法:
非静态成员方法,既可以访问非静态成员变量,也可以访问静态成员变量
5. 总结:
a) 静态方法只可以访问静态成员变量
b) 非静态成员方法,既可以访问非静态成员变量,也可以访问静态成员变量
c) 可以通过私有化静态类的构造方法,达到不允许创建静态类的对象
6. static 方法要注意:
不能出现 this 与 super 关键字
原因:调用静态方法可以使用类名直接调用,这时候有可能在内存中还没有存在着对象
3、静态代码块
i. 格式:
ii. 作用:
iii. 静态代码块注意细节:
1. 随着类的加载而执行,只执行一次
构造代码块初始化对象,静态代码块就是初始化类的
2. 静态代码块:程序运行加载类,类只加载一次,所以静态代码块也只执行一次
构造代码块,只要创建对象就会执行
十、继承1、类与类之间的关系:
i. 部分与组合: has a 关系 人与地址 球队——>> 球员
ii. 继承: is a 该种事物是属于某一种事物的其中一种类型 比如:猫——>> 动物
2、没有继承的时候出现了什么问题:
i. 类与类之间的关系无法描述
ii. 出现重复代码
3、使用:
一个类通过使用extends 关键字来继承另一个类
4、继承解决的问题:
i. 可以描述了类与类之间的关系
5、继承要注意的细节:
ii. 父类的私有成员(成员属性、成员方法)不能被子类继承
iii. 父类的构造方法不能被子类继承
iv. 创建子类对象时,会先调用父类的构造函数,子类没有指定的情况下,默认是调用父类无参的构造函数
创建子类对象的时候调用父类的构造方法意义是初始化父类的成员属性
只有真正的存在着关系才会去继承,不要为了减少重复代码而去继承