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. 原生视觉差滚动---js+css;

    <!doctype html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. (C#) 发布程序,包含某些配置文件或数据文件。

    在VS2012里面,右击需要发布的Project,选择“Properties“, 在弹出的窗口里面点选”Publish“, 再点击”Application Files“, 将默认的Publish St ...

  3. [Android实例] Scroll原理-附ScrollView源码分析

    想象一下你拿着放大镜贴很近的看一副巨大的清明上河图, 那放大镜里可以看到的内容是很有限的, 而随着放大镜的上下左右移动,就可以看到不同的内容了 android中手机屏幕就相当于这个放大镜, 而看到的内 ...

  4. BIP_开发案例05_BI Pubisher标准做法以BIP.XML为数据源以BIP.RTF为模板的简单例子(案例)

    2014-05-31 Created By BaoXinjian

  5. ubuntu修改grub界面默认开机顺序

    终端输入: sudo gedit /etc/default/grub GRUB_DEFAULT代表的就是启动项的顺序,从数字0开始 修改成默认的第几个,就赋值成几就好(顺序从数字0开始) 然后别忘了运 ...

  6. git的使用(3) 多分支情况下的pull

    当你存在多个分支的时候,你需要pull下来分支上面的内容,你需要指定分支进行同步命令: git pull origin branch (branch 是你的分支的名字)

  7. JAVA数据类型自动转换,与强制转换

    一.数据类型自动转换 public class Test{ public static void main(String[] args){ int a = 1; double b = 1.5; dou ...

  8. java多线程之计算数量

    package Thread.Abort; import java.util.ArrayList; import java.util.List; import java.util.Random; im ...

  9. Nginx+Tomcat+Keepalived+Memcache 负载均衡动静分离技术

    一.概述 Nginx 作负载均衡器的优点许多,简单概括为: ①实现了可弹性化的架构,在压力增大的时候可以临时添加Tomcat服务器添加到这个架构里面去; ②upstream具有负载均衡能力,可以自动判 ...

  10. js判断正整数

    var r = /^\+?[1-9][0-9]*$/; //判断正整数 r.test(str);