黑马程序员_java基础2(面向对象、内部类、异常)
来源:互联网 发布:奢侈品二手回收知乎 编辑:程序博客网 时间:2024/05/13 22:23
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
面向对象,其实是相对面向过程的,和面向过程一样,都指的是思想。面向过程强调的是行为;面向对象则是将功能封装进对象,强调具备了功能的对象。c语言就是面向过程的语言,而java则是面向对象的语言。
举个面向对象的例子:小明打算买一台新电脑,但他关于电脑的知识很有限,自己去的话,恐怕既选不好机型,也讲不好价钱。于是,小明找了对这方面比较在行的哥哥小强一起去了。在这里,评价电脑的相关属性和讲价钱的能力(就是java中的方法)封装在小强这个对象中,小明要想使用(即调用)这些能力和方法,只需找到小强并让小强调用即可(过程如何,与小明无关了,他会得到一个结果:以合理的价钱,买到了适合自己的电脑,即对象具有封装性)。
类和对象的关系:
类就是对现实生活中事物的描述;而对象就是这类事物中,实实在在存在的个体。(对象是类的实例化)
面向对象有三大特征:封装、继承、多态。
封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处是:将变化隔离、便于使用、提高重用性、提高安全性。封装的原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。函数是java中最小的封装。
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。特点:提高了代码的复用性,让类与类之间产生了关系,有了这个关系,才有了多态。继承的关键字为extends。需要注意的是:千万不要为了获取其他类的功能,简化代码而继承;必须是类与类之间有所属关系才可以继承;如果父类有的属性不是子类有的,那就不该用继承;两个有共性的类,可以新建一个父类,让他们都继承新类,先有父类后有子类。除了接口可以多继承之外,java只支持单继承,但java保留了多继承的这种体制,并用另一种体现形式来完成表示,即多实现。而且java支持多层继承。
eg:
class Fu //创建一个类作为父类
{
int num=4;
}
class Zi extends Fu //创建一个类作为子类,继承父类。注意:这里若没有extends Fu,则两个类没有关系,不要只看名字
{
int num=5;//子类和父类有相同变量,打印出的是子类
void show()
{
System.out.println(super.num);
//this代表本类对象的引用,super代表父类对象的引用
}
}
class ExgtendsDemo2
{
public static void main(String[] args)
{
Zi z=new Zi();//先加载父类,再加载子类
System.out.println(z.num+“。。。”+z.num);
}
}
子父类中函数的特点:可以直接对父类中的方法进行调用;若子父类中方法一致,运行子类中方法,是函数的另一种特性叫做重写(覆盖)
覆盖:
1 子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败
2 静态只能覆盖静态
注意:
重载只看同名函数的参数列表
重写时,子父类方法要一模一样。
多态:可以理解为事物存在的多种体现形态。重载和覆盖就是函数的多态性体现,重点看对象的多态性。多态的好处:大大提高了程序的扩展性。多态的前提:
必须是类与类之间有关系,要么继承,要么实现。通常还有一个前提:存在覆盖。多态的弊端:提高了扩展性,但只能使用父类的引用访问父类中的成员。
eg:
class DuoTaiDemo
{
public static void main(String[] args)
{
Animal a = new Cat();//类型提升,向上转型
a.eat();
//若要调用猫的特有方法时,要强制将父类的引用,转成子类类型
Cat c=(cat)a;//向下转型
c.catchMouse();
}
}
多态自始自终都是子类对象在做着变化,if(a instanceof Cat)//判断对象a是不是猫类型
多态中成员函数的特点:
编译时期,参阅引用型变量所属的类中是否有调用的方法,若有,编译通过
运行时期,参阅对象所属的类中是否有调用的方法
即:成员函数在多态调用时,编译看左边,运行看右边
内部类:将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类、嵌套类)。访问特点:1内部类可以直接访问外部类中的成员,包括私有成员
(因为内部类中持有了一个外部类的引用,格式:外部类名.this)。2而外部类要访问内部类中的成员必须要建立内部类的对象。
eg:
class Outer
{
private int x=3;
void method()
{
System.out.println(x);
//输出x,以测试输出的是哪个部分的值。
}
private class Inner
//内部类可以被私有修饰,当内部类在外部类的成员位上时,就可以。
{
int x=4;
void function()
{
int x=6;
//内部有,现在内部找;若要打印局部,用this.x;若要打印外部的3,用Outer.this.x;
System.out.println(x);}
}
void method() //创建内部类对象,并调用其方法的函数
{
Inner in=new Inner();
in.function();
}
}
class InnerClassDemo
{
public static void main(String[] args)
{
Outer out=new Outer(); //创建一个外部类对象,以便调用外部类中的方法
out.method(); //调用外部类中method方法
}
}
注意:当内部类中定义了静态成员,内部类必须是静态的;
当外部类中的静态方法访问内部类时,内部类也必须是静态的;
异常:就是程序在运行时出现不正常情况,是对问题的描述,将问题进行对象的封装。
异常由来:问题也是现实生活中的一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。(问题也是对象)
异常的体系:
Throwable
Error
通常出现重大问题如:运行的类不存在或内存溢出等
不编写针对代码对其处理
Exception
在运行时运行出现的一起情况,可以通过try catch finally进行处理
try
{需要被检测的代码}
catch
{处理异常的代码}
finally
{一定会执行的代码}
finally有一种情况是运行不到的:当执行到System.exit(0);时(系统退出)
自定义异常:
按照java面向对象的思想,将程序中出现的特有问题进行封装。
异常的好处:
将问题进行封装;将正常流程代码和问题处理代码相分离,方便于阅读
处理原则
方式有两种 try 或throws
调用到抛出异常的功能时,抛出几个就处理几个
异常的注意事项
在子父类覆盖时:
1、子类抛出的异常必须是父类的异常的子类或子集
2、若父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛
eg:
/*
毕老师用电脑上课。
开始思考上课中出现的问题。
比如问题是
电脑蓝屏。
电脑冒烟。
要对问题进行描述,封装成对象。
可是当冒烟发生后,出现讲课进度无法继续。
出现了讲师的问题:课时计划无法完成。
*/
class LanPingException extends Exception //自定义蓝屏异常
{
LanPingException(String message)
{
super(message); //调用父类输出异常信息的功能
}
}
class MaoYanException extends Exception //自定义冒烟异常
{
MaoYanException(String message)
{
super(message); //调用父类输出异常信息的功能
}
}
class NoPlanException extends Exception //自定义无计划异常
{
NoPlanException(String msg)
{
super(msg); //调用父类输出异常信息的功能(因为继承,所以直接使用,上两个同理)
}
}
class Computer
{
private int state = 3;
public void run()throws LanPingException,MaoYanException //函数上声明异常
{
if(state==2)
throw new LanPingException("蓝屏了"); //用数字判断是哪种异常,并传递异常的信息
if(state==3)
throw new MaoYanException("冒烟了");
System.out.println("电脑运行"); //若上两步没有跳出,即无异常,输出“电脑运行”
}
public void reset() //自定义电脑重启的方法
{
state = 1; //判定异常的变量恢复为正常表示
System.out.println("电脑重启");
}
}
class Teacher
{
private String name;
private Computer cmpt;
Teacher(String name)
{
this.name = name; //请来一位老师开始上课
cmpt = new Computer(); //老师带来了一台专用电脑
}
public void prelect()throws NoPlanException //声明可能有异常
{
try
{
cmpt.run(); //试着开始讲课了
}
catch (LanPingException e) //电脑蓝屏异常
{
cmpt.reset(); //重启就好了 ^ ^
}
catch (MaoYanException e) //电脑冒烟了!
{
test(); //让同学们自己做练习
throw new NoPlanException("课时无法继续"+e.getMessage()); //老师处理不了,没法讲课了
}
System.out.println("讲课"); //若前面没发生异常,则按顺序,继续讲课
}
public void test() //让同学练习的方法函数
{
System.out.println("练习");
}
}
class ExceptionTest
{
public static void main(String[] args) //主函数,类执行的入口
{
Teacher t = new Teacher("毕老师"); //今天来教课的是毕老师!!!
try
{
t.prelect(); //咳咳,安静,开始讲课啦
}
catch (NoPlanException e) //捕捉异常
{
System.out.println(e.toString()); //输出异常信息
System.out.println("换老师或者放假"); //换老师或者放假(怎么这样呢 - - 好不容易老毕来上一堂课,哈哈)
}
}
}
PS:毕老师说了,能坚持到最后的,和超级女声一样,都是纯爷们!给自己加油~
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
- 黑马程序员_java基础2(面向对象、内部类、异常)
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员_JAVA笔记09—面向对象5(内部类、异常)
- 黑马程序员_java面向对象总结【4】(内部类、异常处理、Package)
- 黑马程序员_JAVA基础2_内部类,异常1
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- 黑马程序员-面向对象(下)--内部类和异常
- 黑马程序员_Java语言_面向对象_内部类
- 黑马程序员_java基础之面向对象多态及内部类
- 黑马程序员_java的面向对象(对第八课多态..内部类..匿名内部类的总结)
- 黑马程序员_Java基础_面向对象(异常2、练习题、导包)
- 黑马程序员_JAVA基础_内部类,匿名内部类,异常
- 黑马程序员 Java基础 面向对象:内部类 异常 包 jar包
- 黑马程序员_面向对象_06 内部类、异常
- 黑马程序员---面向对象:内部类、异常和包
- 黑马程序员--面向对象学习---接口、多态、内部类、异常
- 黑马程序员_面向对象_异常&内部类
- 黑马程序员--------java面向对象 内部类、异常
- アジャイルソフトウェア開発宣言
- Android APK反编译详解(附图)
- 全国青少年信息学奥林匹克竞赛培训---插入排序
- 框架知识记录。
- 黑马程序员--函数的重载
- 黑马程序员_java基础2(面向对象、内部类、异常)
- 用三个实例说明python类多态和重载。
- 函数的入口校验时,assert(NULL!=p)与if(NULL!=p)的区别
- 浅谈Observer模式的实现.基于继承和基于事件/委托的两种方式
- 从帮学生调程序想到-搞编程为啥容易搞成神经病
- JavaSE基础:学习泛型
- 条件编译的用法
- C#串口编程入门-C#下的串口控件SerialPort简介
- word vba批量替换文件内容并批量修改文件名