2022年面试题Java .pdf





《2022年面试题Java .pdf》由会员分享,可在线阅读,更多相关《2022年面试题Java .pdf(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java 基础方面基础部分的顺序:基本语法 ,类相关的语法,内部类的语法,继承相关的语法,异常的语法 ,线程的语法 ,集合的语法 ,io 的语法 ,虚拟机方面的语法. 1. 作用域public,private,protected,以及不写时的区别作用域当前类同一 package 子孙类其他 package public protected friendly private 不写时默认为friendly 2. Anonymous Inner Class (匿名内部类) 是否可以extends(继承 )其它类 ,是否可以implements(实现 )interface(接口 ) 答 :匿名的内部类
2、是没有名字的内部类.不能 extends(继承 ) 其它类 ,但一个内部类可以作为一个接口 ,由另一个内部类实现3. Static Nested Class 和 Inner Class 的不同答 :Nested Class (一般是C+的说法 ),Inner Class ( 一般是 JAVA 的说法 ).Java 内部类与C+嵌套类最大的不同就在于是否有指向外部的引用上.注 : 静态内部类(Inner Class)意味着 1创建一个static内部类的对象,不需要一个外部类对象,2 不能从一个static内部类的一个对象访问一个外部类对象4. & 和& 的区别& 和 & 都可以用作逻辑与的运算
3、符,表示逻辑与 (and),当运算符两边的表达式的结果都为 true 时 ,整个运算结果才为true,否则 ,只要有一方为false,则结果为false. & 还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如 ,对于 if(str != null & !str.equals( “”)表达式 ,当 str 为 null 时 ,后面的表达式不会执行,所以不会出现NullPointerException如果将 & 改为 &, 则会抛出NullPointerException异常 .If(x=33 & +y0) y会增长 ,If(x=33 & +y0)不会增长& 还可以用
4、作位运算符,当& 操作符两边的表达式不是boolean类型时 ,& 表示按位与操作,我们通常使用0 x0f来与一个整数进行&运算 ,来获取该整数的最低4个 bit位 ,例如 ,0 x31 & 0 x0f 的结果为0 x01. 5. 在 JAVA 中如何跳出当前的多重嵌套循环? 在Java 中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break 语句 ,即可跳出外层循环.例如 , for(int i=0;i10;i+) for(int j=0;j10;j+) System.out.println(“i= ” + i + “,j= ” + j);
5、 if(j = 5) break ok; 另外 ,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如 ,要在二维数组中查找到某个数字. int arr = 1,2,3,4,5,6,7,9; boolean found = false; for(int i=0;iarr .length & !found;i+) for(int j=0;jarri.length;j+) System.out.println(“i= ” + i + “,j= ” + j);if(arrij = 5) found = true; break; 6. switch 语句能
6、否作用在byte 上,能否作用在long 上 ,能否作用在String 上 ? 在 switch(expr1)中 ,expr1 只能是一个整数表达式或者枚举常量(更大字体 ),整数表达式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 49 页 - - - - - - - - - 可以是int 基本类型或Integer 包装类型 ,由于 ,byte,short,char 都可以隐含转换为int,所以 ,这些类型以及这些类型的包装类型也是可以的.显然 ,long和 Strin
7、g类型都不符合switch的语法规定 ,并且不能被隐式转换成int 类型 ,所以 ,它们不能作用于swtich 语句中 . 7. 请设计一个一百亿的计算器要实现一个一百亿的计算器,我们得自己设计一个类可以用于表示很大的整数,并且提供了与另外一个整数进行加减乘除的功能,大概功能如下: (1)这个类内部有两个成员变量,一个表示符号 ,另一个用字节数组表示数值的二进制数(2)有一个构造方法,把一个包含有多位数值的字符串转换到内部的符号和字节数组中(3)提供加减乘除的功能public class BigInteger int sign;byte val; public Biginteger(Strin
8、g val) sign = ;val = ; public BigInteger add(BigInteger other) public BigInteger subtract(BigInteger other) public BigInteger multiply(BigInteger other) public BigInteger divide(BigInteger other) 8. 使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.例如 ,对于如下语句
9、:final StringBuffer a=new StringBuffer(immutable); 执行如下语句将报告编译期错误:a=new StringBuffer(); 但是 ,执行如下语句则可以通过编译: a.append( broken!); 有人在定义方法的参数时,可能想采用如下形式来阻止方法内部修改传进来的参数对象: public void method(final StringBuffer param) 实际上 ,这是办不到的,在该方法内部仍然可以增加如下代码来修改参数对象: param.append(a); 9.= 和 equals方法究竟有什么区别? (单独把一个东西说清楚
10、,然后再说清楚另一个,这样 ,它们的区别自然就出来了,混在一起说 ,则很难说清楚) =操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用 =操作符 . 如果一个变量指向的数据是对象类型的,那么 ,这时候涉及了两块内存,对象本身占用一块内存 (堆内存 ),变量也占用一块内存,例如Objet obj = new Object(); 变量obj 是一个内存 ,new Object()是另一个内存,此时 ,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址.对于指向对象类型的变量,如果要
11、比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用=操作符进行比较. equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同 ,它比较的两个对象是独立的.例如 ,对于下面的代码: String a=new String(foo); String b=new String(foo); 两条 new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即 a 和 b中存储的数值是不相同的,所以 ,表达式 a=b将返回 false,而这两个对象中的内容是相同的,所以 ,表
12、达式 a.equals(b)将返回 true. 在实 际开发中,我们经 常要比较传递进行来的字符串内容是否等 ,例如 ,String input = ;input.equals(“ quit ” ),许多人稍不注意就使用=进行比较了 ,这是错误的 ,记住 ,字符串的比较基本上都是使用equals方法 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 49 页 - - - - - - - - - 如果一个类没有自己定义equals 方法 ,那么它将继承Object 类的
13、equals方法 ,Object 类的 equals方法的实现代码如下: boolean equals(Object o) return this=o; 这说明 ,如果一个类没有自己定义equals方法 ,它默认的 equals方法 (从 Object 类继承的 )就是使用 =操作符 ,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals 和使用 =会得到同样的结果,如果比较的是两个独立的对象则总返回false.如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals 方法 ,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的. 10.
14、 静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加static 关键字 ,而实例变量前则不加. 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量.静态变量不属于某个实例对象,而是属于类 ,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间 ,静态变量就可以被使用了.总之 ,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用. 例如 ,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar 变量 ,并且每创建一个实例对象,这
15、个staticVar 就会加1;但是 ,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar 的值都只自加了1 次 . public class VariantTest public static int staticVar = 0; public int instanceVar = 0; public VariantTest() staticVar+;instanceVar+; System.out.println(“staticVar=” + staticVar + ”,instanceVar=” + instance
16、Var);11. 是否可以从一个static 方法内部发出对非static 方法的调用 ? 不可以 .因为非 static 方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static 方法调用时不需要创建对象,可以直接调用.也就是说 ,当一个static 方法被调用时,可能还没有创建任何实例对象,如果从一个static 方法中发出对非static方法的调用 ,那个非 static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以 ,一个 static方法内部发出对非static 方法的调用 . 12. Integer 与 int 的区别int 是 java 提
17、供的8 种原始数据类型之一.Java 为每个原始类型提供了封装类,Integer是 java 为 int 提供的封装类.int 的默认值为0,而 Integer 的默认值为null,即 Integer 可以区分出未赋值和值为0 的区别 ,int 则无法表达出未赋值的情况,例如 ,要想表达出没有参加考试和考试成绩为0 的区别 ,则只能使用Integer.在 JSP 开发中 ,Integer 的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而 int 默认的默认值为0,所以用 el 表达式在文本框中显示时 ,结果为0,所以 ,int 不适合作为web层的表单数据的类型. 在 H
18、ibernate 中 ,如果将 OID 定义为 Integer 类型 ,那么 Hibernate 就可以根据其值是否为null 而判断一个对象是否是临时的,如果将 OID 定义为了int 类型 ,还需要在hbm 映射文件中设置其 unsaved-value 属性为0. 另外 ,Integer 提供了多个与整数相关的操作方法,例如 ,将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量. 13. Math.round(11.5) 等於多少 ? Math.round(-11.5) 等於多少 ? Math 类中提供了三个与取整有关的方法:ceil.floor.round,这
19、些方法的作用与它们的英文名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 49 页 - - - - - - - - - 名 称 的 含 义 相 对 应 , 例 如 ,ceil 的 英 文 意 义 是 天 花 板 ,该 方 法 就 表 示 向 上 取 整 , 所以 ,Math.ceil(11.3)的结果为12,Math.ceil(-11.3) 的结果是 -11;floor 的英文意义是地板,该方法就表示向下取整,所以 ,Math.floor(11.6) 的结果为11,Math
20、.floor(-11.6) 的结果是 -12;最难掌握的是 round 方法 ,它表示 “ 四舍五入 ”,算法为Math.floor(x+0.5), 即将原来的数字加上0.5后再向下取整 ,所以 ,Math.round(11.5) 的结果为12,Math.round(-11.5) 的结果为 -11. 编程 :1 编写一个函数将一个十六进制数的字符串参数转换成整数返回. String str = “13abf”; int len = str.length; int sum = 0;for(int i=0;ilen;i+) char c = str .charAt(len-1-i); int n
21、= Character .digit(c,16); sum += n * (1(4*i);其实 ,也可以用Integer.parseInt(str ,16) 编程 :2 银行贷款的还款方式中最常用的是一种叫“ 等额本息 ”,还款法 ,即借款人在约定还款期限内的每一期(月)归还的金额 (产生的利息 +部分本金 )都是相等的 ,现有一笔总额为T元的N 年期住房贷款,年利率为R,要求算出每一期的还款的本金和利息总额,请写出解决思路和任意一种编程语言实现的主要代码. 思路 :既然是按月还款,那我就要将N 年按月来计算,即要还N*12 个月 ,这样就可以求出每月要还的本金.由于每月要还的那部分本金所欠的
22、时间不同,所以 ,它们所产生的利息是不同的 ,该部分本金的利息为:部分本金额*所欠月数 *月利率 .应该是这么个算法,如果利息还计利息 ,如果月还款不按年利率来算,老百姓算不明白的. int monthMoney = T/N/12; float monthRate = R/12; int totalMonth = N * 12; float totalRate = 0; for(int i=1;i=totalMonth;i+) totalRate += monthMoney * monthRate * i; int result = monthMoney + totalRate/N/12; 编
23、程 :3 任意数字序列“123456”之类 ,输出它们所有的排列组合String str = “ xafdvs ”;char arr1 = str .toCharArray(); char arr2 = Arrays.copyOf(arr1,arr1.length); for(int i=0;iarr1.length-1;i+) for(int j = i+1;jarr2.length;j+) syso: arr1i + “, ” + arr2j; 14. Collection 和 Collections 的区别答 :Collection 是集合类的上级接口,继承与他的接口主要有Set 和 L
24、ist. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索. 排序 . 线程安全化等操作15. 什么时候用assert 答 :assertion(断言 )在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制.在实现中 ,assertion 就是在程序中的一条语句,它对一个boolean 表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出.一般来说 ,assertion 用于保证程序最基本. 关键的正确性.assertion 检查通常在开发和测试
25、时开启.为了提高性能,在软件发布后,assertion检查通常是关闭的16 . String s = new String(xyz); 创建了几个String Object 答 : 两个或一个 , ”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量 ”xyz”不管出现多少遍 ,都是缓冲区中的那一个.New String 每写一遍,就创建一个新的对象,它一句那个常量 ”xyz”对象的内容来创建出一个新S tring 对象 .如果以前就用过xyz,这句代表就不会创建 ”xyz”自己了 ,直接从缓冲区拿. 17. Math.round(11.5) 等於多少 ? Math.round(-11.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年面试题Java 2022 试题 Java

限制150内