zoukankan      html  css  js  c++  java
  • 面试题复习记录(二)

       今天终于又有了一晚上的时间可以写博客了,那就把前两天剩下的的东西学习完吧!要不然整天惦记着,真心难受啊。
    这是既面试题复习记录(一)的学习记录。【此表文章 是在学习了传智播客的 董鹏老师的 Java程序员之从菜鸟到职场高手的必看之面试题学习而来(http://bbs.itcast.cn/thread-20484-1-1.html
     
    *** 面试题六:short s1 = 1;  s1 = s1 + 1;有什么错? 

                                  short s1 = 1;  s1 += 1;有什么错?

            刚看到这个题时,根本不知道有什么错,一点思路都没有,的确很菜!就只能老老实实的去看老师的讲解了:
                对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型(byte,short,char 这三种类型在参与运算时,会自动转换成int类型),所以最后的结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误(因为int类型转换成short类型可能会损失精度,计算机只要认为可能出错,这哥们就会提示给我们,它还是比较尽职的)。


              对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,也就是类型自动提升,因此可以正确编译。

             对于这个问题,自己真心是不知道,而且看了也不知道怎么理解,那就发挥学习英语的方法吧:死记硬背!0.0
     面试题七: char型变量中能不能存贮一个中文汉字?为什么?
                     char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
                  对于这个问题,我们首先要知道unicode编码:unicode码是扩展自ASCII,unicode只有一个字符集,中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分 Unicode目前普遍采用的是UCS-2,它用两个字节来编码一个字符,UCS-2用两个字节来编码字符,两个字节就是16位二进制, 2的16次方等于65536,所以UCS-2最多能编码65536个字符。对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的, 简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万 多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字 也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用 4个字节来编码字符(摘自百度百科 http://baike.baidu.com/link?url=zq98_pkKXsGRb8-zm-oMOdPielp3vF_MyFMegT6Ahv3XyzdHlmATXDC1ADk07LGXLb5MUNOgvH03YDASm52L_q
     
    ***面试题七:使用final关键字修饰一个变量时,是引用变量不能变,还是引用的对象的内容不能变?
                先解释下, 什么是引用变量不能变?什么是对象的内容不能变?例如下面的代码:
    final  StringBuffer  sb = new StringBuffer("Hello");
          sb = new StingBuffer("World");//这就是引用改变.sb指向了新的引用.
          sb.append("Itcast");//此时sb中的内容为 "HelloItcast",这就是对象改变了.
          那么在上面的代码中, 到底哪个是对的呢?
          sb.append("Itcast"); 这句代码是对的,可以编译通过. 而
           sb = new StingBuffer("World"); 这句代码会编译报错.
    /*
      错误: 无法为最终变量sb分配值
      sb = new StringBuffer("World");
    */
          所以说,被final关键字修饰的变量,是引用变量不能变,但是引用变量的对象中的内容是可以改变的.
        final  StringBuffer  sb = new StringBuffer("Hello");
                这句代码中的 new StringBuffer("Hello");  申请一个存储空间,里面放的是:hello
                然后 用一个定义为StringBuffer的sb来指向这个空间 前面的final 是程序知道 sb指向的这个空间是不能改变的,
             当new StingBuffer("World") 时又申请了一个新的空间,这是已经定义为final的sb是不能重新指向这个空间的。
    但是我们可以改变sb中存放的内容,当然我们要找到合适的方法, sb.append("Itcast") 这句代码就是向sb指向的空间追加一个存储内容。
    好吧,我想我只是用我自己的话又来描述了一遍老师讲的,不过,就权当记录吧!只要给自己的思维中加入一个这样的意识就算是收获吧。
     
    *** 面试题八:静态变量和实例变量的区别?在java语法中,静态变量前要加static关键字,而实例变量前则不加。这一点大家先要搞清楚,那么加了static后,到底二者有什么区别呢?
            首先,写出我当初学习java时对这个问题的记忆:
                                                                    1在java语法中,静态变量前要加static关键字,而实例变量前则不加;
                                                                    2,静态变量可以被所有的方法访问,无论他是不是静态的方法,所以静态变量又称类变量;
                                                                    3,实例变量不能被静态方法访问,只能被非静态方法访问;
         这些就是能想到的,其实当时觉得已经记住了,可是突然看到这个问题,还是想了好久,特别有一点我混乱了:静态变量不能被子类访问?
    这个让我纠结了一下,不过想了想前几天复习(面试题复习一http://www.cnblogs.com/wxb0328/p/wxb.html)的继承中没有说静态变量不能被子类访问这个点,我就知道我混乱了。
            好了,不扯了 ,看看老师的讲解:
            在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
    静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
    总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
            我觉得我们要记住的是:1.实例变量属于某个对象的属性;2.静态变量不属于某个实例对象,而是属于类,所以也称为类变量;3.实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
     
    *** 面试题九:是否可以从一个static方法内部发出对非static方法的调用?
          对于这个问题,我感觉是不可以,因为总是感觉:一个static方法中发出一个非static方法调用,怪怪的!
     
    答案: 不可以调用,因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用.
    static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部可以发出对非static方法的调用。
    嗯 简洁明了!
    *** 面试题十:Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
         对于Math中的几个方法 ceil、floor、round
    我们先看看这几个单词的意思:
    ceil        
     
    floor    
     
    round    
     有了这几个红线的意思,我们应该能猜到了,
    ceil是向上取:
    返回大于等于其数字参数的最小整数。
    floor是向下取:返回小于等于其数值参数的最大整数。
    round是取它周围的最接近他的:返回与给出的(数值表达式)最接近的整数(如果 number 的小数部分大于等于 0.5,返回值是大于 number 的最小整数。否则,round 返回小于等于 number 的最大整数。也就是我们学过的“四舍五入”)。
    Math.round(11.5)=12
    Math.round(-11.5)=-11,        注意:小数部分的是0.5  看上面的定义,返回大于-11.5的最小整数:大于-11.5 是-11吧!
    *** 面试题十一:请说出作用域public,private,protected,以及不写时的区别?
    说明:如果在修饰的元素上面没有写任何访问修饰符,则表示 默认不写。
                     这四个作用域的可见范围如下表所示。
     
      作用域     当前类   同一package   子孙类       其他package
           public             √             √                √             √ 
      protected       √             √               √              × 
      默认不写         √             √               ×              × 
      private           √             ×               ×              ×
     
     
     
     
     
    至此,此基础面试题学习完毕,仅仅是想整理一下自己学过的东西,便于以后查阅、回忆。
    如有错误,欢迎批评指正,
     
     
     
     
    A dwarf on a giant's shoulder sees the farther of the two. 站在巨人肩上的矮子看得比巨人远。 --A dwarf on a giant's shoulders
  • 相关阅读:
    第一次博客作业
    第一次软工作业
    第一次博客作业
    MySQL查看当前用户
    JSP官方文档(JavaServer Pages Specification)下载
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
    第一次个人编程作业
    第一次博客作业
  • 原文地址:https://www.cnblogs.com/wxb0328/p/3411565.html
Copyright © 2011-2022 走看看