1.java的三大特性
面向对象三大特征:
1)封装:
1.1)类:封装的是对象的属性和行为
1.2)方法:封装的是具体的业务逻辑实现
1.3)访问控制修饰符:封装的是访问的权限
2)继承:
2.1)作用:代码的复用
2.2)父类/基类:共有的属性和行为
子类/派生类:特有的属性和行为
子类继承父类之后,拥有父类的属性和行为,同时又可以有不同于父类的属性和行为。
2.3)子继承父之后,子具有:父+子
2.4)传递性、单一继承,多接口实现
3)多态:
3.1)意义:行为的多态、对象的多态
行为的多态:同一类型的引用指向不同的对象时,有不同的功能。比如动物、狗、鸟,当创建一个动物,指向狗时,他能跑,指向鸟时,他能飞。
对象的多态,同一对象被造型为不同对象时,有不同的实现,比如,我,造型为员工时,我工作认真负责,当为人子时,尊敬孝顺长辈。
3.2)向上造型、强制类型转换、instanceof判断
能造型成功的类型有:父类或者所实现的接口。
造型成功的条件:引用所指向的对象实现了该接口或就是该类型。
3.3)多态的表现形式:
3.3.1)重写:根据对象来多态
3.3.2)重载:根据参数来多态
重载、重写的区别
重载(Overload):重载发生在一个类中,方法名称相同、参数列表不同。在编译时,会根据方法的签名自动绑定。(方法的签名: 方法名+参数列表)。
重写(Override):发生在父子类中,方法名称相同,参数列表相同,方法体不同,在运行期,进行绑定。
2.接口和抽象类的区别
接口:接口由interface,包含常量和抽象方法(常量声明的同时必须初始化 抽象方法没有方法体),接口不能被实例化。
接口需要被实现,同时必须重写接口中的所有抽象方法。如果子类是抽象类,可以不实现接口中的所有抽象方法,因为抽 象类中允许抽象方法的存在。如果为非抽象类,则必须实现接口中的所有方法。jdk8中,接口中的方法可以写具体方法 了,用default修饰,子类中只需实现没有方法体的抽象方法。
接口和接口之间可以继承,类和接口可以多实现。
接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。遵循你是啥,必须怎样。比如,你是动 物,必须吃饭。
抽象类:由abstract修饰,包含抽象方法的类必须是抽象类,需要被继承,不能被实例化。
抽象类的意义
1 封装子类共有的属性和行为-------------------代码复用
2 为所有的子类提供一种统一的类型-------------向上造型
3 可以包含抽象方法,为所有子类提供提供统一的入口
每个子类的实现不同,但入口一致
抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性(重写抽象方法, 拥有自己的实现)
3.Spring中的IoC是如何进行注入的
注解是什么:注解是Annontation的中文名称,它提供了一种安全的类似注释的机制,用来将任何的信息或元数据 (metadata)与程序元素(类、方法、成员变量等)进行关联。
服务启动时,会根据配置文件,进行扫描,将添加注解的bean添加到容器中,交由IoC容器进行管理,Ioc进行反转控制,将bean按照注解进行注入。
4.异常
java为异常定义了基类java.lang.Throwable,作为所有异常的超类。异常主要分为两类,error(错误)和exception(异常)。
error:表示程序无法处理的错误,系统出现了严重的错误,一般是jvm运行时错误,如OutOfMemoryError, NoClassDefFoundError等。
exception:程序本身可以捕获并且可以处理的异常。
异常又分为两类:运行时异常(不受检查异常)和编译异常(可检查异常)。
运行时异常:RuntimeException类极其子类表示JVM在运行期间可能出现的错误。比如空指针,下标越界,一般是由逻辑错 误引起的。
编译异常:Exception中除RuntimeException极其子类之外的异常。如果程序中出现此类异常,比如说IOException,必须对 该异常进行处理,否则编译不通过。在程序中,通常不会自定义该类异常,而是直接使用系统提供的异常类。
异常处理机制:抛出异常和捕获异常
抛出异常:当一个方法出现错误而引发异常时,该方法会将该异常类型以及异常出现时的程序状态信息封装为异常对象, 并交给本应用。运行时,该应用将寻找处理异常的代码并执行。任何代码都可以通过throw关键词抛出异常,比 如java源代码抛出异常、自己编写的代码抛出异常等。
捕获异常:一旦方法抛出异常,系统自动根据该异常对象寻找合适异常处理器(Exception Handler)来处理该异常。所谓 合适类型的异常处理器指的是异常对象类型和异常处理器类型一致。
对于不同的异常,java采用不同的异常处理方式:
1、运行异常将由系统自动抛出,应用本身可以选择处理或者忽略该异常。
2、对于方法中产生的Error,该异常一旦发生JVM将自行处理该异常,因此java允许应用不抛出此类异常。
3、对于所有的可查异常,必须进行捕获或者抛出该方法之外交给上层处理。也就是当一个方法存在异常时,要么使用try- catch捕获,要么使用该方法使用throws将该异常抛调用该方法的上层调用者。
捕获异常:通过try-catch-finally,对于可能发生的异常可通过catch并列处理,大异常在后,小异常在前。finally为必须执行的代码。