黑马程序员——面向对象
来源:互联网 发布:ug三维制图软件 编辑:程序博客网 时间:2024/04/28 18:59
<a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>
面向对象
Everything isobject.
类:生活中事物的描述。
对象:这类事物的实实在在的个体。
找对象、建对象、使用对象、维护对象
匿名对象:
(1) 作为实参传递
(2) 对象只调用一次
对象特征:封装、继承、多态
1、 封装
隐藏对象属性和实现细节,只对外提供公共访问方式。
(1) private:
1) 权限修饰符,私有
2) 只在本类有效
3) 修饰类中成员
a、 成员变量:事物的属性
实例变量:在堆中
类变量:在方法区中
b、 成员函数:事物的行为
4) 是封装的表现形式
(2) 构造函数
权限修饰符 类名(参数或无) { }
1) 对象已建立就会运行与之相关的构造函数
2) 用于给对象初始化
3) 只运行一次
4) 系统会默认构建空参构造函数,但自定义后,就不会构建了
比较:
一般方法:对象调用才运行、添加功能
可被对象调用多次
(3) 构造代码块
{执行语句}
1) 给所有对象初始化
2) 优先于构造函数加载
(4) this
代表对象,所在函数所属对象的引用
应用:
1) 本类功能内部使用本类对象 this.
如区分成员变量和局部变量同名
2) 构造函数间相互调用 this()
只能定义在构造函数第一行
(5) static
1) 修饰符,用于修饰成员(变量和函数)
2) 除了被对象调用,可直接被类名调用;类名.静态成员
3) 随类加载,优先于对象存在
4) 数据被所有对象共享
注意:静态方法只能访问静态变量,方法中不可定义this,super
(6) 单例设计模式
保证一个类在内存中的对象是唯一的
1) 饿汉式:
class Single1{ private Single1(){} private static Single1 s=newSingle1(); public static Single1getInstance(){ return s; }}2) 懒汉式:
class Single2{ private Single2(){} private static Single2 s; public static Single2getInstance(){ if(s==null) s=newSingle2(); return s; }}
2、 继承
优点:
1) 提高代码复用性
2) 类之间产生关系”is a”,才有多态特性
特点:
(1) 单继承
(2) 成员变量
super:子类所属父类内存空间的引用
this:本类对象引用
(3) 成员函数
当子父类出现一模一样方法时,用覆盖(复写、重写)
1) 子类权限大于父类
2) 静态值覆盖静态
3) super._
(4) 构造函数
子类所有构造函数第一行,隐藏语句 super()
1) 子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先 调用父类的构造函数,这就是子类的实例化过程。
2) 如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数。
(5) final
1) 修饰符,修饰方法、变量、类
2) 被final修饰的类不能继承
3) 被final修饰的方法不可覆盖
4) 被final修饰的变量是常量,只能赋值一次
抽象类:abstract
特点:
1) 抽象方法是能定义在抽象类中,都用abstract修饰
2) 抽象方法只定义方法声明,不定义方法实现
3) 抽象类不能被实例化
4) 子类继承抽象类,并覆盖所有抽象方法,子类才能实例化
模板方法设计模式
abstract class GetTime{ public void getTime(){ long start=System.currentTimeMillis(); codes(); long end=System.currentTimeMillis(); System.out.println(end-start); } public abstract voidcodes(); } class A extends GetTime{ public void codes(){ for (int i = 0; i< 1000; i++) { System.out.println(i); } }}
接口
抽象类中方法都是抽象的就是接口
成员变量:public staticfinal
成员方法:public abstract
注意:可省略
例:
interface Inter{
public static finalint X=4;
public abstract voidshow();
}
特点:
1) 一个类可实现多个接口implements
2) 接口可多继承接口
3) 关系是“like a”
4) 接口的成员修饰符是public
3、 多态
事物存在多种体现形态
体现:
1) 父类引用指向子类对象
2) 父类引用可接受子类对象
转型:始终是子类在做变化
例:
//向上转型
Animal a=new cat();
if(a instanceOf Animal)
{ //向下转型(操作子类特有方法)
Cat c=(Cat)a;
}
成员特点:
(1) 成员函数
编译:参阅引用变量所属类有调用方法,否则编译失败
运行:参阅对象所属类有调用方法
总结:编译看左边,运行看右边
(2) 静态成员函数、成员变量
编译、运行看左边
Object类
所有对象都具备的功能
1) boolean equals(Object obj):用于比较两个对象是否相等,其实内部比较的就是两个对象地址。
2) String toString():将对象变成字符串;默认返回的格式:类名@哈希值 = getClass().getName() + '@' + Integer.toHexString(hashCode())
3) int hashCode():返回该对象的哈希码值。支持此方法是为了提高哈希表的性能。
4) Class getClass():获取任意对象运行时的所属字节码文件对象。
内部类
如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象。将A类定义在B类中,A类就称为内部类。
特点:内部类可以直接访问外部类中的成员。而外部类想要访问内部类,必须要建立内部类的对象。
(1) 定义在成员位置
class Outer{ class Inner { void function(){} }}
访问格式:
1) 非私有,可以在外部其他类中,可以直接建立内部类对象
Outer.Inner in= new Outer().Inner()
in.function()
2) 被成员修饰符所修饰, 比如:private、static
a、 内部类被static修饰后,只能直接访问外部类中的static成员
b、 在外部其他类中,直接访问static内部类的非静态成员new Outer.Inner().function()
注意: 当内部类中定义了静态成员,该内部类必须是static的。
当外部类中的静态方法访问内部类,该内部类必须是静态
(2) 定义在局部位置
class Outer{ int x=3; void method() { int y=4; class Inner { void function(){ } } }}
特点:
1) 不可以被成员修饰符修饰
2) 可以直接访问外部类中的成员,因为还持有外部类中的引用
3) 不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
匿名内部类
就是一个匿名子类对象
必须实现一个接口或继承一个类
格式:new 父类或接口() {定义子类内容}
异常
程序运行出现不正常情况
Throwable类
1) Error类:不编写针对性代码进行处理,JVM处理不了
2) 使用针对性处理方式
处理:
1) 声明:在函数上声明该异常
throws Exception
抛出异常,后续处理有两种:声明、捕获
2) 捕获:在函数内处理
try{ 异常语句 }
catch(异常类变量) { 处理方式 }
finally { 一定执行的语句} //System.exit(0);除外
区别:
throws:使用在函数上
后跟多个异常类,用”,”隔开
throw:使用在函数中
后跟对象
当函数内部出现throw抛出对象,必须函数上声明或函数内捕获
注意:RuntimeException除外
特别提醒:子父类覆盖时
1) 子类抛出的异常是父类异常子类或子集
2) 父类或接口没有异常抛出时,子类覆盖出现异常,只能用try catch
总结:子类不能抛比父类多的异常
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员—面向对象
- 黑马程序员——面向对象1:理解面向对象
- 黑马程序员———-面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员———面向对象
- 黑马程序员——面向对象
- 黑马程序员——面向对象总结
- 黑马程序员——面向对象
- 黑马程序员——C#面向对象
- 黑马程序员——面向对象
- 黑马程序员——面向对象
- 黑马程序员——java面向对象
- 黑马程序员——C#面向对象
- 黑马程序员——面向对象1
- 分布式搜索elasticsearch 索引文档的增删改查(RESTful)
- “双11”倒计时,电商行家如何玩转EDM?
- 大数据测试方法
- 从一段.html代码说起谈谈AngularJs中的双向数据绑定
- 二分查找程序算法和快速排序
- 黑马程序员——面向对象
- 迁移OCR、表决磁盘和asm spfile到其他磁盘组中
- iOS9 之后的UIAlertView 的写法
- 周边公交站台接口 查询附近的公交站台
- C字符串转JNI字符串
- 自定义配置文件读取
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- 安卓设置布局边框
- 我的记事本项目之路(二)