java你所不知道的实用技巧

来源:互联网 发布:java int毫秒时间转换 编辑:程序博客网 时间:2024/04/29 19:47

最近整理了一下过去所学的知道,觉得收获不少,都说学而时习之,不亦说乎。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那条鲜艳的红线……不多说了。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么办中石化的加油卡 中石油油卡丢失怎么办 公司加油卡丢了怎么办 yy频道被回收了怎么办 油卡里的圈存怎么办 农商银行圈存怎么办 社保卡号忘记了怎么办 陕西壳牌加油卡怎么办 联通用超了流量怎么办 联通3g上不了网怎么办 车玻璃水冻住了怎么办 车里玻璃水冻了怎么办 做现货亏了60万怎么办 宿舍太吵晚上睡不着觉怎么办 脚扎了钉子肿了怎么办 龙血树叶子下垂怎么办 龙血树叶子卷曲怎么办 3岁宝宝长期便秘怎么办 4岁小儿便秘严重怎么办 3岁宝宝便秘严重怎么办 3岁宝宝一直便秘怎么办 11个月宝宝便秘怎么办 2个月的宝宝便秘怎么办 宝宝便秘拉不下来怎么办 5一6岁儿童便秘怎么办 3个月宝宝便秘怎么办 8个月宝宝便秘怎么办 孕5个月咳嗽厉害怎么办 孕8个月咳嗽厉害怎么办 拆石膏后关节僵硬怎么办 宝宝的小腿不直怎么办 鸡咳嗽有痰呼噜怎么办 风热感冒怎么办小窍门 吃完虾喝了牛奶怎么办 三文鱼头汤腥怎么办 晚上咳嗽厉害怎么办睡不着觉 刚怀孕发烧39度怎么办 刚怀孕发烧38度怎么办 怀孕10天发烧了怎么办 怀孕2个月发烧了怎么办 lol误封3年怎么办