迈进java初中级程序员分水岭是否合格?十个题告诉你!

前言

不论你是职场新人还是步入职场N年的职场新人大哥大当然这个N<3,我能担保你答不对这十个题不要问我为什么这么自信,这些个题还是“有水平”的javase的基础题,传闻小白指定鸭蛋分,一测一个准,哈哈。

作为将来要成为架构师的男人,对,你没看错,就是在说你 皮一下很开森 ,what?你是小白?我顶你个肺,我叫声杠精,你敢应吗,那个代号9527的杠精,说你呢快快来答题,看你能答对几道题。

题一

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ 
	short s = 1;
	 s=s+1; 
	System.out.println(s); 
} 

ps : 各位兄嘚都是大孩子了,各位都把自己的结果记在个小本本上再看下面的分析答案~

分析: s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围 大的类型赋值到取值范围小的类型,所以这个程序会报错编译失败。

题二

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ 
	short s = 1;
	 s+=1; 
	System.out.println(s); 
} 

ps : 各位兄嘚都是大孩子了,各位都把自己的结果记在个小本本上再看下面的分析答案~

分析: s += 1 逻辑上看作是 s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围 大的类型赋值到取值范围小的类型。但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点, 也就是说 s += 1 就是 s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2.

到这里,两个都错了的自觉点给楼主文章右上角点个赞,鸭!恭喜获得第N+1个准确无疑的天真小白荣誉勋章,千万别嫌弃,就像侠岚风语咒里说的:只要心怀正义,侠岚无处不在!所以我只想表达的是,天真小白荣誉勋章也是勋章。hhhhhh, 哎哎哎,别打...别打...别打脸.

题三

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ 
		byte b1=1; 
		byte b2=2; 
		byte b3=1 + 2; 
		byte b4=b2 + b3; 
		System.out.println(b3); 
		System.out.println(b4); 
}

ps : 各位兄嘚都是大孩子了,各位都把自己的结果记在个小本本上再看下面的分析答案~

分析: b3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没 有超过byte类型的取值范围,可以赋值给变量 b3 ,因此 b3=1 + 2 是正确的。 反之, b4 = b2 + b3 , b2 和 b3 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定b2+b3的结果是什 么,因此会将结果以int类型进行处理,所以int类型不能赋值给byte类型,因此编译失败。

题四

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

public static void main(String[] args){ 
	  short s = 32767;
      s = (short)(s + 10);

      System.out.println(s); 
}

ps : 各位兄嘚都是大孩子了,各位都把自己的结果记在个小本本上再看下面的分析答案~

分析:定义s为short范围内最大值 (2^15) - 1 = 32767,运算后,强制转换(int换为short),砍掉2个字节后会出现不确定的结果,因为这个值以及超出了short类型数据的范围,从而变成负数结果-32759

到这里,四个题都错了的自觉点给楼主文章右上角点个赞,还有小白同学千万别灰心,想当年楼主刚学java的时候,在腾讯课堂听课直播的是时候,那个老师出的就是这些类型题,我一直答错,那个老师提了楼主我好几次:这位小白同学又是你,你又答错了...不提了,往事不堪回首。所以,小白同学千万别灰心哦~

题五

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

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

ps : 各位兄嘚都是大孩子了,各位都把自己的结果记在个小本本上再看下面的分析答案~

分析:这个稍微没有任何细节以及“套路”,只是单纯的掺杂着些逻辑,所以段个点debug吧,感受一下吧,结果是6

题六

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

 public static void main(String[] args) {
      
        int  x=4;
        System.out.println("value  is  " + ((x>4) ? 99.9 : 9));

    }

分析:这个题我估计99%的会错 包括我自己 ,如果我没猜错的话你的结果是9,啥?你的结果是99.9,额这个,如果这位同学你不是杠精那我建议你回家种田吧,我和你一起,你锄地我耕田...呃呃呃那结果是什么呢,结果居然是9.0 。。。至于原因我还是不断定的哈哈没有仔细去专研过,如果必须要个结果我估计java把9这个整数默认当成浮点类型数据,我当然只是推论,那么知道的大佬就请评论出来吧。

题七

下面的程序有问题吗?如果有问题说明一下, 如果没有问题猜测一下运行结果

 public static void main(String[] args) {
 //对于下面两句代码是否编译出错,很基础的哦
	      double d=3.10;
	      float f=3.10; 
//对于下面两句代码是否编译出错,以及打印结果是多少
        float a = 12345678.90123456789f;
        double b=0.12345678901234567890;
        float c=0.12345678901234567890f;
     
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);

    }

ps : 各位兄嘚都是大孩子了,各位都把自己的结果记在个小本本上再看下面的分析答案~

分析:3.10是浮点型,浮点型字面值默认当做double类型来处理,直接编译通过;如果是float类型则必须加 F或者f,若没加,直接编译不通过,会报错“损失精度”,至于解决方法也很简单, 第一种方式:强制类型转换float f1=(float)3.10; 第二种方式:没有类型转换直接加F或者f如 folat f2=3.10f ;对于abc的打印结果a = 1.2345679E7b = 0.12345678901234568c = 0.12345679

如果还不懂java浮点类型float以及double,可以参考这篇文章

什么是浮点型?什么是单精度浮点数(float)以及双精度浮点数(double)?

题八

分析下列程序代码,猜想下输出结果。

 public static void main(String[] args) { 
	 int a = 1; int b = 2; 
	 System.out.println(a); 
	 System.out.println(b); 
	 change(a, b); 
	 System.out.println(a); 
	 System.out.println(b); 
	 }
	 public static void change(int a, int b) { 
	 a = a + b; b = b + a; 
 } 

分析下列程序代码,猜想下输出结果。

public static void main(String[] args) { 
	int[] arr = {1,3,5}; 
	System.out.println(arr[0]); 
	change(arr); 
	System.out.println(arr[0]); 
}
	
	public static void change(int[] arr) {
	arr[0] = 200; 
   }

这个题就不分析了,主要是考察数组的,答错的童靴可能对数组了解的不是特别清析,可以参考这篇文章 java数组定义、使用、以及数组内存分析详解

题九

运行结果是怎样的呢?

  public static void main(String[] args) {
       
        int i = 1, j = ++i;
        System.out.println(i);
        System.out.println(j);
    }

分析:估计各位会觉得i=1,j=2,噗哈哈,你还太单纯了,啥?你的答案是i=1,j=1?回家种田吧兄嘚我陪你。那么结果是什么呢?i=2,j=2,原因也很简单,i其实是个变量,j也是个变量,之前i值是1,之后j经历了++i,就这个经历的同时,i已经自增++了,所以也是2.

到这里,九个题错了一半以上的同学自觉点给楼主文章右上角点个赞,千万别灰心,就像侠岚风语咒里说的:只要心怀正义,侠岚无处不在!所以还要继续加油哇!向架构师道路冲鸭!!!

题十

这个题主要考察多态知识,涉及到向上转型和向下转型的概念,所以是比较偏难的!

package Polymorphic;
//爷爷类
class Ye {
    public String show(Sun obj) {
        return ("Ye and Sun");
    }

    public String show(Ye obj) {
        return ("Ye and Ye");
    }

}
//爸爸类
class Fu extends Ye {
    public String show(Fu obj) {
        return ("Fu and Fu");
    }

    public String show(Ye obj) {
        return ("Fu and Ye");
    }
}
//儿子类
class Zi extends Fu {

}
//孙子类
class Sun extends Fu {

}

public class PolymorphicTest {
    public static void main(String[] args) {
         Ye y = new Ye();
        Ye y2 = new Fu(); //向上
        Fu f = new Fu();
        Zi z = new Zi();
        Sun s = new Sun();


        System.out.println("第一题 " + y.show(f));
        System.out.println("第二题 " + y.show(z));
        System.out.println("第三题 " + y.show(s));
        System.out.println("第四题 " + y2.show(f));  //到这里挂了???
        System.out.println("第五题 " + y2.show(z));
        System.out.println("第六题 " + y2.show(s));
        System.out.println("第七题 " + f.show(f));
        System.out.println("第八题 " + f.show(z));
        System.out.println("第九题 " + f.show(s));
     
    }
}

运行结果

第一题 Ye and Ye
第二题 Ye and Ye
第三题 Ye and Sun
第四题 Fu and Ye
第五题 Fu and Ye
第六题 Ye and Sun
第七题 Fu and Fu
第八题 Fu and Fu
第九题 Ye and Sun

分析的话就涉及到太多知识点了,比如多态的金典向上向下转型,这都是必备的重点基础的基础,建议参考这篇文章【蓝色字体,点击进入】

【java基础之多态】理解多态的向上向下转型从“妈妈我想吃烤山药”讲起

到这里有木有全部正确的大哥大捏,如果有,我代表全体鸭蛋分的小白膜拜下大佬~

最后,已每题一分计算,你得多少分?勇敢说出来,尽管笑死楼主

如果本文对你有一点点帮助,那么请点个赞呗,谢谢~

最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

欢迎各位关注我的公众号,一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

在这里插入图片描述

posted @ 2019-12-02 08:19  宜春  阅读(2301)  评论(12编辑  收藏  举报