0
点赞
收藏
分享

微信扫一扫

JAVA最全面试题汇总基础篇(一)


1 Java 语言有哪些特点



1 、简单易学、有丰富的类库



2 、面向对象( Java 最重要的特性,让程序耦合度更低,内聚性更高)



3 、与平台无关性( JVM 是 Java 跨平台使用的根本)



4 、可靠安全



5 、支持多线程




2 、面向对象和面向过程的区别




面向过程 :是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一



一调用则可。性能较高,所以单片机、嵌入式开发等一般采用面向过程开发



面向对象 :是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,



而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象有 封装、继承、多态 的特



性,所以易维护、易复用、易扩展。可以设计出低耦合的系统。但是性能上来说,比面向过程要



低。




3 、八种基本数据类型的大小,以及他们的封装类





JAVA最全面试题汇总基础篇(一)_jvm


注:


1.int 是基本数据类型, Integer 是 int 的封装类,是引用类型。 int 默认值是 0 ,而 Integer 默认值


是 null ,所以 Integer 能区分出 0 和 null 的情况。一旦 java 看到 null ,就知道这个引用还没有指向某个


对象,再任何引用使用前,必须为其指定一个对象,否则会报错。


2. 基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,


必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另


一个数组时只是复制了一个引用,所以通过某一个数组所做的修改在另一个数组中也看的见。


虽然定义了 boolean 这种数据类型,但是只对它提供了非常有限的支持。在 Java 虚拟机中没有


任何供 boolean 值专用的字节码指令, Java 语言表达式所操作的 boolean 值,在编译之后都使用 Java


虚拟机中的 int 数据类型来代替,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,每个元素


boolean 元素占 8 位。这样我们可以得出 boolean 类型占了单独使用是 4 个字节,在数组中又是 1 个字


节。使用 int 的原因是,对于当下 32 位的处理器( CPU )来说,一次处理数据是 32 位(这里不是指的


是 32/64 位系统,而是指 CPU 硬件层面),具有高效存取的特点。


4 、标识符的命名规则。


标识符的含义: 是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等


等,都是标识符。


命名规则:(硬性要求) 标识符可以包含英文字母, 0-9 的数字, $ 以及 _ 标识符不能以数字开头标


识符不是关键字


命名规范:(非硬性要求) 类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。变量


名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。方法名规范:同变量名。


5 instanceof 关键字的作用


instanceof 严格来说是 Java 中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法


为:


boolean result = obj instanceof Class


其中 obj 为一个对象, Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接


或间接子类,或者是其接口的实现类,结果 result 都返回 true ,否则返回 false 。


注意:编译器会检查 obj 是否能转换成右边的 class 类型,如果不能转换则直接报错,如果不能


确定类型,则通过编译,具体看运行时定。


int i = 0 ;


System . out . println ( i instanceof Integer ); // 编译不通过 i 必须是引用类型,不能是基本类型


System . out . println ( i instanceof Object ); // 编译不通过


Integer integer = new Integer ( 1 );


System . out . println ( integer instanceof     Integer ); //true


//false , 在 JavaSE 规范中对 instanceof 运算符的规定就是:如果 obj 为 null ,那么将返


回 false 。


System . out . println ( null instanceof Object );


6 Java 自动装箱与拆箱


装箱就是自动将基本数据类型转换为包装器类型( int-->Integer );调用方法: Integer


valueOf(int) 方法


拆箱就是自动将包装器类型转换为基本数据类型( Integer-->int )。调用方法: Integer


intValue 方法


在 Java SE5 之前,如果要生成一个数值为 10 的 Integer 对象,必须这样进行:


Integer i = new Integer ( 10 );


而在从 Java SE5 开始就提供了自动装箱的特性,如果要生成一个数值为 10 的 Integer 对象,只需要


这样就可以了:


Integer i = 10;


面试题 1 :以下代码会输出什么?


publicclass Main {


publicstatic void main ( String [] args ) {


    

       Integer i1 = 100 ;


       Integer i2 = 100 ;


       Integer i3 = 200 ;


       Integer i4 = 200 ;


      System . out . println ( i1 == i2 );


      System . out . println ( i3 == i4 );


      }


 }


运行结果:


true


false


为什么会出现这样的结果?输出结果表明 i1 和 i2 指向的是同一个对象,而 i3 和 i4 指向的是不同的对


象。此时只需一看源码便知究竟,下面这段代码是 Integer 的 valueOf 方法的具体实现:


public static Integer valueOf(int i) {


if(i >= -128 && i <= IntegerCache.high)


return IntegerCache.cache[i + 128];


else


return new Integer(i);


}


其中 IntegerCache 类的实现为:


privatestaticclass IntegerCache {


  staticfinal int high ;


  staticfinal Integer cache [];


static {

    finalintlow=-128;


// high value may be configured by property


int h = 127 ;


if ( integerCacheHighPropValue != null ) {


// Use Long.decode here to avoid invoking methods that


// require Integer's autoboxing cache to be initialized


int i = Long . decode ( integerCacheHighPropValue ). intValue ();


i = Math . max ( i , 127 );


// Maximum array size is Integer.MAX_VALUE


h = Math . min ( i , Integer . MAX_VALUE -- low );


}


high = h ;


cache = new Integer [( high - low ) + 1 ];


int j = low ;


for ( int k = 0 ; k < cache . length ; k ++ )


cache [ k ] = new Integer ( j ++ );


}


private IntegerCache () {}


}


从这 2 段代码可以看出,在通过 valueOf 方法创建 Integer 对象的时候,如果数值在 [-128,127] 之间,


便返回指向 IntegerCache.cache 中已经存在的对象的引用;否则创建一个新的 Integer 对象。


上面的代码中 i1 和 i2 的数值为 100 ,因此会直接从 cache 中取已经存在的对象,所以 i1 和 i2 指向的是


同一个对象,而 i3 和 i4 则是分别指向不同的对象。


面试题 2 :以下代码输出什么


publicclass Main {


publicstatic void main ( String [] args ) {


Double i1 = 100.0 ;


Double i2 = 100.0 ;


Double i3 = 200.0 ;


Double i4 = 200.0 ;


System . out . println ( i1 == i2 );


System . out . println ( i3 == i4 );


}


}


运行结果:


false


false


原因:在某个范围内的整型数值的个数是有限的,而浮点数却不是。

举报

相关推荐

0 条评论