七天零基础学java(第二天)--面向对象
|
【】面向对象是一种思想,需要三五年积累才能深入了解
【】类是种类,对象是一个种类里面的一个具体对象 【】种类是模板,对象是模板下一个产品;种类是抽象的、共性的,对象是具体的、个性的
【】类的名字,见名知意。大类大写 【】类里面定义两种,1特性-属性--名词;2动作-功能--动词 |
|
【】在包里先建立一个person类,给出属性和方法; 【】类里面的方法前修饰词只用public,因为想用对象来调,所以不写static
【】之后在包里建立一个Test类,在这个类里面加上程序的入口,这这里面对Person类的对象进行创建,赋值,调用
|
|
【】类中三成员:属性、方法、构造器 【】构造器的作用是给对象初始化,构造器本质上是一种特殊的方法 【】有参构造器的初始化是非常明显的,空构造器初始化不明显。
|
|
Person p=new Person(); 有等号,程序首先执行等号右边,将等号右侧的结果赋给等号左侧 Person()是一个空构造器,空的构造方法(参数列表是空的,没有参数) new关键字,帮忙创建对象,并对构造器方法进行调用, 构造器负责给创建完的对象进行初始化操作 创建对象并初始化后,将对象内存地址赋值给左侧变量p
|
|
【】一般,方法都用public修饰 【】构造器没有返回值类型,构造器名/方法名直接照抄类名, 【】常用空构造器(无参构造器)
【】所以,一般写构造器先写一个空构造器,再写所需要的其他同载构造器 【】利用快捷键alt+insert快速添加多个构造器
|
|
【】个性化赋值,对对象的初始化操作很明显,构造方法的同载
|
|
【】正确的写法,在左边成员变量前补充this,这样指的就是这个类,this是类的代表
|
|
|
|
|
|
【】封装,该暴漏的暴漏,该隐藏的隐藏起来 private,私有的,私人的,权限修饰符, 在属性信息前加上private后,只能在当前类里面才能访问,这个类之外的其他地方无法访问到,起到一个隐藏的作用。 虽然在外界不能访问到这个隐藏的信息,但可以在这个类里面访问到,所以在隐藏的信息下一般附带这个信息设置与获取的两条方法。 |
| 【】public不仅可以在本类里面能调用,在本类外面也可以调用这个方法 |
|
【】该隐藏的隐藏了,该暴露的暴露了。暴露的东西想怎某暴露就怎末暴露,可以按照自己的想法暴漏,按照实际需要暴露 |
|
|
| 【】快速添加getXxx和setXxx的快捷键:alt+insert |
|
【】种类是对对象的抽象,抽取各个对象相同部分构成种类
【】父类是对子类的抽象,子类继承父类 |
|
【】extends继承,第三人称单数形式 【】class 类名 extends 父类{},class后面紧跟着的本类类名是主体 |
|
【】父类的属性和方法
【】子类,首句先来个子类继承父类,将父类的属性和方法全部自己继承下来 【】子类继承父类资产后,在自己大括号里增加自己额外的属性和方法
【】继承后效果展示,所有父类属性方法和子类额外属性方法,子类的对象都能调用
|
|
【】方法重写的前提:继承下子类重写父类的方法,在子类里直接复制过来改写 【】子类的方法和父类的在方法名和参数列表必须一致;至于修饰词和返回值类型可以不同,但一般直接复制过来这部分原封不动 【】一般重写只调整大括号的内容,只有方法名和参数列表不可改动 【】重写后,就只调用子类的这个方法,不调用父类的方法了 【】为什莫不删除父类这个方法,直接复制到子类再修改呢?
【】重载和重写,没有关系。 重载,同一类,方法名相同,参数列表不同。 重写,子类对继承的父类方法不满意进行重写 |
|
【】多态,是方法的多态,与属性无关 |
|
【】建立一个猫类,包括动作喊叫、抓挠;建立一个狗类,包括方法喊叫、看家;建立一个鱼类、猪类------ 建立一个小女孩类,功能有和猫玩猫叫了(需要传入猫类参数,调动猫叫动作),和狗玩狗叫了 【】猫和狗鱼向上的父类是animal,所以做Animal类,定义动作动物喊叫
【】猫狗都继承了Animal,但是各自有自己的喊叫,这个可以视为对父类函数的自动重写(因为这里是先有的子类,再抽象出的父类)
【】小女孩不管是跟猫跟狗,都是跟这些动物在玩,同意定义为和动物在玩
【】父类的变量名可以存储子类对象地址,父类变量名可以直接通配子类变量名。 或者说子类对象创建后可以存储在父类变量里
【】总之,猫叫狗叫抽象出动物叫;女孩和猫玩和狗玩统一起来和动物玩;父类变量可以指向任意子类对象; |
|
【】多种形态是方法的多种形态,某个行为比如喊叫,不同子类有不同的喊叫声音。 【】简单讲,某个动作,不同子类有不同动作细节 |
|
【】有父类子类继承的目的,就是为了方法的重写。继承的目的是重写,重写的目的是为了父类引用指向子类对象的时候后面可以调用重写的方法 【】1子类同一的一个动作抽象出父类,子类该动作天然是父类这一动作的重写;2父类变量名可以存储子类对象地址而能指向子类对象 3需要哪个子类就让父类变量名指向哪个子类对象即可Animal an=new Dog();或者Animal an=new Cat(),这样就会调用子类的这一动作。 |
| 【】在某动作继承重写条件下,才能用父类变量名指向子类对象。 |
|
【】生活中异常:正常生活遇到不正常情况。生活中断 【】程序中的异常,臃肿的做法是通过if-else语句处理,但是会造成if-else大杂烩,可读性变弱。甚至很多错误判断不出来,都没法写ifelse语句
【】异常处理机制 【】健壮性越好,程序出错能力越小 【】exception异常,例外 |
|
异常三连try-catch-finally 【】try{ } catch(Exception ex){ }finally{ } 可能出错的代码放到try代码块里面, 程序会将所有出错的异常封装成一个对象,在catch里面用Exception ex做一个接收,然后进入大括号进行异常的处理 【】try里面代码如果没有异常,后面catch就不会执行,只有try里面代码出错了才会跟catch做一个匹配去执行catch大括号的内容 【】用户理解不了程序出错的哪几句话,所以将出错用用户能理解的话放到catch里面通知用户程序出错 |
|
【】写入finally大括号里面代码,程序无论出不出异常,这段代码都会执行 【】try里面没有异常,try里面全部执行,不会执行捕捉异常的catch,finally里面总会执行 try里面出现异常能被catch的异常处理机制接收,那么try里面异常前内容执行,异常后内容中断;try-catch-finally后面代码也可执行 try里面出现异常不能被catch匹配,程序中断,只有finally里面代码得以执行
|
|
人为制造异常就是创造异常对象 throw抛 new Exception()创建一个异常的对象, throw new Exception();抛出异常, 制造出了异常就要处理,在该句前有个小红灯泡会提供两种处理方式: 1选择try-catch自己直接处理完这个抛出的异常
2选择抛异常到方法签名处,谁在主函数调用这个方法谁再去处理这个异常。主函数调用该方法的语句也会有个小红灯泡,或自己解决,或继续抛出去 方法名小括号大括号之间会插入throws Exception这个代码。
之后,主函数调用该方法,就要解决抛出来的麻烦;或者再抛,抛到主函数签名处
|
|
【】throw有用,主动制造异常,要么解决,要么向外抛;(throws没有实际作用,标记而已) 【】throw和throws完全是两个东西,throws是throw衍生的标志而已,没有实际用处 【】次函数处见到throws,就要有心理准备,调用这个方法可能会出现异常,要么自己解决,要么继续向外抛,起到一个提醒作用 |
|
【】总结 异常处理,一般使用异常三连try-catch-finally解决, 方法内部可能出现异常,则主动抛出一个异常throw new Exception();然后或选择解决,或选择向方法签名处抛。被抛到的方法名会带上记号,throws Exception |
































































浙公网安备 33010602011771号