java你所不知道的实用技巧

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

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

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


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

           int num[] = {11,33};
            num[0] = num[0]^num[1];
            num[1] = num[1]^num[0];
            num[0] = num[0]^num[1];
            System. out.println( "num[0]="+num[0]);
            System. out.println( "num[1]="+num[1]);




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

        double money = 2;
            double price = 1.1;
            double result = money - price;
            System. out.println(result);
            
            BigDecimal deMoney = new BigDecimal( "2");
            BigDecimal dePrice = new BigDecimal( "1.1");
            BigDecimal deResult = deMoney.subtract(dePrice);
            System. out.println(deResult.toString());

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

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

         No1:for (int i = 0; i < 10; i++) {     //用当前的for循环“取个名字”
                   for ( int j = 0; j < 10; j++) {
                        System. out.print( "i="+i+ ",j="+ j+"\t");
                         if(i== j) {
                               break No1;       //跳出名字为“No1”的for
                        }
                  }
                  System. out.println();
            }


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

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

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

     public static void main(String[] args) {
            String name = "java";
             switch (name.hashCode()) {
             case 3254818:       //"java".hashCode()得到的数据
                  System. out. println("java");
                  break;
            }
      }

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...     
     }
     如果在万千行代码中,不小心出了个这样的问题,情况好的时候,测试一下结果就发现问题,改正即可。人品不好的时候,你可能会一直以为程序运行正常。
     而使用推荐的方法,你如果不小心把x==3写成x=3,IDE那条鲜艳的红线……不多说了。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值