学习面试题Day04
1、简述Java派生类中的构造方法如何为父类传递参数。
在Java中,使用super关键字加括号()的形式来为父类的构造方法提供参数,通过参数的数目和类型来决定调用哪个构造方法。如果调用的是父类的默认的无参数构造方法,则可以不必显式地使用super()。
2、简述接口和抽象类的区别。
抽象类是一种功能不全的类,接口只是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。从某种意义上说,接口是一种特殊形式的抽象类,在Java语言中,抽象类表示一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
3、简述一下内部类的实质是什么。
内部类根据定义的情况可以分为以下4种:
(1)静态内部类:它相当于外部类的静态成员一样,使用static修饰的内部类,它隶属于外部类,使用起来相当于一个独立的外部类;
(2)成员内部类:它相当于外部类普通的成员一样,隶属于外部类的具体对象,在定义它的时候,需要先创建外部类对象,再创建它的实例;
(3)局部内部类:它定义在一个方法的方法体中,它往往仅作为方法短暂的使用,只能访问用final修饰的局部变量;
(4)匿名内部类:它也定义在方法体中,但是它没有一个具体的名字,具有非常大的灵活性,工作本质与局部内部类类似。
4、包应该如何被创建及使用。
包是Java程序中关于命名空间的一种手段,它可以有效的解决类重名的问题。当需要把一个类定义在某个包下的时候,需要使用package关键字进行定义;当需要使用其他包下的类的时候,则需要使用import关键字进行导入。
5、说明private,protected,public和default的区别。
它们都是访问控制符,他们的区别如下:
(1)public:可以被所有其他类访问;
(2)private:只能被自身访问和修改;
(3)protected:自身,子类及同一个包中类可以访问;
(4)default(默认):同一个包中的类可以访问,声明时没有加修饰符,认为是friendly。
6、int和Integer有什么区别?
int是基础数据类型,字节长度为4,它的创建不会在堆内存中开辟空间,一般保存在栈内存里,可以用算术运算符进行加减乘除等操作。在参数传递的时候,直接传递它的值。
Integer是int的包装类,而本质是一个类,它的创建会在堆内存中开辟一块新的空间。它的含义也表示一个整型的数字,但是,算术运算符不能操纵它。在参数传递的时候,传递的是它所代表的对象的一个引用。
7、如何用八进制和十六进制来表示整型数据?
Java中八进制字面量采用0开头,十六进制采用0x开头。
8、如何用BigDecimal类进行精确运算?
使用BigDecimal类来进行精确的算术计算,也就是使用它所提供的一系列的API,主要分为以下步骤。
(1)用float或double变量构建BigDecimal对象。通过构造方法或valueOf()方法;
(2)通过调用BigDecimal的加、减、乘、除等,相应的方法进行算术运算;
(3)把BigDecimal对象转换成float、double、int等类型,通过类似xxxValue()等方法进行转换。
9、boolean和它的包装类的区别在哪里?
boolean是基础数据类型,Boolean是类;
boolean一般存于栈空间中,Boolean对象存放在堆空间中;
boolean有true和false两种值,Boolean除了true和false以外,还有null;
Java5.0以前,不能把Boolean用于条件语句,需要转换为boolean以后在使用。
10、char能否存储汉字?
char是可以存储汉字的,每个中文字符都有对应的Unicode编码。
11、字符串字面量是否自动生成一个String对象?
答案是肯定的。字符串类具有一定的特殊性,JVM在执行双引号操作符的时候,会自动的创建一个String对象,并返回这个对象的引用。
12、字符串对象池的作用是什么?
对象池的存在是为了避免频繁的创建和销毁对象而影响系统性能。当JVM在运行用双引号引起来一个字符串的代码时,会到String的对象池中去检查是否有一个字符序列相同的对象。如果有,就取现成的对象,如果没有,则在对象池中创建一个对象,并返回。
13、StringBuffer和StringBUilder存在的作用是什么?
在Java程序中,如果有大量拼接字符串的需要的话,应该使用StringBuffer和StringBuilder类,它们可以避免不必要的String对象的产生,以提高程序的性能。它们两者的作用相似,只不过StringBuilder线程是安全的。
14、如何输出反转过后的字符串?
实现字符串的反转一般来说有两种手段,第一是利用字符串存储字符数据的原理,取出它的char数组,进行重新排列并保存;第二则是生成StringBuffer对象,直接使用StringBuffer的reverse()方法。
15、如何使用指定的字符集创造String对象?
使用带有字符集编码的String的构造方法就可以用指定的字符集来重新创造字符串对象了,该方法的参数包括两个:一个是byte数组;另一个则是字符集编码的字符串形式,例如,UTF-8、GBK、ISO-8859-1等。