黑马程序员_ 面向对象

  面向对象在java中是核心的一部分。所谓面向对象是相对于面向过程而言的。面向过程强调的是功能行为。而面向对象则是将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的。面向对象举例:软件公司招人 老板找人去干活,老板指挥员工去开发软件,员工则可以称之为面向对象。类是对现实生活中事物的描述,而对象则是这类事物中实实在在存在的个体。成员变量作用于整个类中,它存在于堆内存中,因为对象的存在而存在。而局部变量作用于函数中或者语句中,它存在于栈内存中。在面向对象中存在着一种简化建立对象的方法称之为匿名对象,如:建立一个蓝色车对象 new Car().color="blue"。匿名对象调用方法有意义调用属性无意义。
面向对象有三大特征:1封装 2继承 3多态。
1.封装是指隐藏对象的属性和实现细节,金对外提供公共访问方式。这种方法的好处有四点:1将变化隔离 2便于使用 3提高重用性 4提高安全性。封装的原则是将不需要对外提供的内容都隐藏起来以及把属性都隐藏起来,提供公共方法对其访问。
其中访问权限的修饰词共有4个 分别是public protected default private,在什么都不写的时候默认为default。这四个修饰词的区别如下:
作用域      当前类   同包   子孙类   其他 
public      true    true    true    true
protected   true    true    true    false
default     true    true    false   false
private     true    false   false   false


2.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。同时,继承的出现不仅提高了代码的复用性,还让类与类之间产生了关系。有了这个关系,才有了多态的特性。两个拥有继承关系的类用extends链接,举例 :定义一个学生类,让学生这个类继承人类类
Class Person
{}
Class Student extends Person
{}
在使用继承的时候,不能为了获取其他类的功能为了简化代码而使用继承。必须是类与类之间有所属关系才可以。同时在java中类不可以多继承,即一个类不能同时继承多个类,但是可以多层继承,类似于人际关系 如:儿子继承父亲 父亲继承爷爷。为了解决这个问题引入了接口,接口可以多实现。在继承中,如果多继承容易带来安全隐患,因此java不支持多继承。
3.多态是指某一类事物具有多种存在形态。举例:猫 狗 和动物之间的关系,猫和狗都是动物的一种存在形式,在日常的生活中我们可以称呼猫或者狗为动物。
多态的提现: 父类的引用指向了自己的子类对象,同时父类的引用也可以接受自己的子类对象 如: 猫 狗 动物之间的例子
Class Animal
{}
Class Dog extends Animal
{}
Class Cat extends Animal
{}
public static void Test1
{
 Animal c = new Cat();
}
多态的前提:首先要存在覆盖,然后必须是类于类之间有关系,要么是继承(extends),要么是实现(implements)。
堕胎的好处:多态的出现大大提高了程序的扩展性。
多态的弊端:虽然提高了扩展性,但是只能使用父类中的引用访问父类中的成员。
同时在java中,将在编程时容易出现的情况都封装成了对象,这些被称之为异常(Exception和Error)。
异常分为两类:Exception和Error。 Exception是可以解决的异常,而Error是无法解决的异常。
在java学习中要学习的异常就是Excetption,在Exception中存在着一种特殊的异常:RuntimeException。在函数内容抛出该异常,函数上可以不用声明,编译就可以通过。如果在函数上声明了该类异常。调用者可以不用进行处理,编译也可以通过。
在java异常部分:throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。
throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。


通常情况:函数内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。


定义异常处理时,什么时候定义try,什么时候定义throws呢?
  功能内部如果出现异常,如果内部可以处理,就用try;
  如果功能内部处理不了,就必须声明出来,让调用者处理。


自定义异常:
当开发时,项目中出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。


  对于除法运算,0作为除数是不可以的。java中对这种问题用ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为0外,还不可以为负数。可是负数的部分java并没有针对描述。所以我们就需要自定义这个异常。


自定义异常的步骤:
 1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
 2:通过throw 或者throws进行操作。


异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。


try  catch  finally的几种结合方式:
1,
try {}
catch{}
finally{}
2,
try{}
catch{}
3,
try{}
finally{}




这种情况,如果出现异常,并不处理,但是资源一定关闭,所以try  finally集合只为关闭资源。
记住:finally很有用,主要用户关闭资源。无论是否发生异常,资源都必须进行关闭。
System.exit(0); //退出jvm,只有这种情况finally不执行。


当异常出现后,在子父类进行覆盖时,有了一些新的特点:
  1:当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常要么抛出父类异常或者该异常的子类,不能抛出其他异常。
  2:如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。


注意:
   如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。
   如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值