zoukankan      html  css  js  c++  java
  • Java编程杂记

    13 Java Date 日期的使用方法
    注意: 月份的设定要-1。0-代表1月;1代表2月,11代表12月。
      Calendar cal = new GregorianCalendar(2013,00,11,11,11,0);
      java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("/yyyyMMdd/HHmm");
      System.out.println("Today is:"+ format.format(cal.getTime()));
      cal.add(Calendar.MINUTE, +1);
      System.out.println("Today is:"+ format.format(cal.getTime()));
    

      更多用法见:http://www.blogjava.net/kelly/archive/2011/02/21/344755.html

     
    12.try catch是否会引起程序性能
    异常最大的开销是创建异常时需要回溯栈信息,如果没有异常的时候几乎不会影响性能。
    可以使用try catch控制程序逻辑,但是异常必须抛出的非常少。
     
    11.如何对一个不断更新的HashMap进行排序?
    解答:等到HashMap更新稳定后,用ArrayList包装进行排序。或者自己写一个可以类似HashMap的有序Map,每次更新的时候都进行排序,构建自己的put方法,并且可以排序。
    实时计算的排序:
        Map<String, Integer> itemCount = new HashMap<String, Integer>();
        Comp cmp = new Comp();
        List<Map.Entry<String, Integer>> itemSort;
        itemSort = new ArrayList<Map.Entry<String, Integer>>( itemCount.entrySet()); 
        Collections.sort(itemSort, cmp);
     
    1.Comparator比较器的用法
    //下面的做法是对数组arr做acsend升序排序,数组必须是Integer[]的数组:
            Integer[] arr = new Integer[10];
            Comparator<Integer> cmp = new Comparator<Integer>() {
                public int compare(Integer i1, Integer i2) {
                    return i1 - i2;
                }
            };
            Arrays.sort(arr, cmp);
    或者构造一个类Comp来implements Comparator接口。这个就是比较器了。
     
    2 判断一个数是奇数的最好方法用操作符&:
     boolbean isOdd(int i){
           return (i & 1) != 0;   //偶数的话,(i&1)==0;
    }

    3 关于精度计算的问题,一定要使用BigDecimal(String)构造器,千万不要用BigDecimal(Double)。 (这一点,我通过程序测试了,确实如此;如果用BigDeimal(double)相当于没有用,即没有任何精度提高的效果。)

    用法:BigDecimal big = new BigDecimal("2.10");//这里要使用引号表示是字符串。
    总之, 在需要精确答案的地方,要避免使用 float和double;对于货币计算,要使用int、long 或BigDecimal。
     
    4 编译器在计算常量表达式'H'+'a'时,通过原始类型转换将两个具有字符型数值的操作数('H'和'a')提升为int数值而实现的。
        1、+作为字符串连接的时候,2边的参数至少有1个是String类型
        2、否则,其它类型将会转换成int32位,变成ASCII码的值来计算输出
    语言所关心的是,char是一个无符号 16位原始类型整数——仅此而已。对类库来说就不尽如此了,类库包含了许多可以接受 char 参数,并将其作为 Unicode字符处理的方法。
     
    5 字符数组输出的问题
    public class ABC{
        public static void main(String[] args) {
            String letters = "ABC";
            char[] numbers = { '1', '2', '3' };
            System.out.println(letters + " easy as " + numbers);
        }
    }
    //输出:ABC easy as [C@de6ced

    在一个非空 char数组上面调用 toString方法会产生什么样的行为呢?数组是从Object 那里继承的toString 方法[JLS 10.7],规范中描述到:“返回一个字符串,它包含了该对象所属类的名字,'@'符号,以及表示对象散列码的一个无符号十六进制整数”[Java-API]。

    Solution:  总之,char数组不是字符串。要想将一个 char数组转换成一个字符串,就要调用String.valueOf(char[])方法。
    System.out.println(letters + " easy as " +  String.valueOf(numbers)); 
     
    6 byte数值的转换
    为了比较byte 数值(byte)0x90和int 数值0x90,Java通过拓宽原始类型转换将byte 提升为一个 int[JLS 5.1.2],然后比较这两个int 数值。
    0x90 对应二进制0000,0000,1001,0000.    byte(0x90)只会取后八位:1001,0000(对应的数字-16) 这两个数进行比较的时候,把byte的值扩展到int型,做的是符号扩展,即为1000,0000,1001,0000。(前8位补充符号、0,后八位不变。值为-112)-112 与+144当然不相等。
     
    7 BigInteger 实例是不可变的。String、BigDecimal以及包装器类型: Integer、 Long、 Short、 Byte、 Character、 Boolean、Float和 Double 也是如此,你不能修改它们的值。我们不能修改现有实例的值,对这些类型的操作将返回新的实例。
    比如大整数的加法要这样写: BigInteger total = BigInteger.ZERO;       total = total.add(fiveThousand); 
     
    8 与hashCode有关的equal:puzzle57.
    当你覆写equals方法时,一定要记着覆写hashCode()方法。更一般的讲,当你在覆写一个方法时,如果它具有一个通用的约定,那么一定要遵守它。对大多数在Object中声明的非final的方法,都需要注意这一点【EJ Chapter3】
    public int hashCode(){
              return 37*first.hashCode()+last.hashCode();
    }
    

    具体hashCode的计算方法见 Effective JAVA

     
     String trim() 
              Returns a copy of the string, with leading and trailing whitespace omitted.返回字符串的副本,忽略前导和尾随的空白。
     
    10. Log4j的使用
    示例程序:只需要引入log4j-1.2.16.jar这个apache的包就可以了。记得在里面写log4j的配置文件:log4j.properties。
    下面有一个示例的写法。更多log4j的参数意义,请看http://johnny-gz.iteye.com/blog/1750714 
     
    import org.apache.log4j.Logger;
    
    public class TestLog4j {
    	private static final int MAX = 10;
    	static Logger Log = Logger.getLogger(TestLog4j.class);
    	public static void main(String[] args) {
    		int i = 0;
    		Log.error("错误的高大上的输出:" + (i++));
    		Log.info("信息的高大上的输出:" + (i++));
    		Log.debug("Debug的高大上的输出。" + (i++));
    		Log.info("信息的高大上的输出:" + (i++));
    	}
    }
    

      

  • 相关阅读:
    boost::asio发送与传输相关的几个函数,备忘
    当ASIO::ASYNC_READ与SOCKET的ASYNC_READ_SOME的区别
    boost::asio keepalive
    boost asio ——深入框架
    Boost.Asio和ACE之间关于Socket编程的比较
    OCP-1Z0-052-V8.02-15题
    JavaScript对象和数组
    Oracle 11g New 使用RMAN 增强功能
    Flex中集合的类型
    Flex中基于列表的一系列MX组件及相互关系
  • 原文地址:https://www.cnblogs.com/byrhuangqiang/p/3654162.html
Copyright © 2011-2022 走看看