i3geek.com
闫庚哲的个人博客

Java 经典问题集锦

问题1:JAVA是解释型语言还是编译型语言?

Java是一种特殊的高级性语言,它既有解释性语言的特征,也有编译性语言的特征,因为它是经过先编译,后解释的过程。

简单说:
HelloWorld.java—— ①编译 ——>HelloWolrd.class—— ②解释 ——>特定平台的机器代码

编写出一个HelloWorld.java文件,通过javac.exe解释器编译成了一个不是特定平台(操作系统)的机器码HelloWorld.class文件。当然这种机器码是不可以执行的,必须使用java解释器(java.exe)来执行的。可是java.exe不具有解释的能力,它是调用jvm-java虚拟机来解释成适用当前平台的机器码。


问题2:如果main方法被声明为private会怎样?

能正常编译,但运行的时候会提示”main方法不是public的”。

如果去掉了main方法的static修饰符会怎样?

能正常编译,但运行时会抛NoSuchMethodError异常。


问题3:==与equals的区别

==比较两个对象在内存里是不是同一个对象,对于String对象来说就是说在内存里的存储位置一致。两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 .

==比较的是引用而equals方法比较的是内容。public boolean equals(Object obj) 这个方法是由Object对象提供的,可以由子类进行重写。默认的实现只有当对象和自身进行比较时才会返回true,这个时候和==是等价的。String, BitSet, Date, 和File都对equals方法进行了重写,对两个String对象 而言,值相等意味着它们包含同样的字符序列。对于基本类型的包装类来说,值相等意味着对应的基本类型的值一样。


问题4:介绍一下finalize方法

final: 常量声明。 finally: 处理异常。 finalize: 帮助进行垃圾回收。

接口里声明的变量默认是final的。final类无法继承,也就是没有子类。这么做是出于基础类型的安全考虑,比如String和Integer。这样也使得编译器进行一些优化,更容易保证线程的安全性。final方法无法重写。final变量的值不能改变。finalize()方法在一个对象被销毁和回收前会被调用。finally,通常用于异常处理,不管有没有异常被抛出都会执行到。比如,关闭连接通常放到finally块中完成。


问题5:sizeof是Java的关键字吗?

不是

goto和const是JAVA关键字吗?

不是,但是都是保留字,未被使用,不可以用来命名等。

true和false是java关键字吗?

不是,是boolean的直接使用量


问题6:Java的访问修饰符是什么?

访问权限修饰符是表明类成员的访问权限类型的关键字。使用这些关键字来限定程序的方法或者变量的访问权限。它们包含:

private:只有本类中才能访问;public:都能访问;默认(包访问权限):只有本包内才能访问,包括本包内的子类和普通类;protected:只要本包内就能访问,包括本包内的子类和普通类,另外别的包内的子类也能访问,但是普通类不能访问。所以说protected和默认(包访问权限)是很相似的,在同一个包内,它们是一样的,而在另一个包内,默认是不能访问的,而protected是只有子类能访问。

public private protected和默认的区别


问题7:所有类的父类是什么?

Object.


问题8:Java的基本类型有哪些?

byte,char, short, int, long, float, double, boolean。没有String!


问题9:&操作符和&&操作符有什么区别?

当一个&表达式在求值的时候,两个操作数都会被求值,&&更像是一个操作符的快捷方式。当一个&&表达式求值的时候,先计算第一个操作数,如果它返回true才会计算第二个操作数。如果第一个操作数取值为fale,第二个操作数就不会被求值。

&也有按位与的作用。


问题10:public static void写成static public void会怎样?

程序正常编译及运行。


问题11:main方法的参数里面,字符串数组的第一个参数是什么?

数组是空的,没有任何元素。不像C或者C++,第一个元素默认是程序名。如果命令行没有提供任何参数的话,main方法中的String数组为空,但不是null


问题12:怎么判断数组是null还是为空?

输出array.length的值,如果是0,说明数组为空。如果是null的话,会抛出空指针异常。


问题13:程序中可以允许多个类同时拥有都有main方法吗?

可以。当程序运行的时候,我们会指定运行的类名。JVM只会在你指定的类中查找main方法。因此多个类拥有main方法并不存在命名冲突的问题。

同一个java文件中可以有多个类,但是只能有一个public类。


问题14:静态变量在什么时候加载?编译期还是运行期?静态代码块加载的时机呢?

当类加载器将类加载到JVM中的时候就会创建静态变量,这跟对象是否创建无关。静态变量加载的时候就会分配内存空间。静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。静态代码块不能包含this或者super,它们通常被用初始化静态变量。


问题15:一个类能拥有多个main方法吗?

可以,但只能有一个main方法拥有以下签名:

public static void main(String[] args) {}

否则程序将无法通过编译。编译器会警告你main方法已经存在。


问题16:简单的介绍下JVM是如何工作的?

JVM是一台抽象的计算机,就像真实的计算机那样,它们会先将.java文件编译成.class文件(.class文件就是字节码文件),然后用它的解释器来加载字节码。


问题17:如何原地交换两个变量的值?

先把两个值相加赋值给第一个变量,然后用得到的结果减去第二个变量,赋值给第二个变量。再用第一个变量减去第二个变量,同时赋值给第一个变量。代码如下:

int a=5,b=10;a=a+b; b=a-b; a=a-b;

使用异或操作也可以交换。第一个方法还可能会引起溢出。异或的方法如下: int a=5,b=10;a=a+b; b=a-b; a=a-b;

int a = 5; int b = 10;
a = a ^ b;
b = a ^ b;
a = a ^ b;
赞(0)
未经允许不得转载:爱上极客 » Java 经典问题集锦
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址