24-06-13
是否可以继承String?
String类是final类,不能被继承.
继承String本身就是一个错误行为,对String类型最好的重写方式是关联关系(Has-A)和依赖关系(Use-A)而不是继承关系
重载(overload)和重写(override)的区别?重载的方法能否根据返回类型进行区分?
方法的重载和重写都是实现多态的方式,区别在于重载在于编译时的多态性,而重写实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同,参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法和父类重写的方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回值类型没有特殊的要求
方法重载的规则:
- 方法名一致,参数列表中的顺序,类型,个数不同
- 重载与方法的返回值无关,存在父类和子类,同类中
- 可以抛出不同的异常,可以有不同的修饰符
方法重写的规则:
- 参数列表必须和被重写方法一致,返回类型必须完全和被重写方法的返回类型一致
- 构造方法不能被重写,声明为final的方法不能被重写,声明为static方法不能被重写,,但能够被再次声明
- 访问权限不能比被重写方法的访问权限低
- 重写方法能抛出非强制异常,无论被重写的方法是否抛出异常,但是重写的方法不能抛出强制性异常,或者不能抛出比被重写方法更广泛的强制性异常。
char 型变量中能不能存储一个中文汉字,为什么?
char可以存储一个中文汉字,因为Java中的编码采用Unicode(不选择如何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法)。一个char占二个字节(16比特),所以存储一个中文没有问题
抽象类(abstract class)和接口(interface)有什么异同?
抽象类:
- 抽象类可以定义构造函数
- 可以有抽象方法和具体方法
- 抽象类中的成员可以是private,默认,protected或public
- 抽象类中可以定义成员变量
- 有抽象方法的类一定是抽象类,抽象类中不一定有抽象方法
- 抽象方法中可以包含静态方法
- 一个类只能继承一个抽象
接口:
- 接口中不能定义构造函数
- 方法全部是抽象方法
- 接口中的成员全部是public
- 接口中定义的成员变量实际上都是常量
- 接口中不能有静态方法
- 一个类可以实现多个接口
相同:
- 不能实例化
- 可以将抽象类和接口类作为引用类型
- 一个类如果继承某个抽象类或者实现某个接口都需要对其中的全部抽象方法进行实现,否则该类也被声明为抽象类
==和 equals 的区别?
equals与==最大的区别在于一个是方法一个是运算符
-
== 如果比较的对象的基本数据类型,则比较的是数值是否相等,如果比较的是引用类型,则比较的是对象的地址值是否相等
-
equals()用来比较两个对象的内容是否相等
注意:equals()不能比较基本数据类型,如果没有对equals进行重写,则比较的是引用类型的变量所对象的地址
break 和 continue 的区别?
break和continue都是控制循环的语句
- break用于完全结束一个循环,跳出循环体,执行循环体后面的代码
- continue用于结束本次循环,执行下一次循环
Java 中实现多态的机制是什么
靠的是父类或接口定义的引用变量可以指向子类或者具体实现类的实例对象,而程序调用的方法在运行期才能动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
error 和 exception 的区别?
Error和Exception类的父类都是Throwable类
区别:
- Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等,对这类错误导致是应用程序中断,仅靠程序本身无法恢复和预防,遇到这种错误,建议让程序终止
- Exception类表示程序可以处理的异常类,可以捕获且可能恢复。遇到这种异常,应该尽可能处理异常,使程序恢复运行,而不是随意终止
- Exception类又分成运行时异常(Runtime Exception)和受检查的异常(Checked Exception),运行时异常,编译能通过,但一运行就终止,程序不会处理运行h时异常,出现这类异常,程序会终止,而受检查的异常,要么使用try...catch捕获,要不就是throws字句声明抛出。交给它的父类处理,否则编译不会通过
java 异常处理机制
Java对异常进行分类,不同类型的异常分别用不同的Java类表示,所有的异常的根类为java.lang.ThrowAble.Throwable下面派生出两个子类:Error和Exception。Error表示应用程序本身无法克服和恢复的一种严重的问题。Exceptionbioassay程序能克服和恢复的问题,其中又分成系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周导致的问题,软件使用者无法克服和恢复的问题,但还可以让软件系统继续运行或让软件死掉;普通异常是运行环境或者异常所导致的问题,用户可以克服的,发生这样的异常后,程序不应该死掉
Java为系统异常和普通异常提供不同的解决方案,编译器强制普通异常必须try...catch处理或者throws声明继续抛给上层调用方法处理,所以普通异常也称checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try...catch或throws,称为unchecked异常
请写出你最常见的 5 个RuntimeException
-
java.lang.NullPointerException:空指针异常。原因:调用了未经初始化的对象或者不存在的对象
-
java.lang.ClassNotFoundException:指定的类找不到。原因:类的名称和路径加载错误,通常是程序试图通过字符串来加载某个类时可能引发异常
-
java.lang.NumberFormatException:字符串转换成数字异常。原因:字符型数据中包含非法的数字型字符
-
java.lang.IndexOutOfBoundsException:数组角标越界异常。常用于操作数组时发生
-
java.lang.IllegalArgumentException:方法传递参数错误
-
SQLException:SQL异常,常用于操作数据库时的SQL语句异常
-
java.lang.NoClassDefFounfException:为找到类定义错误
-
java.langInstantiationException:实例化异常
-
java.lang.NoSuchMethodException:方法不存在异常