面试题-----Java基础

一:说说&和&&的区别

  &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false,则结果为 false。

  &&还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表达式,例如,对于 if(str != null && !str.equals(“”))表达式,当 str 为 null 时,后面的表达式不会执行,所以不会出现 NullPointerException 如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>>0) y会增长,If(x==33 && ++y>0)不会增长&还可以用作位运算符,当&操作符两边的表达式不是 boolean类型时,&表示按位与操作,我们通常使用 0x0f 来与一个整数进行&运算,来获取该整数的最低 4 个 bit 位。

 

二、char 型变量中能不能存贮一个中文汉字?为什么?  

  char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字,所以,char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char 类型的变量也是占用两个字节。

 

三:"=="和 equals 方法究竟有什么区别

  ==可以直接用于基本数据类型的判断,也可以用于引用数据类型的判断(判断的是地址)。是用于 判断基本数据类型的值和引用数据类型的地址是否相等。

  equals方法是用于比较两个独立对象的内容是否相同,如:

    String a =new String("11");

    String b =new String("11");

  这两个语句创建了两个对象,然后用a,b两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,若a==b,返回false。但是两个对象中的内容是相同的,故a.equals(b)将返回true。

 

四:是否可以从一个 static 方法内部发出对非 static方法的调用 

  不可以。因为非static方法与对象关联,必须创建一个对象后,才可以在该对象上进行方法调用。而static方法调用时不需要创建对象,可以直接调用。即当一个static方法被调用时,可能还没有创建任何实例对象,非static方法无法关联到对象上。

 

五:Integer与int的区别

  int是Java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是Java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int无法表达出未赋值的情况。在JSP开发时,Integer的默认值为null,所以el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0。所以int不适合作为web层的表单数据的类型。

  Integer提供了多个与整数相关的操作方法,如:将一个字符串转换成整数,Integer中还定义了表示整数的最大值和最小值的常量。

 

六:String是最基本的数据类型吗?

  基本数据类型包括byte、int、char、long、float、double、boolean和 short。

  java.lang.String类是final类型的,因此不能继承这个类、不能修改这个类。为了提高效率节省空间,应使用StringBuffer类。

 

七:是否可以继承String类?

  java.lang.String类是final类型的,因此不能继承这个类、不能修改这个类。

 

八:final、finally、finalize的区别

  final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。

  finally是异常处理语句结构的一部分,表示总是执行。

  finalize是在java.lang.Object里定义的,即每个对象都有这个方法。这个方法在gc启动,该对象被回收的时候被调用。gc可以回收大部分的对象(new创建出来的方法gc都能回收,一般使用new来创建对象),所以一般不实现finalize。

  子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 

 

九:sleep()和wait()有什么区别?

  sleep 睡眠 ,在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)

是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时会自动恢复。调用sleep不会释放对象锁。

  wait等待  在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池。

 

十:启动一个线程是用run()还是start()?

  启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码。

  run()只是用于定义要执行的任务,start()是用于创建并开 启一个线程。

 

十一:List和Map区别?

  一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合,List中存储的数据是有顺序,并且允许重复;Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。

 

十二:List, Set, Map 是否继承自 Collection 接口?

  List,set继承,Map不继承。

  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。

  Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。

posted @ 2018-12-07 19:42  樊樊Filan  阅读(198)  评论(0编辑  收藏  举报