这是我学习欧立奇《Java程序员面试宝典》第三版的笔记。这篇是基本语法部分。


ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象。


在Java中,字符只以一种形式存在,那就是Unicode。在JVM内部一切都由Unicode表示,而输出到外部后(JVM和OS的交界处就是各种输入/输出流)转换为其他形式的编码。


Java用了中间缓存变量的机制,所以,j=j++可换成如下写法:

temp=j;

j=j+1;

j=temp;


float z = 1.0编译不能通过。因为1.0是double型,需要1.0f才能通过。

可以使用包装类进行基本类型的强制转换。例如:

float f1=100.00f;

Float f2=new Float(f1);

Double d1=f2.doubleValue();

s+1为int, 不能直接赋值给short。


main方法必须是public的,但可以抛出异常、声明参数。


使用三目运算符时,Java会针对精度类型执行自动类型转换。


&、|与&&、||的重要区别是:前者是非短路运算,后者是短路运算。

<<      :     左移运算符,num << 1,相当于num乘以2

>>      :     右移运算符,num >> 1,相当于num除以2

>>>    :     无符号右移,忽略符号位,空位都以0补齐

>>32等于>>0


若有多个catch块,只会匹配其中一个异常类并执行catch块代码。

finally结构在return前被执行。
 

Java I/O(略)

判断一个数是不是2的阶次方数:将该数减1之后执行“与”操作

for循环可以不包括{},但仅限于执行语句。


利用筛选法查找素数(略)


一段程序可以建议垃圾回收执行,但不保证一定会被执行。


典型的内存泄露原因:全局集合、缓存、ClassLoader驻留在内存中


clone方法是在object中定义的,但只有实现了clonable接口,才可以调用clone方法,否则会抛出异常。


wait()是在Object类中定义的方法,而sleep不是。


Java内部类和C++嵌套类有什么区别?

C++:虽然嵌套类在封装类内部定义,但它是一个独立的类,基本上与封装类不相关。它的成员不属于封装类,同样,封装类的成员也不属于该嵌套类。嵌套类的出现只是告诉封装类有一个这样的类型成员供其使用。

Java:静态嵌套类与C++嵌套类类似,可以直接访问封装类的static成员,但是,如要访问非静态成员就要使用一个封装类的对象作为载体。非静态嵌套类允许我们直接访问封装类的所有成员,不论静态成员还是非静态。



u=635038340,2506132235&fm=21&gp=0.jpg


map.entryset()返回entryset,顺序是随机的。


hashmap和hashtable有什么区别?

 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

HashMap是Hashtable的轻量级实现(非线程安全的实现)。


Java中不可以覆盖构造函数,子类的构造函数会自动先调用父类的构造函数。


有默认的复制构造函数,但只提供位复制。


重载和覆盖的不同:

重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同参数列表不同的方法之间就构成了重载关系。

覆盖 (override):也叫重写,就是在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了后,除非用super关键字,否则就无法再调用父类中的方法了。

静态方法不能被覆盖。


新建子类对象时,在父类的构造方法中调用了xxx方法,而xxx方法在子类中被覆盖过,则会在父类中直接调用子类的xxx方法。


匿名内部类不能继承其它类,但可以实现接口。

抽象类不能是final的。