面向对象
提纲
- 定义类的语法格式
- 对象的创建和使用
- 方法详解
- 成员变量和局部变量
- 隐藏和封装
- 深入理解构造器
- 继承与组合
- 初始化块
定义类
- 定义类的语法格式:
- 【修饰符】class类型{…类体…}
- 类体可以由多个属性、方法、构造器组成
- 注意:类的修饰符可以是public、final或省略这两个。类名只要是合法的标识符
- 一个类里可以包含三种最常见的成员:构造器、属性、方法
定义属性的格式方法
- 【修饰符】属性类型 属性名【=默认值】
定义方法的格式语法
- 【修饰符】方法返回值类型 方法名(形参列表){…方法体…}
- 方法种的修饰符可以是
- public,protected,private,static,final,abstract,其中访问控制符只能出现一个,abstarct,final只能出现其一
- 返回值类型可以是基本类型和引用类型,如果返回值,要用void来声明
- 形参列表,可以由零多组组成,参数之间用逗号(“,”)隔开
- static是一个特殊的关键字,译为“静态”,所有由static修饰的叫类属性,类方法,类成员
定义构造器的语法格式
- 【修饰符】构造器名(形参列表){…}
- 修饰符可以是pubic protected private构造器必须和类名相同,形参和方法的形参一样。
对象的产生和使用
- 创建对象的根本途径就是构造器,所以创建对象通过关键字new加上对应的构造器即可
- 如果访问权限允许,类里定义的属性和方法可以通过类或实例来嗲用
- 由static修饰的访问和属性,既可通过类来调用,也可以通过实例来调用
对象、引用和指针
- Person p=new Person();这行代码创建了一个Person实例,也被称为对象,这个对象被赋给了p变量
- 也就是说引用类型变量里存放的仅仅是一个引用,它指向实际的对象
对象的this引用
- this关键字总是指向调用该方法的对象
- 构造器中引用该构造器执行初始化的对象
- 在方法中引用调用该方法的对象
- 在方法里的this指谁调用就指谁
- 注:this不能用在由static修饰的方法中
方法的详解
- 方法的所属性
- 一旦将一个方法定义在一个类里,如果用static修饰了,这个方法属于这个类,否则属于这个类的对象
- 方法不能独立执行,必须要由调用者(如:类。方法、对象、方法)
- 方法不能独立定义,只能定义在类里
- 方法要么属于一个类,要么属于一个对象
方法的参数传递机制
- 传递方式只有一种:值传递
形参长度可变的方法
- 如果在定义方法时,在最后一个参数的类型后增加三点…,则表明该形参接受多个参数值,多个参数值被当成数组传入
- 长度可变的形参只能位于最后一个参数,并且一个方法中只能由一个可变长度的参数
递归
- 递归就是在方法中再次调用自己
- 递归一定要向已知方法递归
方法的重载
- Java允许在一个类里定义多个同名方法,只要形参不同即可
- 所以方法的重载只要满足两个条件(两同一不同):1.同一个类中,方法名形同;2.形参不同。和返回值类型无关,所以在调用这些时要传入不同的参数值
成员变量和局部变量
- 成员变量指的是在类范围里定义的变量;局部变量值得是在一个方法内定义的变量
- 不管是成员变量还是局部变量都遵守相同的命名规则
- 成员变量分为类属性和实例属性,对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变了类属性,那么其他对象对应的类属性也该变了。成员变量不用显示初始化,只要定义了一个类属性或实例属性,系统默认进行初始化
局部变量
- 局部变量可分为三种:
- 形参
- 方法局部变量
- 代码块局部变量
- 与成员变量不同的是除了形参外,其他局部变量都必须显示地初始化
- Java里允许局部变量和成员变量重名。这样局部变量会覆盖成员变量,这时通过this来调用的属性
成员变量的初始化
- 当类被加载时,类成员就在内存分配了一块空间
- 当对象被创建时,实例成员就在内存中分配了内存空间按。实例变量与实例共存亡;类变量与类本身共存亡
局部变量的运行机制
- 当局部变量仅在方法内有效
- 当方法执行完成,局部变量便会自动销毁
封装
-
理解封装:封装是面向对象的三大特征之一
-
封装包含两方面含义
—合理隐藏
—合理暴露
使用访问控制符
- private私有的。在同一个类里被访问。
- default默认的。包访问权限
- protected受保护的。子类中也能访问
- Public公共的。在任何地方都可以访问
package和import
- package打包格式:package包名;放在程序开始的顶端
- 包机制的两个方面的保证。1.源文件里要使用package语句指定包。2.class文件必须放在对应的路径下
- import引入包格式。分为两种
- 非静态导入,导入的是包下所有的类。如:import package.subpackage.*
- 静态导入,导入的是类的静态属性。如:import static.package.className.*
java的常用包
- java.lang.*
- java.util.*
- java.net.*
- java.io.*
- java.text.*
- java.sql.*
- java.awt.*
- java.swing.*
使用构造器执行初始化
- 构造器最大的好处就是在创建对象时执行初始化,系统会默认的进行初始化
- 如果成员没有java类提供任何构造求,则系统会这个类提供一个无参的构造求
- 一旦成员提供了自定义的构造器,系统不在提供默认的构造器
构造器的重载
- 构造求的重载和方法的重载一样,都是方法名相同,形参列表不相同
- 在构造器中可通过this来调用另外一个重载的构造器
继承的特点
- Java通过关键字extends来实现,实现继承的类称为子类,被继承的累成为基类、超类、父类。父类是大类,子类是小磊。
- Java的继承是单继承,每个子类最多只有一个直接父类
继承
- 子类继承父类的语法如下:
- 修饰符 class subclass extends superclass {。。。。。。}
- 子类扩展了父类,将可以获得父类的全部属性和方法,但不能获得父类的构造器
- Java里的继承都是单继承,也就是只能由一个直接的父类,可以有n个简介父类
重写父类的方法
- 方法的重写要遵循“两同两小一大”指的是:方法名吸纳沟通,形参列表相同。返回值类型更小或者相同,抛出的异常更小或相同,访问控制权限要更大
父类实例的super限定
- 通过关键字super来调用父类的方法或者属性
super调用父类的构造器
- 子类构造器总会调用父类构造器
- 如果子类构造器没有显示使用super调用父类构造器;子类构造器默认会调用父类无参数的构造器
- 创建一个子类实例时,总会先调用最顶层父类的构造器
多态性
- Java引用变量由两个类型:一个编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象据欸的那个
- 如果编译时类型和支行时的类型不一致,这就有可能出现所谓的多态
- 两个相同类型的引用变量,由于他们呢实际引用的对象的类型不同,当它们调用同名方式时,可能呈现出多种行为特征,这就是多态
引用变量的类型转换
- 将一个子类对象赋给父类,这就是向上转型。向上转型是自动的。
- 强制类型转换:类型转换运算符是小括号,(type)variable
instanceof运算符
- 前一个操作通常是一个引用类型的变量,后一个操作通常是一个类(也可以是接口)
- 如果是返回true否则返回false
继承和组合
- 使用继承的注意点
- 利用组合实现复用:总之,继承要表达的是一种“是(is-a)"的关系,而组合表达的时”有(has-a)"的关系
初始化块
- 使用初始化块:初始化块由大括号括起来{…},只能由static修饰
- 初始化块和构造器:初始化块总在构造器之前执行,初始化块不能接受形参
静态初始化块
- 用static修饰的初始化块为静态初始化块,由于是静态的,所以是属于类,当类加载时,就执行静态初始化块,但执行一个子类时,最先执行执行其最顶层父类的静态初始化
- 初始化是属于实例的。只要创建一次对象,初始化块就执行一次
2595

被折叠的 条评论
为什么被折叠?



