java知识点小结(2)

这一篇主要总结一下java中一些零碎的但又易错的小知识点:java

1.一个".java"源文件中能够有多个类,但只能有一个public的类,而且public的类名必须与文件名相一致。算法


2.&和&&的区别。  数组

   &和&&均可以用做逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,不然,只要有一方为false,则结果为false。 安全

  (1)&&还具备短路的功能,即若是第一个表达式为false,则再也不计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,因此不会出现NullPointerException;多线程

   若是将&&改成&,则会抛出NullPointerException异常。ide

   例:If(x==33 & ++y>0) y会增加,If(x==33 && ++y>0)不会增加 this

  (2)&还能够用做位运算符,当&操做符两边的表达式不是boolean类型时,&表示按位与操做,咱们一般使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。编码


3.char型变量中能够存贮一个中文汉字线程

   char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,因此,char型变量中固然能够存储汉字啦。不过,若是某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,因此,char类型的变量也是占用两个字节。code


4."=="和equals方法的区别:

   (1)==操做符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操做符。

    若是一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象自己占用一块内存(堆内存),变量也占用一块内存,例如Objet obj = new Object();变量obj是一个内存,new Object()是另外一个内存,此时,变量obj所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,若是要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就须要用==操做符进行比较。

    (2)equals方法是用于比较两个独立对象的内容是否相同,就比如去比较两我的的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:String a=new String("Hello");      String b=new String("Hello");

两条new语句建立了两个对象,而后用a,b这两个变量分别指向了其中一个对象,这是两个不一样的对象,它们的首地址是不一样的,即a和b中存储的数值是不相同的,因此,表达式a==b将返回false,而这两个对象中的内容是相同的,因此,表达式a.equals(b)将返回true。

 

   注意: 若是一个类没有本身定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码以下:

     boolean equals(Object o){      

           return this==o;

       }

这说明,若是一个类没有本身定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操做符,也是在比较两个变量指向的对象是不是同一对象,这时候使用equals和使用==会获得一样的结果,若是比较的是两个独立的对象则总返回false。若是你编写的类但愿可以比较该类建立的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你本身写代码来决定在什么状况便可认为两个对象的内容是相同的。


5.Math类中提供了三个与取整有关的方法:

   (1)ceil的英文意义是天花板,该方法就表示向上取整,因此,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;

   (2)floor的英文意义是地板,该方法就表示向下取整,因此,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;

   (3)最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,因此,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。


6.做用域public,private,protected,以及不写时的范围:

    这四个做用域的可见范围以下表所示。

    说明:若是在修饰的元素上面没有写任何访问修饰符,则表示friendly。

做用域    当前类 同一package  子孙类  其余package

public     √         √         √      √  

protected  √         √         √      ×

friendly   √         √         ×      ×  

private    √         ×         ×      ×


7.数组没有length()这个方法,有length的属性。String有length()这个方法


8.多线程有几种实现方法?同步有几种实现方法?  

   多线程有两种实现方法,分别是继承Thread类与实现Runnable接口      

   同步的实现方面有两种,分别是synchronized,wait与notify  

   wait():使一个线程处于等待状态,而且释放所持有的对象的lock。  

   sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。  

   notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM肯定唤醒哪一个线程,并且不是按优先级。  

   Allnotity():唤醒全部处入等待状态的线程,注意并非给全部唤醒线程一个对象的锁,而是让它们竞争。


9.Collection 和 Collections的区别:

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.  

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各类集合的搜索、排序、线程安全化等操做。

相关文章
相关标签/搜索