java你所不知道的实用技巧

来源:互联网 发布:mac numbers 格式刷 编辑:程序博客网 时间:2024/04/30 00:34
java你所不知道的实用技巧              
        

最近整理了一下过去所学的知道,觉得收获不少,都说学而时习之,不亦说乎。java之中有很多功能不经意之间会被我们遗忘,对此我也整理出来,做下总结,分享给大家,有误之处,希望大家指出批评。

1、System.out.println(); 
相信程序员写的最多的重复语句莫过于此,这个常用于打印输出、调试程序,可以说是无处不在。
默认的System.out是向控制台输出,但是,如果输出的信息量很大,要怎样轻易的观察到输出的结果呢?设置一下System.setOut(),该方法传入的是一个PrintStream类型的对象,即可将输出的内容输出到你指定的路径文件中。

[java] view plaincopyprint?
  1. PrintStream out = System.out;    //保留默认System.out的输出对象  
  2. PrintStream ps = new PrintStream( "D:/log.txt");  //构建新的输出对象  
  3. System. setOut(ps);  
  4. Scanner scanner = new Scanner(System. in);  
  5. System. out.println( "请输入您的姓名:" );  
  6. String name = scanner.nextLine();  
  7. System. out.println( "您好:"+name);   
  8. System. setOut(out);   //还原默认的输出对象  
  9. System. out.println( "执行OK");<span style="font-family: Tahoma;">                    </span>  
2、位运算的妙用。
   大家都知道:
     1的二进制数:00000001
     2的二进制数:00000010
     4的二进制数:00000100
     8的二进制数:00001000
     观察其中的规律,可见左移一位,相当于乘以2,右移一位,相当于除以2。所以,乘以2的n次方的数可以用位运算来提高执行效率。
[java] view plaincopyprint?
  1. int numa = 5;  
  2.      int numb = numa<<3;  
  3.      int numc = numb>>1;  
  4.      System. out.println(numb);  
  5.      System. out.println( numc);  


     当然了,位运算还可以对两数进行交换,不过只支持整型。

[java] view plaincopyprint?
  1. int num[] = {11,33};  
  2.  num[0] = num[0]^num[1];  
  3.  num[1] = num[1]^num[0];  
  4.  num[0] = num[0]^num[1];  
  5.  System. out.println( "num[0]="+num[0]);  
  6.  System. out.println( "num[1]="+num[1]);  




3、对于高精度的加减乘除。BigDecimal
   这个不用多说,相信许多程序员需要经常用到这个类。

[java] view plaincopyprint?
  1. double money = 2;  
  2.     double price = 1.1;  
  3.     double result = money - price;  
  4.     System. out.println(result);  
  5.       
  6.     BigDecimal deMoney = new BigDecimal( "2");  
  7.     BigDecimal dePrice = new BigDecimal( "1.1");  
  8.     BigDecimal deResult = deMoney.subtract(dePrice);  
  9.     System. out.println(deResult.toString());  

      记得BigDecimal()构造方法里传的是一个String类型的对象,如果直接传数值进去,也许得不到你所要的结果哦。

4、结束双层循环:
     大家都知道,break是结束整个循环体,continue是结束单次循环,那么双层循环如何跳出,我想大部人都会,给大家复习一下吧。
     不多说这就是结束双层循环的用法:

[java] view plaincopyprint?
  1. <span style="font-size: 18px;">         No1:for (int i = 0; i < 10; i++) {     //用当前的for循环“取个名字”  
  2.                    for ( int j = 0; j < 10; j++) {  
  3.                         System. out.print( "i="+i+ ",j="+ j+"\t");  
  4.                          if(i== j) {  
  5.                                break No1;       //跳出名字为“No1”的for  
  6.                         }  
  7.                   }  
  8.                   System. out.println();  
  9.             }</span>  


5、“&”和“&&”的区别:
    简单点的理解,
     单&时,左边无论真假,右边都进行运算;
    双&时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
     “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

[java] view plaincopyprint?
  1. public static void main(String[] args) {  
  2.        String name = "java";  
  3.         forint i=0; i<5; i++) {  
  4.               if(name.equals( "jav") && i++ ==0) {    //&&前半句为假时,后半句将不执行  
  5.         //    if(name.equals("jav") & i++ ==0) {          &无论前半句是真是假,后半句都将执行  
  6.                     break;  
  7.              }  
  8.              System. out.println(i);  
  9.        }  
  10.  }     
这里还有一个初学者经常不理解的地方:异或( ^ )与或( | )的不同之处是,(^)是当左右都为true时,结果为false。(|)是只要其中有一个为true时,结果为true.两者是逻辑相反的。

6、switch语句选择的类型只有四种:byte,short,int , char?????     NO!
     jdk1.7以后,switch可以支持String类型的选择了。当然了,如果你想问1.7以前的版本要如何实现String类型的选择,得到字符的hashCode,返回的就是int 类型的数了。

[java] view plaincopyprint?
  1. public static void main(String[] args) {  
  2.        String name = "java";  
  3.         switch (name.hashCode()) {  
  4.         case 3254818:       //"java".hashCode()得到的数据  
  5.              System. out. println("java");  
  6.              break;  
  7.        }  
  8.  }  

7、静态导入
import static java.lang.Math.*;这样就可以直接调用Math中的静态方法,如max(2,3);如果不导入就要写成Math.max(2,3);

8、我们常常要做一个关于字符串判断的操作,如下:
     String name;
     //通过一些方式,我得到了name的值。
     name = "java";
     //不推荐的用法
     if(name.equals("java")) {
          doSth...
     }
     //推荐用法
     if("java".equals(name)) {
          doSth....     
     }
     原因,当我们所要判断的字符串为null时,会抛空指针异常。比如 你获取用户提交的参数,当并没有获取到这个参数,又对其进行了判断逻辑,如果使用了不推荐的方法,就会抛空指针异常。除非你的程序确实很健壮,确信在这个判断上根本不可能出现name为null的情况。

9、boolean值做为循环条件。
     //不推荐用法
     if(x==3){
          doSth....
     }
     //推荐用法
     if(3==x) {
          doSth....     
      }
      两则都是以判断x是否等于3的结果作为判断条件,但是人总有一疏忽,如果你不小心把代码写成了这种情况怎么办:
     if(x=3){
          doSth...
     }else{
          doSth...     
     }
     如果在万千行代码中,不小心出了个这样的问题,情况好的时候,测试一下结果就发现问题,改正即可。人品不好的时候,你可能会一直以为程序运行正常。
原创粉丝点击