收集java基础面试题&答案

1、String是最基本的数据类型吗? 答:String不是基本数据类型,基本数据类型包括byte、int、char、long、float、double、boolean和short。 Java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。

 

2、switch语句中的表达式可以是什么类型数据? 答:表达式的值可以是byte、short、int和char类型的数据,但不能是float和double类型的数据。

 

3、插入数据时,ArrayList、LinkedList、Vector谁速度较快? 答:ArrayList、Vector以数组方式存储数据,插入数据时要进行元素移动操作,因而插入数据慢。LinkedList是一种链表结构,在插入数据时只需要修改链表的前后项指向即可,因此插入速度较快。

4、说出一些常用的类,包,接口,请各举5个。 答:常用的类:BufferedReader,BufferedWriter,FileReader,FileWirter和String等。 常用的包:Java.lang ,Java.awt,Java.io,Java.util和Java.sql等。 常用的接口:Remote,List,Map,Document和NodeList等。

 

5、作用域public,private,protected,以及不写时的区别。 答:具体区别如下:

作用域同一类同一包子孙类所有类
public
protected ×
private × × ×
默认 × ×

6、说出重写和重载的区别,重写方法是否可以改变返回值的类型? 答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写。子类的对象使用 这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。 重载的方法是可以改变返回值的类型。

 

7、throw和throws有什么区别? 答:throw关键字一般用于方法内部,用于抛出一个异常类对象,一旦异常被抛出后,throw语句后的程序代码将不会被执行。 throws关键字通常出现在方法声明中,用来指定该方法可能抛出的异常。如果可能有多个异常抛出,可以使用逗号将它们分隔开。

8、字符串的compareTo方法结果是什么? 答:使用compareTo()方法可以比较字符串与字符串之间的大小关系。如果当前字符串小于指定字符串,则返回一个小于0的数值;否则返回一个大于0的数值;如果两个字符串相等,则返回0。

 

9、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递,因为在Java编程语言中只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

10、Java中实现多态的机制是什么? 答:方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。

 

11、在比较对象时,“==”运算符和equals运算有何区别? 答:“==”运算符表示两个对象引用的地址是否相等,equals运算符则表示两个对象引用的内容是否相等。

 

12、Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 答:字节流和字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在Java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

13、String s=new String("a");共创建了几个String对象? 答:两个。其中包括一个字符对象和一个字符对象引用对象。

14、Java 面向对象编程三大特性?

  封装 继承 多态

封装

  封装就是把抽象的数据和对数据进行的操作封装在一起,数据被保存在内部,程序的其他部分只有通过被授权的操作(成员方法)才能对数据进行操作。

  java提供了四种控制修饰符控制方法和变量访问的权限:

  • public:对外公开

  • protected:对子类和同一包中的类公开

  • 没有修饰符号:向同一个包的类公开

  • private:只有类本身可以访问,不对外公开

继承:(extends )

  继承是使用已存在的类的定义作为基础建立新类的技术。继承可以解决代码复用问题,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extend语句来声明继承父类。

关于继承如下 3 点请记住:

  • 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。

  • 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。

  • 子类可以用自己的方式实现父类的方法。

多态

所谓多态,就是指一个引用(类型)在不同情况下的多种状态,你也可以这样理解:父类型的引用指向子类型的对象

多态有两个好处:

  1. 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。继承

  2. 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。 多态的真正作用,

15、String、StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?(重要)

一、区别

1、String是字符串常量,而StringBuffer和StringBuilder是字符串变量。由String创建的字符内容是不可改变的,而由StringBuffer和StringBuidler创建的字符内容是可以改变的。

2、StringBuffer是线程安全的,而StringBuilder是非线程安全的。StringBuilder是从JDK 5开始,为StringBuffer类补充的一个单线程的等价类。我们在使用时应优先考虑使用StringBuilder,因为它支持StringBuffer的所有操作,但是因为它不执行同步,不会有线程安全带来额外的系统消耗,所以速度更快。

 

16、String为什么是不可变的?

String 类中使用 final 关键字修饰字符数组来保存字符串private final char value[],所以 String 对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder 中也是使用字符数组保存字符串char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。

 

17、自动装箱与拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;

  • 拆箱:将包装类型转换为基本数据类型;

//自动装箱
Integer total = 99; //系统自动执行了Integer total = Integer.valueOf(99);

//自定拆箱
int totalprim = total;  //系统自动执行了int totalprim = total.intValue();

问题一:int和Integer的区别?

  1. int是基本数据类型,Integer是int的包装类就是将int类型包装成Object对象;

  1. Integer变量必须实例化后才能使用;int变量不需要;

  1. Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;

  1. Integer的默认值是null;int的默认值是0。

  2.  

18、== 与 equals的区别?(重要)

  1)==比较的是值是否相等

 如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

    如果作用于引用类型的变量,则比较的是所指向的对象的地址。

  2)equals方法不能作用于基本数据类型的变量,只能用于类变量。(对于基本数据类型要用其包装类)** **

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容

 

posted @ 2020-07-15 18:42  郭宗鑫  阅读(132)  评论(0编辑  收藏  举报