Java笔试面试题汇总(2)

2019-08-30 12:59

16.看程序写结果 class A{ static{

System.out.print(\); }

public A(){

System.out.print(\); } }

class B extends A{ static{

System.out.print(\); }

public B(){

System.out.print(\); } }

public class C{

public static void main(String[] ars){ A a = new B(); //执行到此处,结果: 1a2b a = new B(); //执行到此处,结果: 1a2b2b } }

类的static 代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对 于类的加载,首先要执行其基类的构造,再执行其本身的构造

17.抽象类和接口的区别?

(1)接口可以被多重implements,抽象类只能被单一extends (2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final,当功能需要累积时用抽象类,不需要累积时用接口

18.什么是类的反射机制?

通过类(Class对象),可以得出当前类的fields、 method、 construtor、 interface、superClass、 modified等,同时可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是反射、 struts、 hibernate都是通过类的反射进行开发的

19.类的反射机制中的包及核心类 java.lang.Class

java.lang.refrection.Method java.lang.refrection.Field

java.lang.refrection.Constructor

java.lang.refrection.Modifier java.lang.refrection.Interface

20.得到 Class的三个过程是什么? 对象.getClass()

类.class或Integer.type(int) Integer.class(java.lang.Integer) Class.forName();

21.如何唤起类中的一个方法?

产生一个Class数组,说明方法的参数 通过Class对象及方法参数得到Method

通过method.invoke(实例,参数值数组)唤醒方法

22.如何将数值型字符转换为数字( Integer, Double)? Integer.parseInt(“1234”); Double.parseDouble(“123.2”);

23.数据类型转换:

byte a = 3;

int b = 4;

//int c = a + b; //这个肯定没有问题 //byte c = a + b; //这个是有问题的

//用强制类型转换改进 byte c = (byte) (a + b);

思考题1:请问下面这个有没有问题 double d = 12.345; float f = d;

答:是有问题的,需要进行强制类型转换

思考题2:看看下面两个定义有没有区别呢? float f1 = (float)12.345; float f2 = 12.345f;

f1其实是通过一个double类型转换过来的。 而f2本身就是一个float类型。 面试题:

byte b1=3,b2=4,b; b=b1+b2; b=3+4;

哪句是编译失败的呢?为什么呢? b = b1 + b2; //编译失败。

因为变量相加,题中首先会转换为int类型数据,最终把结果赋给byte类型的变量b时由于可能会损失精度,因此会报错!

常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。 具体分析:

//b = b1 + b2; //这个是类型提升,所以有问题

b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。

byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?

//因为byte的范围是:-128到127。

//而130不在此范围内,所以报错。 //byte b = 130;

//我们可以使用强制类型转换 byte b = (byte) 130;

//结果是多少呢?

System.out.println(b); //-126 分析过程:

我们要想知道结果是什么,就应该知道是如何进行计算的。 而我们又知道计算机中数据的运算都是补码进行的。 而要得到补码,首先要计算出数据的二进制。

A:获取130这个数据的二进制。

00000000 00000000 00000000 10000010 这是130的原码,也是反码,还是补码。 B:做截取操作,截成byte类型的了。 10000010

这个结果是补码。 C:已知补码求原码。

符号位 数值位 补码: 1 0000010

反码: 1 0000001

原码: 1 1111110

24.运算符 面试题:

short s=1;s = s+1; //错误,运算的时候s先转换为int类型,然后参与运算,此时需要强制类型转换为short类型

short s=1;s+=1; //正确 扩展的赋值运算符其实隐含了一个强制类型转换。 s += 1;

不是等价于 s = s + 1;

而是等价于 s = (s的数据类型)(s + 1); 25.位运算符

class OperatorDemo {

public static void main(String[] args) { //&,|,^,~

int a = 3; int b = 4;

System.out.println(3 & 4); //0 System.out.println(3 | 4); //7 System.out.println(3 ^ 4); //7 System.out.println(~3); //-4 } }

分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11

00000000 00000000 00000000 00000011 4的二进制:100

00000000 00000000 00000000 00000100

&位与运算:有0则0。

00000000 00000000 00000000 00000011 &00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000000 结果是:0

|位或运算:有1则1。

00000000 00000000 00000000 00000011 |00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000111 结果是:7

^位异或运算:相同则0,不同则1。

00000000 00000000 00000000 00000011 &00000000 00000000 00000000 00000100

----------------------------------- 00000000 00000000 00000000 00000111 结果是:7

~按位取反运算符:0变1,1变0

00000000 00000000 00000000 00000011

~11111111 11111111 11111111 11111100 (补码)

补码:11111111 11111111 11111111 11111100 反码:11111111 11111111 11111111 11111011 原码:10000000 00000000 00000000 00000100 结果是:-4 面试题:

<<:左移 左边最高位丢弃,右边补齐0

>>:右移 最高位是0,左边补齐0;最高为是1,左边补齐1 >>>:无符号右移 无论最高位是0还是1,左边补齐0

请用最有效率的方式写出计算2乘以8的结果? 2 * 8 2 << 3

class OperatorDemo {

public static void main(String[] args) { //<< 把<<左边的数据乘以2的移动次幂

System.out.println(3 << 2); //3*2^2 = 3*4 = 12;

//>> 把>>左边的数据除以2的移动次幂

System.out.println(24 >> 2); //24 / 2^2 = 24 / 4 = 6 System.out.println(24 >>> 2); //6

System.out.println(-24 >> 2); //-6

System.out.println(-24 >>> 2); //1073741818 } }

详细分析:

计算出3的二进制:11

00000000 00000000 00000000 00000011 (00)000000 00000000 00000000 0000001100 计算出24的二进制11000

00000000 00000000 00000000 00011000 0000000000 00000000 00000000 000110(00)

计算出24的二进制:11000

原码:10000000 00000000 00000000 00011000


Java笔试面试题汇总(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:广东省关于〈幼儿园收费管理暂行办法〉的实施细则和《广东省关于

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: