------- android培训、java培训、期待与您交流! ----------
面向对象
面向对象基本概念
1. 面向对象和面向过程
面向过程注重的的是过程中的动作
二面向对象是注重实体
例如将大象装进冰箱
面向过程: 1.打开冰箱 2.将大象塞进去 3.关上冰箱门
面向对象: 1.找到实体a大象b冰箱2.找到动作a打开 b放入 c关上
2. 将具体动作赋予相应的实体
3. 面向对象中的类,对象,方法,属性
a) 类:具有相同特征与行为的一类事物的抽象,类包含两个部分,属性和方法(函数)
b) 对象:是类的一个具体化
类和对象的关系是: 类是抽象的, 而对象是类的实例化
4. 引用类型的默认值是null
5. 变量
a) 成员变量:声明在类内的变量
b) 局部变量:声明在方法内的变量
区别
1) 初始值:成员变量给有默认值,局部变量在使用前必须初始化
2) 内存空间:成员变量保存在堆内存中,局部变量在栈空间
3) 生命周期:成员变量随着对象的创建而创建,随着对象的销毁而销毁,局部变量当使用完就会消失
4) 作用域:成员变量是在整个类内有效,局部变量是在方法内有效
6. 匿名对象
格式 new String() = “张三”;
只能使用一次, 调用属性无意义, 多用于传值
7. 类与类之间的关系
依赖: 类A中的方法操纵了类B的对象
聚合: 类A的对象中包含了类B的对象(B的对象时A的属性)
继承(后面学):
封装
1. 封装是面向对象的基本特征之一,最基本的目的就是为了提高代码安全性
a) 类是一种封装,封装了属性和方法
b) 对象封装了成员属性
c) 方法封装了功能
封装是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式
注意: 修饰类和方法的两个权限修饰符
1) private私有的,只能在本类使用
2) public公共的,任何地方都可以使用
2. 封装的好处
1) 将变化隔离
2) 便于使用
3) 提高代码重用性
4) 提高代码安全性
3. 封装原则
将类中的不对外显示的属性private,对外提供get/set方法
语法规则: get/set 属性名(第一个字母大写)返回布尔类型是is +属性名
get有返回值, set没有返回值
构造方法
1. 构造方法使用来创建对象的
如果一个类没有人为定义构造方法,当这个类加载时JVM会自动为这个类创建一个默认的构造方法,如果人为写了, JVM不会创建
2. 格式
public 类名() {}
1) 构造方法名必须与类名一模一样
2) 没有返回值类型, void也没有
3) 没有修饰符,权限修饰符除外
3. 构造方法可以重载
用于创建对象的过程中为对象属性赋值
构造方法不能像方法一样用程序调用,只能是创建对象时执行
this关键字
a) this代表本类对象,用于区别成员变量与局部变量
b) this位置
1) 成员方法内,当前调用方法的随想
2) 构造方法内
注意: 成员变量和局部变量不重名,可省略this
构造, 局部代码块
1. 构造代码块
格式: 在成员方法位置上{code… }
优先于构造方法执行, 内容是所有构造方法都执行的内容, 每次执行构造方法都会执行
2. 局部代码块
格式: 在方法内部{code… }
限定变量生命周期, 代码块中的变量在代码块结束时一块消失
static关键字(修饰符)
1. static属性
1) 生命周期与类的生命周期一样,随着类加载而加载的
2) 内存中只有一个,所有对象共享
3) 对于静态属性(类属性),一般不使用对象的引用调用,而是类名.静态属性
static修饰的属性优先于对象存在
静态属性与实例属性的区别
1) 内存空间
2) 生命周期
3) 共享方式
4) 调用方式
2. static方法
1) 只能在static方法内使用static属性
2) static方法内不能使用this,super这样的关键字,因为static修饰的属性和方法优先于对象存在
3) 调用方式可以是对象引用.方法名,也可以是类名.方法名,建议类名.方法名
注意: 普通方法内可以使用静态属性和静态方法
4) 如果当前方法内使用的属性不是成员属性,这时使用static方法
5) 静态方法一般描述的是一个独立的工呢过
3. 类方法,实例方法,静态方法区别
1) 结构
类方法用static修饰,可以有返回值,没有用void
实例方法描述与成员属性有关的操作,可以有返回值,没有用void
没有修饰符, 权限修饰符除外,没有返回值, void也没有
2) 应用
类方法描述与成员属性无关的操作
实例方法描述与成员属性有关的操作
构造方法用来创建对象
3) 调用
类方法: 类名.方法名,引用.方法名
实例方法: 引用.方法名
构造方法: 创建对象的时候用的
4) 内存空间
类方法在方法区内的静态区域
实例方法和构造方法在方法区内
静态代码块
1. 格式 static{code…}
2. 相对于构造代码块只会执行一次,优先于构造代码块,构造方法执行
3. 静态代码块内使用的成员必须是静态的
4. 静态代码块一般用来描述类的相关信息,执行比较消耗资源,并且加载一次就能用的,或者对于程序启动时需要优先执行的
5. 构造和静态代码块区别:构造方法是某个对象的信息,静态代码块是类的信息
扩展
Java中注释
1. 单行注释 //
2. 多行注释 /*…*/
3. 多行文本注释 /**….*/
在多行文本注释内可以用以下几个标识描述类的相关信息,这些信息能够被javadoc提取出来
@param 生成参数
@return 生成返回值
@author 作者
@version 生成版本
继承
类与类的关系: 依赖, 聚合,继承
1. 继承是将多个类中共同的内容向上抽取产生一个父类,也称基类或者超类
2. 格式:子类 extends父类
3. 继承的好处是提高了代码的复用性,提供了多态的前提
4. 继承中的构造方法(重点)
1) 构造方法不可以继承或者被继承
super()是执行父类的构造方法(无参),父类构造存在无参构造方法时,子类的构造方法中默认存在一个super()
2) Java中所有类默认的父类是Object,父类的构造方法是为了子类对象的实例化
3) super(), this()关键字
a) 它们只出现在构造方法中
b) 它们只能是构造方法中的第一句
c) 它们不能共存,出现多次,就会执行多次构造方法
d) 继承中的成员属性, this用来区分成员属性和局部属性, super用来区分子类属性与父类属性
5. 继承中的成员方法(重点)
重写: 子类中存在一个与父类一样的方,作用是将父类中的方法进行功能扩展
注意:
a) 子类中静态方法只能覆盖静态中静态的
b) 子类方法权限一定要大于等于父类中方法的权限
c) 私有方法不能被重写
final关键字(重点)
1. final修饰类,代表类不能够被继承
2. final修饰方法,代表方法不能被重写
3. final修饰属性,代表属性是常量,没有赋初值的话,对象创建过程中可以改变值,对象创建完成后不能改变
例如
final int I;
class (int i) {
this.i = I;
}
这样在创建对象的时候传入一个参数对final属性赋值
多态
1. 多态的前提是存在继承关系,要有方法重写
2. 多态的优点是提高程序的前期扩展性,提高了后期的维护性
3. 多态最常见的体现是父类引用指向子类对象
4. 多台存在时成员属性与成员方法的表现
1) 实例属性,类属性,类方法在编译时都是看父类中是否存在属性或者方法,执行是也是执行父类中的属性和方法
2) 实例方法在编译时检查父类中是否有此方法,执行时是执行的子类对象中的方法
引用类型之间的转换
引用类型之间转换前提是存在多态
1. 向上转换
自动转换, 父类引用指向子类对象
2. 向下转换
强制转换, fatherinstance instanceof Son关系操作符返回true,Son son = (Son) fatherInstance