Java面试笔记(上)

Java面试笔记

Java核心技术部分

Java核心技术部分的面试题,可能覆盖Java基本语法,面向对象(包括类定义、方法、构造器、递继抽象类、接口、枚举以及final、static等关键字)、Java常用API、Java集合框架(重点掌握)、注解(Annotation)、泛型、输入/输出、多线程、网络通信、反射、内存管理等相关内容。

1、面向对象的特征有哪些?

面向对象的三大特征:

继承:通过继承允许复用已有的类,继承关系是一种“一般到特殊”的关系,比如苹果类继承水果类,这个过程称为类继承

派生出来的新类称为原有类的子类(派生类),而原有类称为新类的父类(基类)。

子类可以从父类那里继承得到方法和成员变量,而且子类可以修改或增加新的方法使之适合子类得需要。

封装:封装是把对象的状态数据隐藏起来,再通过暴露合适得方法来允许外部程序修改对象的状态数据。Java得封装主要通过private、protected、public等访问控制符来实现。

多态:多态指的是当同一个类型得引用类型得变量在执行相同得方法时,实际上会呈现出多种不同得行为特征。比如程序有 Animal al=new Animal();Animal a2=new Wolf();虽然a1、a2两个引用变量得类型都是Animal,但当他们调用同一个run()方法时,如果Wolf()类重写过Animal得run()方法,这就会导致a1、a2两个变量执行run()方法时呈现出不同得行为特征,这就是多态。多态增加了编程得灵活性,实际上大量设计模式都是基于多态类实现的

除此之外,抽象也是一个重要得特征,抽象就是忽略与当前目标无关的相关方面,以便更充分的突出与当前目标有关的方面。抽象并不打算了解全部问题,而知识选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.Java中实现多态的机制是什么?

Java允许父类或接口定义的引用变量指向子类或具体实现类的实例对象,而程序调用的方法在运行时才会被动态锁定,就是引用变量所执行的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

正是由于这种机制,两个相同类型的引用变量,但由于它们实际引用了不用的对象,因此他们运行时可能呈现出多种不同的行为特征,这就被称为多态。

3.一个“Java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以有多个类,但只能有一个public的类,并且public的类名必须与文件的主文件名相同。

包含多个类的Java源文件编译之后会生成多个.class文件,每个类(包括外部类、内部类)都会生成一个对应的.class文件。

4.String是基本数据类型吗?

基本数据类型包括byte、short、int、long、char、float、double和boolean。String不是基本类型。String是引用类型。

java.lang.String类是final的,因此无法通过String类派生子类。

String也是一个不可变的类(它所包含的字符序列是不可改变得),因此程序需要使用的字符串所包含的字符串序列需要经常海边,建议使用StringBuffer(线程安全、性能略差)类或StringBuilder类。

5.int和Integer有什么区别

Java提供两种不同的类型:引用类型和基本数据类型。

int是基本数据类型,Integer是Java为int提供的包装类。

Java为所有的基本类型都提供了对应的包装类。

byte    Byte
short   Short
int     Integer
long    Long
char    Character
float   Float
double  Double
boolean Boolean

基本类型的变量只能当成简单的直接量、参与表达式运算,不具备面向对象的特征,基本类型的变量不能赋为null;但包装类的变量则完全可以当成对象使用,它具有面向对象的特征,包装类的变量可以被赋为null。

因为Integer具有面向对象的特征,因此Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为null,所以用EL输出为null的Integer时,将会显示为空白字符串,而int默认的默认值为0,用EL输出为将显示0.所以,int不适合作为web层的表单数据的类型。

从Java5开始,Java提供了自动装箱,自动拆箱的功能,因此包装类也可以直接参与表达式运算,因此使用起来十分方便。

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

6.Java有没有goto?

goto是Java中的保留字,Java程序的标识符不允许使用goto。但Java也不支持使用goto进行跳转。

7.String和StringBuffer、StringBuilder的区别

Java提供了:String、StringBuilder和StringBuffer,它们都是charSequence的实现类,都可以作为字符串使用。

String代表了字符序列不可变的字符串:而StringBuffer、StringBuilder都代表了字符序列可变的字符串。

StringBuffer、StringBuilder的区别是StringBuffer是线程安全的、性能略低,而StringBuilder是线程不安全的,适合单线程环境使用,性能较好。

8.Collection和Collections的区别?

Collection是集合类(List、Set、Queue)的根接口。

Collections是针对集合类的一个工具类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

9.说说&和&&的区别?

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

&&还具有短路功能,如果第一个表达式为false,则不再计算第二个表达式。例如,对于if(a>8&&b>5),当a小于等于8时,由于&&之前的表达式已经为false了,因此&&之后的表达式根本不会执行;

再例如if (x>8 & ++y)与if(x>8&&++y),当a小于等于8时,前一个表达式中y的值会增长;后一个表达式中y的值不会增加。

除此之外,&还可以用作位运算符,当&操作两边的表达式不是boolean类型时,&表示按位与操作,通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31&0x0f的结果为0x01

10.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload是方法的重载

Override是方法的重写,也叫做覆盖

Overload要求两个方法具有方法名相同,形参列表不同的要求,返回值类型不能作为重载条件

Override要求子类方法与父类方法具有”两同两小一大"的要求。两同指:即父类方法、子类方法的方法名相同、形参列表相同;两小指:子类方法返回值类型要么是父类方法返回值类型的子类,要么与父类方法返回值类型相同;子类方法声明抛出的异常类型要么是父类方法声明抛出的异常类型的子类,要么与父类声明抛出的异常类型相同;一大指:子类方法的访问权限要么与父类方法的访问权限相同,要么比父类方法的访问权限风大。

Overloader的方法是可以改变返回值的类型。

11.Java如何跳出多重嵌套的循环?

再Java中,要想跳出多重循环,可以在外面的循环语句前面定义一个标点符号,然后在里层的循环体的代码中使用带标号的break语句,即可跳出外层循环。例如:

outer:
for(int i=0;i<10;i++){
    for(int j=0;j<1-;j++){
        System.out.println("i="+i+"j="+j);
        if(j==5)break outer;
    }
}

12.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

在Java7以前,在switch(exprl)中,experl只能是一个整数表达式(但不包括long和Long)或者枚举常量,整数表达式可以是int 基本类型或者Integer包装类型,byte、short、char都可以自动转换为int,他们都可作为switch表达式。

从Java7开始,switch表达式可以使用String。

13.String s=new String(“xyz”);创建几个String Object?

两个。一个是直接两的“xyz”字符串对象,该字符转将会被缓存在字符串常量池中,以便以后复用这个字符串;另一个是通过new String()构造器创建出来的String对象,这个String对象保存在堆内存中

通常来说,应该尽量使用直接量的String对象,这样具有更好的性能。

14.数组有没有length()方法?String有没有length()这个方法?

数组没有length()这个方法,有length属性。String有length()方法。

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

对于short s1=1;s1=s1+1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换的类型的错误。

对于short s1=1;s1+=1;由于+=运算符里已经包括了一个隐式的强制类型转换,因此Java会把s1+=1计算后的结果进行隐式的强制类型转换,因此它不会有任何错误。
最后送大家几张学习Java的思维导图:
1
2

2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值