昨天刷微博的时候,看到网路冷眼发的一条微博,分享的是一个有趣的编程语言测试和面试问题和解答网站。正好借此机会也检验一下自己的知识,当然这些题都有答案,而且,网站是英文的,这里算是一个翻译,顺便复习复习。对了,本文只涉及Java语言相关的题,本文是第一部分。

1. 三种访问修饰符private, protected, public的区别?

答:三种访问修饰符的差别如下

  • private: 仅对本类可见;
  • protected: 对本包和所有的子类可见;
  • public: 对所有类可见。

注:还有第四种访问修饰符:默认修饰符,是在没有指明任何修饰符的情况下使用的修饰符,不推荐使用。

2. 什么是applet?

答:一个applet是运行在网页浏览器中一个的Java程序。一个applet可以是全功能的Java应用程序,因为它掌握了所有的Java API。

3. 面向对象和基于对象的差别?

答:基于对象拥有除了继承之外的所有面向对象的特性。JavaScript和VBScript都是基于对象的。

注:面向对象的三大特性:封装、继承、多态。

4. static关键字是什么意思?

答:static关键字表示,不需要类的实例即可访问其成员变量和方法。

注:这里的解释只提到了static关键词的一个作用,static可用于修饰变量和方法,分别称为静态域和静态方法,还可以修饰常量(静态常量)。静态域和静态方法都只会被初始化一次,所有类的对象共用一份。静态方法可以直接通过类名调用,但是也可以通过实例化对象调用,不推荐后者这样做,因为这会混淆静态方法和实例方法。静态方法不能操作对象,没有隐式参数(即没有this参数),不能获取对象状态。

5. 默认构造器的作用?

答:默认构造器提供了对象的默认值,只有在类中没有构造器的时候,Java才会自动创建一个默认构造器。

注:默认构造器是没有参数的构造器,一般用来初始化域。如果没有初始化域,类中的域会被自动赋予一个初始值。数值类型的域会被初始化为0,布尔类型域被初始化为false,对象类型被初始化为null。一个好的编程习惯是:总是提供域的初始值。

6. Java所支持的数据类型有哪些?

答:Java支持8种数据类型:byte, short, int, long, float, double, char, boolean.

7. Java中按值传递和按引用传递分别是什么意思?

答:按引用传递意味着传递的是地址本身而不是值,按值传递意味着传递的是值的一份拷贝。

注:参见我的另一篇博客Java传参是按值传递还是按引用传递?

8. Java中的重载和覆盖分别是什么?

答:在Java中,重载发生在同一个类中有两个或多个名字相同但是参数不同的方法的时候,而覆盖则被定义为子类重新定义了父类中的方法。覆盖的方法必须拥有相同的方法名、参数列表和返回类型,并且,子类方法不能降低它所覆盖方法的可见性。

9. 什么是对象?

答:对象是一个运行时实体,它的状态存储在域中,它的行为通过方法来展现。方法可以操作对象的内部状态,是对象和对象通信的主要机制。

10. 什么是类?

答:类是用于创建单个对象的蓝图。一个类可以包含域和方法用以描述对象的行为。

11. 什么是数据封装?

答:封装有助于程序员遵循软件开发的模块化方法,因为每个对象都有自己的一套方法和变量,并提供独立于其他对象的方法。封装还用于数据隐藏的目的。

12. 什么是单例类?

答:Java中的单例类只能有一个实例,因此它所有的方法和变量都只属于一个实例。单例的都概念在需要限制一个类的对象数量的场景下很有用。

注:可以参见酷壳的这篇博客深入浅出单实例Singleton设计模式.

悲了个催的,网站打不开了,不知道是不是给屏蔽了,只能看日后能否解禁再继续后面的内容。o(╯□╰)o

------

好了,网站恢复访问了,继续翻译。

13. float和double变量的区别?

答:在Java中,float在内存中占4字节,而double在内存中占8字节。Float是单精度十进制浮点数,而Double则是双精度十进制浮点数。

14. 类可以包含哪几种变量?

答:一个类可以包含局部变量、实例变量和类变量。

15. Java类中所有类是由哪个基类派生出来的?

答:java.lang.object.

16. 我们能够在我们自己的类中把main方法定义为private?

答:在Java中,main方法必须被定义为public static,以便让所有的应用程序正常运行。如果main方法被定义为private,开发者不会获得任何编译错误,但是程序不会执行,并且会产生一个运行时错误。

17. Java中字节数据类型的默认值是多少?

答:字节数据类型的默认值是0。

18. 什么是finalize()方法?

答:垃圾收集器有可能定义一个某个对象被最终销毁之前会调用的方法,这个方法就是finalize(),可以用来确保一个对象被“终结”干净。

19. 什么是异常?

答:异常是一个程序运行时出现的问题,异常可以被位于线程方法调用栈中的处理程序所捕捉。

20. Java为什么是动态的?

答:它是为了适应不断变化的环境所设计的,Java程序可以携带大量的运行时信息,这些信息可以用来在运行时验证和解决对对象的访问。(好绕口,其实就是可以在运行时确定对象所能访问到的信息,比如变量和方法。)

The end.