java面试题集(一)

2018-08-28  本文已影响0人  我呀有一只小毛驴

1、面向对象的特征有哪些方面?

封装、继承、多态

2、访问修饰符public,private,protected,以及不写(默认)时的区别?

修饰符 当前类 包内 子孙类 包外
public
protected ×
default × ×
private × × ×

注:
不写时默认为default,默认为包内使用。

3、String 是最基本的数据类型吗?

String和Integer都是包装类型;
Java有8种基本数据类型: byte、short、int、long、double、float、boolean、char;

4、float f=3.4;是否正确?

答案:不正确。
原因:精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 或float f = 3.4f
在java里面,没小数点的默认是int,有小数点的默认是 double;
编译器可以自动向上转型,如int 转成 long 系统自动转换没有问题,因为后者精度更高
double 转成 float 就不能自动做了,所以后面的加上个 f;

5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

1、对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
2、对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
3、s1是short型,1是int型,所以两个加完后是类型加大的那个是int,但是s1=s1+1;赋值的时候,s1是short型,不能将int型隐式转换成short。

6、Java有没有goto?

goto是Java中的保留字,但是现在还没有在Java中使用goto,Java用带标签的continue和break语句能够完全代替goto的功能,从而避免了goto语句的滥用。

7、int和Integer有什么区别?

int 是基本数据类型,而integer 是对象(也就是一个类)。因此在类进行初始化时int类的变量初始为0,而Integer的变量则初始化为null。
类似的还有:float Float; double Double; String等

8、&和&&的区别?

对于:& -- > 不管怎样,都会执行"&"符号左右两边的程序;
对于:&& -- > 只有当符号"&&"左边程序为真(true)后,才会执行符号"&&"右边的程序。

9、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

堆区:专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型标记等,并不保存对象的方法(方法是指令,保存在Stack中)
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身.
3.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
栈区:对象实例在Heap 中分配好以后,需要在Stack中保存一个4字节的Heap内存地址,用来定位该对象实例在Heap 中的位置,便于找到该对象实例。
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
4.由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.
静态区/方法区:
1.方法区又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
3.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

答:11.5+0.5后是12再向下取整是12;-11.5+0.5后是-11再向下取整-11
扩展:Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整, 所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

想要面试BAT,做完这160道Java技术面试题,让你胸有成竹!

上一篇下一篇

猜你喜欢

热点阅读