zoukankan      html  css  js  c++  java
  • java基础2013

    一、双括号初始化语法(DoubleBraceInitialization)(这里指的是大括号{})

     主要指的是集合类(List,Map,Set等),我们创建一个常量集合或传递一个常量集合作为参数,往往都会这么做(以Set为例):

    1
    2
    3
    4
    5
    6
    Set<String> validCodes =newHashSet<String>();
     validCodes.add("XZ13s");
     validCodes.add("AB21/X");
     validCodes.add("YYLEX");
     validCodes.add("AR2D");
     removeProductsWithCodeIn(validCodes);
    1
    或在类中初始化一个常量集合:
    1
    2
    3
    4
    5
    6
    7
    private static final Set<String> VALID_CODES =newHashSet<String>();
     static{
        validCodes.add("XZ13s");
        validCodes.add("AB21/X");
        validCodes.add("YYLEX");
        validCodes.add("AR2D");
     }
    1
    会不会觉得每次都这样很费时费力,其实,有更好的办法,那就是双括号语法,像下面这样:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private static final Set<String> VALID_CODES =new HashSet<String>() {{
        add("XZ13s");
        add("AB21/X");
        add("YYLEX");
        add("AR2D");
     }};
     
    // Or:
     
     removeProductsWithCodeIn(newHashSet<String>(){{
        add("XZ13s");
        add("AB21/X");
        add("YYLEX");
        add("AR5E");
     }});

    这里解释下这两个括号:第一个括号创建了一个新的匿名内部类,相信这个大家都知道;第二个括号声明了匿名内部类实例化时运行的实例初始化块。

    使用双括号语法需要注意两点:

    1. 如果要在匿名内部类中要建立匿名子类,那么只能用于非final的类,这很明显,且不仅局限于集合类,可以用来实例化任何对象,例如用于GUI对象,如下:

    1
    2
    3
    4
    5
    6
    add(newJPanel() {{
        setLayout(...);
        setBorder(...);
        add(newJLabel(...));
        add(newJSpinner(...));
     }});
    1
    2. 这种语法与常用的equals(Objecto)方法不兼容。例如Example类有这样的方法:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public boolean equals(finalObject o) {
        if(o ==null) {
            returnfalse;
        }elseif(!getClass().equals(o.getClass())) {
            returnfalse;
        }else{
            Example other = (Example) o;
            // Compare this to other.
        }
      }

    那么,使用双括号初始化语法创建的任何对象都不会与未使用双括号语法创建的对象相等。因此,建议大家:如果类中需要equals(Object o)方法,那就老老实实不要使用这种语法了。不过集合类没有这种问题,应该是因为集合内部优化了的原因。

    那么什么时候建议大家使用双括号语法呢?

    如果你只是要创建并初始化一个实例而不是创建一个新类,或者创建任何不添加字段属性或重载方法的匿名类时,用双括号语法就很nice了。

    3. 如果你用的是集合类且该类有构造器参数接受另一个集合生成该集合的实例,那么有个更好的更惯用的替代方法,如大家都知道的List初始化可以用Arrays.asList(),如下:

    1
    List<String> myList =newArrayList<String>(Arrays.asList("One","Two","Three"));
    1
    <strong>但需要注意:asList返回的是一个长度不可变的列表。数组是多长,转换成的列表是多长,



    ava保留两位小数问题:

    方式一:

    四舍五入  
    double   f   =   111231.5585;  
    BigDecimal   b   =   new   BigDecimal(f);  
    double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  
    保留两位小数  
    --------------------------------------------------------------- 

    方式二:

    java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
    df.format(你要格式化的数字);

    例:new java.text.DecimalFormat("#.00").format(3.1415926)

    #.00 表示两位小数 #.0000四位小数 以此类推...

    方式三:

    double d = 3.1415926;

    String result = String .format("%.2f");

    %.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型

    方式四:

    NumberFormat ddf1=NumberFormat.getNumberInstance() ;

    void setMaximumFractionDigits(int digits) 
    digits 显示的数字位数 
    为格式化对象设定小数点后的显示的最多位,显示的最后位是舍入的

    import java.text.* ; 
    import java.math.* ; 
    class TT 

    public static void main(String args[]) 
    { double x=23.5455; 
    NumberFormat ddf1=NumberFormat.getNumberInstance() ;


    ddf1.setMaximumFractionDigits(2); 
    String s= ddf1.format(x) ; 
    System.out.print(s); 

    }

    格式化时间

    new Date(String str).format("Y-m-d")   2013-01-24


    Java Math的 floor,round和ceil的总结

    floor :返回小于它的最大整数
    round :4舍5入的计算

    ceil :返回大于它的最小整数


    Calendar的使用

    获取星期

    Calendar now =Calendar.getInstance();  
                   now.setTime(new Date());  
                   now.set(Calendar.DATE,now.get(Calendar.DATE));
                   int day = now.get(Calendar.DAY_OF_WEEK);

    获取多少天后的时间

    Calendar now =Calendar.getInstance();  
               now.setTime(new Date());  
               now.set(Calendar.DATE,now.get(Calendar.DATE)+amount);  
             Date date =  now.getTime();


    在eclipse中配置jvm(提高环境配置的迁移性)

    在eclipse.ini文件第一行(注意一定要插入到第一行)

    -vm
    D:javaEvnJDK6jreinjavaw.exe

  • 相关阅读:
    SQL Server 2008中的hierarchyid
    SQL判断空值、nvl处理与JOIN的使用
    Transact-SQL语法速查手册
    MySQL连接字符串
    如何让spark sql写mysql的时候支持update操作
    基于calcite做傻瓜式的sql优化(三)
    基于calcite做傻瓜式的sql优化(二)
    基于calcite做傻瓜式的sql优化(一)
    spark升级:从1.6升级到2.4.6的记录
    彻底解决,sparkSQL读取csv中Map字段类型的问题
  • 原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266332.html
Copyright © 2011-2022 走看看