您的位置:首页 > 职场人生

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表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起

 的问题或者外在的输入引起的一般性问题,是程序必须处理的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息