根据网上的求职信息,整理了必要的技能,准备恶补一下:
加油。
2018/07/04
1. Java中遇到 i = i++;的问题。
int i=0;
i = i++;
system.out.println(“i=”+i);
输出结果为:i = 0;
因为jvm引入了临时变量的机制,在做计算的时候,会将 i 的值将放入临时变量存储,等计算完成,再从临时变量中取出 赋值给i。这样一来,i 的值依然为0。
如果用 temp 替代 i 来做演示就更明显了。
int i = 0;
int temp = 0;
temp = i ++;
system.out.println("temp="+temp);
system.out.println("i="+i);
输出结果为: temp=0; i = 1;
i 的值确实发生了变化,并可以输出,在第一个例子中,当 i 的值增加为 1 之后,重新被临时变量中的值覆盖掉了。所以看到的 i 值仍然是 0。
2.类型转换问题: char < short < int < float < double
3. object的方法:
clone()、equale(Object obj)、finalize()、getClass()、hashCode()、toString()、
notify()、notifyAll()、wait()、wait(long time)、wait(long time,int count)
4. Math的常用方法:
round 四舍五入,往大数方向入,往小数方向舍。======》往它最接近的方向去转换,无关正负。
如果传递一个double类型的参数,返回的类型为long,如果传递一个float的参数,返回值类型为int。
floor 地板,指向下取整,返回不大于它的最大整数。====》会变小,数值方面。-11.8 -12.0
ceil 天花板,值向上取整,返回不小于它的最小整数。====》会变大,数值方面。-11.8 -11.0返回值为double
5. StringBuffer 和 StringBuilder 以及 String
三者的主要区别在于 运行速度 和 线程安全上。
首先,运行速度上,StringBuilder > StringBuffer > String 。
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。实例如下:
String a = "abc";
System.out.println(a);
a = a + "def";
System.out.println(a);
代码先输出 abc,然后输出 abcdef。原理上看是修改了 a 字符串 的内容,而实际上在执行到第三行的之后,JVM对 a 字符串进行了 gc 回收操作,然后创建了一个新的字符串,用来存储“abcdef”的值。Java中对于String的处理是一旦创建是不能被修改的,所以Java中对于String的处理 是一个不断创建和不断回收的过程,所以执行非常慢。
而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。在使用了StringBuild之后,实例如下:
String a = "abc"+"def";
StringBuilder sb = new StringBuilder().append("abc").append("def");
System.out.println(a);
System.out.println(sb。toString());
可以发现,StringBuilder的执行速度并没有String的执行速度快,这是因为String a = "abc"+"def" 的作用等同于
String a = “abcdef” 。
如果写成以下形式,执行速度就不一样了:
String a = "abc";
String b = "def";
String a = a + b;
System.out.println(a);
如此一来,Jvm就会不断的创建和回收 String对象,从而实现其功能。
然后,是线程安全的问题。
三者中,只有StringBuffer是线程安全的。主要应用于缓存中。因为多数方法都是使用了synchronized修饰的,所以进行操作需要获取到同步方法的权限。StringBuilder的方法没有被sychronized关键字修饰,所以是不安全的。
综上所述:
在需要线程安全的情况下,应该使用StringBuffer。
不考虑线程安全的情况下,应该使用StringBuilder,执行速度最快。
在少量字符串操作的情况下,使用String最佳。
6. 字段属性是静态绑定的,如果 遇到不存在的对象调用成员变量,会出现检查性异常
8. 抽象类有没有构造函数:
虽然抽象类不能被实例化,但可以有构造函数。由于抽象类的构造函数在实例化派生类之前发生,所以,可以在这个阶段初始化抽象类字段或执行其它与子类相关的代码。