java基础2013
来源:互联网 发布:mpp 数据库 编辑:程序博客网 时间:2024/06/05 01:47
一、双括号初始化语法(DoubleBraceInitialization)(这里指的是大括号{})
主要指的是集合类(List,Map,Set等),我们创建一个常量集合或传递一个常量集合作为参数,往往都会这么做(以Set为例):
Set<String> validCodes =
new
HashSet<String>();
validCodes.add(
"XZ13s"
);
validCodes.add(
"AB21/X"
);
validCodes.add(
"YYLEX"
);
validCodes.add(
"AR2D"
);
removeProductsWithCodeIn(validCodes);
或在类中初始化一个常量集合:
private
static
final
Set<String> VALID_CODES =
new
HashSet<String>();
static
{
validCodes.add(
"XZ13s"
);
validCodes.add(
"AB21/X"
);
validCodes.add(
"YYLEX"
);
validCodes.add(
"AR2D"
);
}
会不会觉得每次都这样很费时费力,其实,有更好的办法,那就是双括号语法,像下面这样:
private
static
final
Set<String> VALID_CODES =
new
HashSet<String>() {{
add(
"XZ13s"
);
add(
"AB21/X"
);
add(
"YYLEX"
);
add(
"AR2D"
);
}};
// Or:
removeProductsWithCodeIn(
new
HashSet<String>(){{
add(
"XZ13s"
);
add(
"AB21/X"
);
add(
"YYLEX"
);
add(
"AR5E"
);
}});
这里解释下这两个括号:第一个括号创建了一个新的匿名内部类,相信这个大家都知道;第二个括号声明了匿名内部类实例化时运行的实例初始化块。
使用双括号语法需要注意两点:
1. 如果要在匿名内部类中要建立匿名子类,那么只能用于非final的类,这很明显,且不仅局限于集合类,可以用来实例化任何对象,例如用于GUI对象,如下:
add(
new
JPanel() {{
setLayout(...);
setBorder(...);
add(
new
JLabel(...));
add(
new
JSpinner(...));
}});
2
. 这种语法与常用的equals(
Object
o)方法不兼容。例如Example类有这样的方法:
public
boolean
equals(
final
Object o) {
if
(o ==
null
) {
return
false
;
}
else
if
(!getClass().equals(o.getClass())) {
return
false
;
}
else
{
Example other = (Example) o;
// Compare this to other.
}
}
那么,使用双括号初始化语法创建的任何对象都不会与未使用双括号语法创建的对象相等。因此,建议大家:如果类中需要equals(Object o)方法,那就老老实实不要使用这种语法了。不过集合类没有这种问题,应该是因为集合内部优化了的原因。
那么什么时候建议大家使用双括号语法呢?
如果你只是要创建并初始化一个实例而不是创建一个新类,或者创建任何不添加字段属性或重载方法的匿名类时,用双括号语法就很nice了。
3. 如果你用的是集合类且该类有构造器参数接受另一个集合生成该集合的实例,那么有个更好的更惯用的替代方法,如大家都知道的List初始化可以用Arrays.asList(),如下:
List<String> myList =
new
ArrayList<String>(Arrays.asList(
"One"
,
"Two"
,
"Three"
));
<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:\javaEvn\JDK6\jre\bin\javaw.exe
- java基础2013
- Java基础01:基础
- Java基础:基础加强
- Java基础-基础
- java基础的基础
- JAVA基础---基础常识
- Java基础:基础加强
- [Java 基础]基础语法
- Java基础
- java基础
- java 基础
- java基础
- Java基础
- Java基础
- Java基础
- JAVA基础
- JAVA基础
- JAVA基础
- URAL 1517 Freedom of Choice
- 【C实现简易内存数据库】2、数据结构设计(1) --未采用
- spark配置
- nyist-833-捡石子(博弈)
- 线程组和未处理的异常
- java基础2013
- 如何生成git的公钥和私钥
- 遍历表格中的input转化为json数据传到后台解析实现一些操作
- sl410k安装debian7.0无线网卡问题解决
- OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系
- CMake學習(一)——cmake的編譯、安裝及簡單使用(ubuntu)
- Slope One 协同过滤算法
- servlet(二)
- StringBuilder的toString方法