java面试常见基础知识点(二)
2017-01-02 22:07
267 查看
21,this到底代表什么呢?
代表对象,就是所在函数所属对象的引用。 哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。如果在内部类里想要引用外部类,就是外部类类名.this来引用的
22,static是什么?有什么特点?
关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)
特点:
1)想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰。
2)被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式
3)静态随着类的加载而加载。而且优先于对象存在。
23,成员变量和静态变量的区别?(14的补充)
1)成员变量属于对象,所以也称为实例变量。静态变量所属于类,所以也称为类变量。
2)成员变量存在于堆内存中,静态变量存在于方法区中。
3)成员变量随着对象创建而创建而存在,随着对象被回收而消失;静态变量随着类的加载而存在,随着类的消失而消失。
4)成员变量只能被对象所调用,静态变量可以被对象调用,也可以被类名调用。
24,请说出作用于public,private,protected,以及不写的区别?
public:所有的
protected:当前的,同一个package,子类
friendly:当前的,同一个package
private:当前的
25,Override 和 Overload 的区别?
Override:重写,必须有继承关系,返回类型相同,返回值相同,函数名相同,修饰符要比父类大,异常要比父类小。
Overload:重载,参数个数、顺序、类型不同。
26,构造器Constructor是否可以被override?
构造器是不能被继承,因此不能override,但是能overload。
*27,接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的main方法?
1)接口可以继承接口
2)抽象类可以实现接口,但是依然不能被实例化
3)抽象类可以继承具体类
4)抽象类中可以包含main方法,且可以运行。
28,面向对象的特征有哪些方面?
封装:解决数据的安全性
继承:解决代码的重用性
多态:同一函数,多种形态,解决代码的拓展性
*29,super() 和 this() 是否可以同时出现在构造函数中?
不可以,两个语句只能有一个定义在第一行,所以只能出现其中一个。
30,final 有什么特点?
这是一个修饰符,可以修饰类、方法、变量。
修饰类:这个类是最终类,不能被继承。
修饰方法:这个方法不能被重写。
修饰变量:这个变量是常量,只能赋值一次。
31,抽象类有什么特点?
1)抽象方法只能被定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰。
2)抽象方法只定义方法声明,并不定义方法实现。
3)抽象类不能实例化。
4)只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
32,抽象类和接口的区别?
1)抽象类只能被继承,而且只能单继承。接口需要被实现,而且可以多实现。
2)抽象类可以定义非抽象方法,子类可以直接继承使用。接口只有抽象方法,需要子类去实现。
3)抽象类的成员修饰符可以自定义,接口中的修饰符只能用public。
*33,什么是多态?多态的好处?多态的坏处?多态的前提?
多态:同一函数多种形态
多态的好处:提高了程序的扩展性
多态的坏处:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。
多态的前提:1)必须要有继承或者实现关系。 2)通常会有覆盖操作
34,String是最基本的数据类型吗?
不是,String是引用类型。java.lang.String是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率
节省空间,我们应该用StringBuffer,是线程安全的。
35,string s = "Hello"; s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有。因为String被设计成不可变的类,所以它的所有对象都是不可变对象。上面的代码只是先后创建了两个String
对象,并改变s这个引用变量的指向
36,数组有没有length()这个方法?String有没有length()这个方法?
数组没有length()方法,有length的属性。String有length()这个方法。
37,下面这条语句一共创建了多少个对象:String = "a" + "b" + "c" + "d"; ?
一个对象。 javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉
其中加号,直接将其编译成一个这些常量相加的结果。
38 ,final,finally,finalize的区别?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时
的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。
*39,编译时被检查的异常和运行时异常的区别?
1)编译时被检查的异常在函数内被抛出,函数必须要声明,否则编译失败。
声明的原因:是需要调用者对该异常进行处理。
2)运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不用调用处理的,直接让程序停止,由调用者对代码进行修正。
40,Error和Exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。
比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由
Java虚拟机抛出的。
Exception表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起
的问题或者外在的输入引起的一般性问题,是程序必须处理的。
代表对象,就是所在函数所属对象的引用。 哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。如果在内部类里想要引用外部类,就是外部类类名.this来引用的
22,static是什么?有什么特点?
关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)
特点:
1)想要实现对象中的共性数据的对象共享,可以将这个数据进行静态修饰。
2)被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式
3)静态随着类的加载而加载。而且优先于对象存在。
23,成员变量和静态变量的区别?(14的补充)
1)成员变量属于对象,所以也称为实例变量。静态变量所属于类,所以也称为类变量。
2)成员变量存在于堆内存中,静态变量存在于方法区中。
3)成员变量随着对象创建而创建而存在,随着对象被回收而消失;静态变量随着类的加载而存在,随着类的消失而消失。
4)成员变量只能被对象所调用,静态变量可以被对象调用,也可以被类名调用。
24,请说出作用于public,private,protected,以及不写的区别?
public:所有的
protected:当前的,同一个package,子类
friendly:当前的,同一个package
private:当前的
25,Override 和 Overload 的区别?
Override:重写,必须有继承关系,返回类型相同,返回值相同,函数名相同,修饰符要比父类大,异常要比父类小。
Overload:重载,参数个数、顺序、类型不同。
26,构造器Constructor是否可以被override?
构造器是不能被继承,因此不能override,但是能overload。
*27,接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承具体类?抽象类中是否可以有静态的main方法?
1)接口可以继承接口
2)抽象类可以实现接口,但是依然不能被实例化
3)抽象类可以继承具体类
4)抽象类中可以包含main方法,且可以运行。
28,面向对象的特征有哪些方面?
封装:解决数据的安全性
继承:解决代码的重用性
多态:同一函数,多种形态,解决代码的拓展性
*29,super() 和 this() 是否可以同时出现在构造函数中?
不可以,两个语句只能有一个定义在第一行,所以只能出现其中一个。
30,final 有什么特点?
这是一个修饰符,可以修饰类、方法、变量。
修饰类:这个类是最终类,不能被继承。
修饰方法:这个方法不能被重写。
修饰变量:这个变量是常量,只能赋值一次。
31,抽象类有什么特点?
1)抽象方法只能被定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰。
2)抽象方法只定义方法声明,并不定义方法实现。
3)抽象类不能实例化。
4)只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。
32,抽象类和接口的区别?
1)抽象类只能被继承,而且只能单继承。接口需要被实现,而且可以多实现。
2)抽象类可以定义非抽象方法,子类可以直接继承使用。接口只有抽象方法,需要子类去实现。
3)抽象类的成员修饰符可以自定义,接口中的修饰符只能用public。
*33,什么是多态?多态的好处?多态的坏处?多态的前提?
多态:同一函数多种形态
多态的好处:提高了程序的扩展性
多态的坏处:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。
多态的前提:1)必须要有继承或者实现关系。 2)通常会有覆盖操作
34,String是最基本的数据类型吗?
不是,String是引用类型。java.lang.String是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率
节省空间,我们应该用StringBuffer,是线程安全的。
35,string s = "Hello"; s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有。因为String被设计成不可变的类,所以它的所有对象都是不可变对象。上面的代码只是先后创建了两个String
对象,并改变s这个引用变量的指向
36,数组有没有length()这个方法?String有没有length()这个方法?
数组没有length()方法,有length的属性。String有length()这个方法。
37,下面这条语句一共创建了多少个对象:String = "a" + "b" + "c" + "d"; ?
一个对象。 javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉
其中加号,直接将其编译成一个这些常量相加的结果。
38 ,final,finally,finalize的区别?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时
的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。
*39,编译时被检查的异常和运行时异常的区别?
1)编译时被检查的异常在函数内被抛出,函数必须要声明,否则编译失败。
声明的原因:是需要调用者对该异常进行处理。
2)运行时异常如果在函数内被抛出,在函数上不需要声明。
不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不用调用处理的,直接让程序停止,由调用者对代码进行修正。
40,Error和Exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。
比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由
Java虚拟机抛出的。
Exception表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起
的问题或者外在的输入引起的一般性问题,是程序必须处理的。