【Java求职准备第一天】

  根据网上的求职信息,整理了必要的技能,准备恶补一下:



加油。

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. 抽象类有没有构造函数:

      虽然抽象类不能被实例化,但可以有构造函数。由于抽象类的构造函数在实例化派生类之前发生,所以,可以在这个阶段初始化抽象类字段或执行其它与子类相关的代码。







猜你喜欢

转载自blog.csdn.net/ca1m0921/article/details/80737730