关于学习java的过程中遇到的问题
-
子类是否能继承父类的构造函数,如何能够调用父类的构造函数
答:java继承中对构造函数是不继承的,只是调用(隐式或显式)
1.子类在调用时会默认调用父类的无参构造方法
2.子类调用父类的有参构造函数:由子类有参构造传入值,再用super将值调用父类
此处缺个例子(先留着) -
如何在调用不返回值的函数时改变实际值
(在void函数里给参数赋值使得原函数里参数值改变)
答:如果想要通过无返回值修改传入参数的值,可以将传入的参数由值传递改为引用(地址)传递。(参考引用数据类型例如数组,字符串,对象等) -
继承多态(先留着)
-
面试题
请使用两种方式求单个字符‘刘’的Unicode码
答:1. system.out.print((‘刘’+1-1));(运算时,低向高转型)
2. system.out.print((int)‘刘’);(强制转型) -
面试题
final finally finalize 三者区别相同用法
答:1.final是修饰符,它修饰的属性(变量)为常量,修饰的方法不能被重写,修饰的类不能被继承
2.finally代码块中放置的都是无论发生异常与否都会被执行的代码,
一般将一定要执行的重要代码放在其中。
3.finalize是方法,在回收机制回收前的操作都放在其中,
一般存放要被释放的资源 -
面试题
在函数中,如果finally之前,遇到了return关键字,代码如何执行?会直接返回还是执行完finally中的代码再返回
答:执行完再返回
1.finally代码块中放置的都是无论发生异常与否都会被执行的代码,
2.当try,catch中有return时,finally仍会执行,
流程为:先执行return,但不返回,将返回的值存起,等finally代码执行完再返回(但返回值在此过程中不会变)
3.finally的语句块中如果有return就直接返回了 -
拓展
为什么在比较对象的时候,需要重写hashcode和equals方法
答:1.底层的equals函数(默认Object类)是比较二者的内存地址,而我们比较对象的时候一般是比较其值是否相同,所以一般要重写
2.假如只重写equals而不重写hashcode,那么hashcode方法就是Object默认的hashcode方法,由于默认的hashcode方法是根据对象的内存地址经哈希算法得来的,所以两个相同的对象的hashcode不一定相等。 -
异常与错误的区别
1.在 Java 中,所有的异常都有一个共同的祖先 Throwable。
Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
2.Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问题。
Exception 类有一个子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。
3.Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关, -
面试题
请简述StringBuilder和StringBuffer的区别
答:1.二者都是字符串缓冲类,都可以xxxxxx
2.StringBuilder操作效率高,但非线程安全,(jdk1.5)
StringBuffer操作效率低但是线程安全(jdk1.0)
3.推荐使用StringBuilder,当多线程时使用StringBuffer -
面试题
关于字符串的存储问题
答:1.字符串存储在运行时常量池中
2.在jdk1.8之前, 方法区,是存储常量的地方
在jdk1.8及其之后,字符串是存储在堆中 -
为什么要引入字符串缓冲区
答:由于字符串是常量,所以在运算的过程中可能会产生很多不需要的垃圾,所以要引入字符串缓冲区。字符串缓冲区对象更像是一个存放字符串的容器,不会产生大量不必要的垃圾。