Java初级程序员面试题大全

一、基础和语法

 

1.      Java中的进制:

 

(在线阅读地址:http://www.4spaces.org/2014/12/07/job-audition-1.html

 

1)十进制 à 二进制

     例:100(10进制)  =  ?(2进制)

     解:  100  = 64 + 32 + 4

                = 2^6 + 2^5 +2^2

                  0100 0000

                  0010 0000

                  0000 0100

               ---------------------------

                  0110 0100

 

2) 二进制 à 十进制

     例: 101 1010(二进制)  = ?(十进制)

     解:    101 1010 = 2^6 + 2^4 + 2^3 + 2 = 90

 

3) 十进制(负数)  à  二进制

        规律: -n = ~n + 1      

 

例: -110 (10进制) = ?(2进制)

       110 =  64 + 32 + 8 + 4 + 2

         0100 0000

         0010 0000

         0000 1000

         0000 0100

         0000 0010

        ---------------------

         0110 1110

取反:1001 0001

+1  :1001 0010

因此,结果为1001 0010

 

4) 二进制(以 ”1” 开头的二进制数)  à  十进制

       规律:

以”1” 开头的二进制数化为十进制数的步骤:

先减一,然后对其求反,把得到的数化为十进制,最后给该数加负号。

 

例: 1000 0101(2进制)  = ?(10进制)

解:

减1:    1000 0100

取反:    0111 1011

化10进制:2^6 + 2^5 +2^4 + 2^3+2^1+1 = 123

加负号:     -123

 

5)十六进制:  引入16进制的目的:简化2进制

  0 12 3 4 5 6 7 8 9 A B C D E F

  例:

   41(16进制)  = ?(10进制)

=  4×16 + 1 = 65

 

   例:

0110 0010(2进制)  = ?(16进制)

0110 = 6

0010 = 2

0110 0010 = 62

   规律:四个数一组,化为16进制

 

2.Java中的数据类型:

 

(在线阅读地址:http://www.4spaces.org/2014/12/07/job-audition-2.html)

 

基本类型(8种):

整数类型: byte (二进制位数:8 bit,1个字节,表示范围:0x80-0x7f);

          short(二进制位数:16 bit,2个字节,表示范围:0x8000-0x7fff);

          int  (二进制位数:32 bit,4个字节,表示范围:0x8000 0000-0xfff ffff);

          long (二进制位数:64 bit,8个字节,表示范围:-2^63  - 2^63-1);

浮点类型: float(二进制位数:32 bit, 4个字节);

          double(二进制位数:64 bit,8个字节);

字符类型: char(二进制位数:16 bit,2个字节);

布尔类型: boolean (二进制位数:根据JVM情况而定)

 

3.什么是面向对象?

 

(在线阅读地址:http://www.4spaces.org/2014/12/07/job-audition-2.html

 

对象,即人们要进行研究的事物,对象具有状态和行为,用数据来描述对象的状态,用操作来描述对象的行为,对象实现了数据和操作的结合。面向对象,就是在解决问题时,将问题涉及到的事物分解成各个对象,分解的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题的步骤中的状态和行为。

 

4.面向对象和面向过程的区别?

 

(在线阅读地址:https://www.4spaces.org/2014/12/07/job-audition-2.html

 

面向过程,就是在解决问题时,分析出解决问题所需要的步骤,然后用函数来把这些步骤一步一步的实现,使用的时候一个一个的依次调用就可以了。

面向对象,就是在解决问题时,将问题涉及到的事物分解成各个对象,分解的目的不是为了完成一个步骤,而是为了描述一个事物在整个解决问题的步骤中的状态和行为。

 

5.面向对象的特征?

 

(在线阅读地址:https://www.4spaces.org/2014/12/07/job-audition-2.html

 

面向对象的主要特征有以下几个方面:

1)抽象:  抽象就是忽略一个问题中与当前目标无关的那些方面,以便更充分的注意与当前目标有关的部分,抽象不打算了解问题的全部,而是只选择其中的一个部分,抽象包括两个方面:过程抽象和数据抽象。

2)封装:就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。

3) 继承:对象的一个新类从现有类中派生,这个过程就是继承。新类继承了原始类的特性,新类称为原始类的子类,原始类称为新类的父类。子类可以从父类继承方法和变量,实现类的复用。

4)多态:多态是指允许不同类的对象对同一消息作出不同的响应。

 

6.类的初始化次序是怎么样的?

 

(在线阅读地址:http://www.iwwenbo.com/2014/12/07/job-audition-3.html

 

大家在去参加面试的时候,经常会遇到这样的考题:

给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果。这实际上是在考查我们对于继承情况下类的初始化顺序的了解。

我们大家都知道,在同一个类中,对于静态变量、静态初始化块、变量、初始化块、构造器,

它们的初始化顺序依次是:

(静态变量、静态初始化块)>(变量、初始化块)>构造器。

下面通过一段代码来验证一下:

package audition;

 

/**

 * 类的初始化顺序问题:

 *

 *@author wwenbo

 *

 */

public class ClassIntialOrder {

 

         //1.定义变量

         publicString field = "变量";

 

         //2.定义静态变量

         publicstatic String staticField = "静态变量";

 

         //3.构造器

         publicClassIntialOrder() {

                   System.out.println("构造器");

         }

 

         //4.初始化块

         {

                   System.out.println("初始化块");

                   System.out.println(field);

         }

         //5.定义静态初始化块

         static{

                   System.out.println("静态初始化块");

                   System.out.println(staticField);

         }

 

         publicstatic void main(String[] args) {

                   newClassIntialOrder();

         }

}

 

上面的程序的打印结果如下:

静态初始化块

静态变量

初始化块

变量

构造器

 

 

那么,在继承当中的类的初始化次序又是怎样的呢? 再通过一段代码来看一下:

package audition;

 

public class SubClass extends ParClass {

 

         //1.变量

         publicString s_Field = "子类--变量";

         //2.静态变量

         publicstatic String s_StaticField = "子类--静态变量";

 

         //3.构造器

         publicSubClass() {

                   System.out.println("子类--构造器");

         }

 

         //4.初始化块

         {

                   System.out.println(s_Field);

                   System.out.println("子类--初始化块");

         }

         //5.静态初始化块

         static{

                   System.out.println(s_StaticField);

                   System.out.println("子类--静态初始化块");

         }

 

         publicstatic void main(String[] args) {

                   newSubClass();

         }

}

 

class ParClass {

 

         //1.变量

         publicString p_Field = "父类--变量";

         //2.静态变量

         publicstatic String p_StaticField = "父类--静态变量";

 

         //3.构造器

         publicParClass() {

                   System.out.println("父类--构造器");

         }

 

         //4.初始化块

         {

                   System.out.println(p_Field);

                   System.out.println("父类--初始化块");

         }

         //5.静态初始化块

         static{

                   System.out.println(p_StaticField);

                   System.out.println("父类--静态初始化块");

         }

 

}

 

 

打印结果如下:

父类--静态变量

父类--静态初始化块

子类--静态变量

子类--静态初始化块

父类--变量

父类--初始化块

父类--构造器

子类--变量

子类--初始化块

子类--构造器

 

大家可能会注意到一点,那就是,并不是父类完全初始化完毕后才进行子类的初始化,实际上子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。另外,静态变量和静态初始化块的初始化次序,是按照定义的先后顺序进行的,变量和初始化块也是如此。大家可以调换静态变量和静态初始化块的次序来看一下。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值