1、下面程序的输出结果是()

public class Test {

    public static void main(String[] args) {
int j = 0 ;
for(int i = 0 ; i < 100 ; i++){
j = j++ ;
}
System.out.println(j);
}
}

A. 0       B.99      C.100        D.101

解析:因为Java采用了中间缓存变量的机制,所以, j = j++可以换成 temp = j ; j = j + 1 ; j = temp ;所以结果为0.

关于中间缓存变量机制可以参考文章:http://blog.csdn.net/waycaiqi/article/details/43486249

2、以下程序错误的是()

A. short s = 1; s = s + 1 ;                    B. short s = 1 ; s += 1 ;            C. short s = 1 ; s = 1 + 1 ;

解析:使用+=、-=、*=、/=、%=等赋值运算符对基本类型运算时,运算符右边的数字将首先被强制转换成与左边数值相同的数据类型,然后在进行运算,且运算结果与运算符左边的数值类型相同,所以选项B正确。对于选项C,1+1是一个可以确定的常量,“+”在编译时就被执行了,而不是在程序运行的时候执行,所以效果等同于s = 2 ; 的赋值操作,所以也正确。而A选项中的 s+1执行后的结果为int型,所以不能赋值给s。故错误的A

3、以下代码的输出结果是()

public class Test {

    public static void main(String[] args) {
int a = 5 ;
System.out.println("value is " + ((a < 5) ? 10.9 : 9)); char ch = 'x' ;
int i = 10 ;
System.out.println(false ? i : ch );
System.out.println(false ? 10 : ch );
}
}

解析:Java编程规范中提到,对于三目运算符?:而言,当后两个表达式的数据类型不一致时,系统会自动将两个表达式的类型转化一致,所以第一个输出结果为9.0而不是9,第二个输出结果为120。此外,Java编程规范中还提到,当后两个表达式有一个是常量表达式(本题是10)时,另外一个类型是T(本题是char)时,而常量表达式可以被T表示时,输出结果是T类型。所以第三个输出的是x而不是120。所以,最终的结果是9.0   120   x

4、下面程序的输出结果是()

public class Test {

    public static void main(String[] args) {
int num = 32 ;
System.out.println(num >> 32);
}
}

A. 32     B. 16        C. 1          D. 0

解析: 移位操作符右边的参数首先要对字长进行取模运算,并且移位是对二进制位进行操作,而二进制中8位是一个循环。本题中num为int类型,字长是32,所以num>>32等于num>>0,而num>>33等于num>>1.所以答案为A。

注意:在移位运算时,byte、short和char类型移位后的结果会变成int类型对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

5、当编译下面代码会出现什么情况()

public class Test {

    private int count ;
//构造函数
Test(int count){
this.count = count ;
} public static void main(String[] args) {
Test t = new Test(99) ;
System.out.println(t.count);
}
}

A. 编译时错误,count变量定义的是私有变量

B. 编译时错误,当System.out.println被调用时t没有被初始化

C. 编译和执行时没有输出结果

D. 编译运行后输出结果99

解析:事实上,变量count被定义为私有变量,并不能阻止构造器对其进行初始化,所以count成功被初始化为99,故答案为D

注意,count变量被私有化之后,理论上是不能被访问的。但是该main方法是在本类的内部,所以可以直接访问。如果在另一个类中这样访问Test对象的count变量,是不会成功的,例如下面的代码会在第18行提示访问错误

 public class Test {

     private int count ;
//构造函数
Test(int count){
this.count = count ;
} public static void main(String[] args) {
Test t = new Test(99) ;
System.out.println(t.count);
}
} class T{
public static void say(){
Test t = new Test(55) ;
//System.out.println(t.count) ; //无法编译通过,提示有错误
}
}

6: 8、16、64都是2的阶次方数,用Java编写程序来判断一个整数是否是2的阶次方,并说明那个方法更好?

解析

思路1:不断除以2,并判断是否整除。这是最先想到的方法

public boolean judge(int n){
int num = n ;
if(n < 0){
return false ;
}
//因为1为2的阶次方数,所以不用判断,当大于2时进行判断
while(num >= 2){
if(num%2 == 1){
return false ;
}
num = num/2 ;
}
return true ;
}

思路2:如果一个数是2的阶次方数,那么其二进制的首位为1,其他为均为0。eg:8的二进制表示为100,64表示为1000000等,若将该数减1,则对应的二进制首位为哦,其它位均为1,所以有n & (n-1)的结果为0。所以采用这种方法可以简单快速地进行判断。简单,粗暴,高效

public boolean judge2(int n){
if((n & (n-1)) == 0){
return true ;
}else{
return false ;
}
}

7、下面程序输出结果是什么?

 import java.net.URL;
import java.util.HashSet;
import java.util.Set; public class Test { private static final String [] URLNAMES = {
//IP地址为202.108.33.94
"http://www.sina.com",
//IP地址为124.115.173.252
"http://www.nwu.edu.cn",
//IP地址为208.97.154.9
"http://javapuzzlers.com",
//IP地址为64.233.189.147
"http://www.google.com",
//IP地址为208.97.154.9
"http://Javapuzzlers.com",
//IP地址为208.97.154.9
"http://apache2-snort.skybar.dreamhost.com",
}; public static void main(String[] args) throws Exception {
23 Set<URL> favorites = new HashSet<URL>() ;
24 for(String s : URLNAMES){
25 favorites.add(new URL(s)) ;
26 }
27
28 System.out.println(favorites.size());
}
}

A. 一定是4   B. 一定是5    C. 一定是6    D.以上答案都不对

解析:本题在联网状态下会输出4,这是由于URL的equals比对方式,根据equals的文档说明,如果两个主机名可以解析为同一个IP地址,则认为两个主机相同(即使主机名不相同);如果由一个主机名无法解析,但两个主机名相等(不区分大小写)或两个主机名都为null,则也认为这两个主机相等。上面有三个IP都是208.97.154.9,而Set集合不允许有重复元素出现,所以在联网情况下输出为4

如果是在断网状态下,这些都无法解析为IP地址,这时就要判断URL的名字,仅认为名字相同的才是相同的URL,前面说过URL的判断不区分大小写,而有两个在不区分大小写的情况下是相同的,所以输出结果是5.

所以最后的答案是D

												

Java程序员面试宝典——重要习题整理的更多相关文章

  1. 《JAVA 程序员面试宝典(第四版)》读书笔记之前言

    工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过 ...

  2. JAVA程序员面试宝典

    程序员面试之葵花宝典 面向对象的特征有哪些方面    1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...

  3. [Java程序员面试宝典]读书笔记

    ClassLoader具备层次关系,且不止一种.不同的类装载器分布创建的同一个类的字节码数据属于完全不同的对象,没有任何关联 通过Class.forName(String className),能够动 ...

  4. 【Java】Java程序员面试宝典(第三版)第5章----Java程序设计基本概念

    1.static静态变量,在次级作用域也可以被修改. 2.k++ + k++.第一个自加实际上只有在与计算+k++时补增.详情P36的题目. 3.Java数据类型从低到高分为(byte short c ...

  5. Java程序员面试宝典1 ---Java基础部分(该博文为原创,转载请注明出处)

    (该博文为原创,转载请注明出处   http://www.cnblogs.com/luyijoy/  by白手伊凡) 1.    基本概念 1)         Java为解释性语言,运行过程:程序源 ...

  6. java程序员面试宝典之——Java 基础部分(1~10)

    基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包 ...

  7. 《Java程序员面试宝典》读书笔记1

    今天读书发现一个很有趣的问题 请问以下程序会输出什么? public   class   Test2   {  public   static   void   main(String[]   arg ...

  8. 《JAVA 程序员面试宝典(第四版)》之循环、条件、概率

        分享内容:关于集合的使用   书页号码:77页 题目:一个字符串中包含a~z中的多个字符,如有重复,如String data = "aavzcadfdsfsdhshgwasdfasd ...

  9. 《JAVA 程序员面试宝典(第四版)》之传递与引用篇

    废话开场白         这个周末突然很想创业,为什么呢?原因很简单,我周围的同学或者说玩的比较好的朋友都发达了,前一个月和一个两年前还睡在一张床上的朋友,他现在已经在深圳买房买车了,没错是在深圳买 ...

随机推荐

  1. Sublime Text 3 自定义配置快捷键

    Settings-User: { "font_face": "Courier New", "font_size": 14.0, " ...

  2. [HTMLDOM]onmousedown、onmouseup 以及onclick事件触发顺序

    摘自w3school:http://www.w3school.com.cn/htmldom/dom_events.asp onmousedown.onmouseup 以及 onclick 事件是鼠标点 ...

  3. UVA1347 旅游(二维递归DP)

    旅游 [题目链接]旅游 [题目类型]DP &题解: 紫书P269 代码很简单,但思路很难.很难能想到要把一个圈分成2条线段,很难想到d(i,j)表示的是已经走过max(i,j)还需要的距离值, ...

  4. SCREAM:Error suppression ignored for

    wamp报错SCREAM:Error suppression ignored for 问题:SCREAM:Error suppression ignored for 解决: 在php.ini最下面加入 ...

  5. UCOS-信号量(学习笔记)

    当事件控制块类型为OS_Event_Type_SEM类型时就是信号量,包含2个内容:信号量计数器OSEventcnt和等待列表OSEventTbl[]. 一创建信号量:OSSemCreat(int16 ...

  6. jQuery实现的鼠标滑过切换图片代码实例

    jQuery实现的鼠标滑过切换图片代码实例:有时候网页需要这样的简单效果,那就是当鼠标滑过默认图片的时候,能够实现图片的切换,可能在实际应用中,往往没有这么简单,不过大家可以自行扩展一下,下面简单介绍 ...

  7. 在Virtual Box虚拟机中安装MS DOS!

    原文地址:https://mylinuxramblings.wordpress.com/2010/12/05/linux-mint-debian-edition-lmde-first-impressi ...

  8. Getting started with SciPy for .NET

    Getting started with SciPy for .NET 1.) IronPython Download and install IronPython 2.7, this will re ...

  9. SQL锁表解决并发性

    在数据库开发过程中,不得不考虑并发性的问题,因为很有可能当别人正在更新表中记录时,你又从该表中读数据,那你读出来的数据有可能就不是你希望得到的数据.可以说有些数据同时只能有一个事物去更新,否则最终显示 ...

  10. java小程序 示例 菲薄垃圾数列

    package com.test; import java.util.Scanner; import org.junit.Test; import com.sun.xml.internal.ws.ap ...