JAVA中使用双括号来初始化静态常量的小技巧_java

这貌似是个不为人知的语言技巧。我看到一般人写Java里初始化静态常量都是

复制代码 代码如下:

public static final Map<String, String> DATA = new TreeMap<String, String>();

static
{

DATA.put("a", "A");

//blah blah blah
}

使用所在类的static块来初始化DATA,其实还有另外一种写法:

复制代码 代码如下:

public static final Map<String, String> DATA = new TreeMap<String, String>()
{{

this.put("a", "A");

//blah blah blah

}};

这实际上是利用了匿名类的特性,内层的{是用来作匿名子类的构造函数,所以可以直接插入初始化代码,这个小语言技巧不常见,但是比较实用。

时间: 2024-10-15 07:12:07

JAVA中使用双括号来初始化静态常量的小技巧_java的相关文章

java中为什么静态方法里面必须打印静态变量,

问题描述 java中为什么静态方法里面必须打印静态变量, java中为什么静态方法里面必须打印静态变量, 静态方法为什么无法打印普通变量 解决方案 那说明你还是没弄清楚静态和非静态的创建时机,变量有类变量和实例变量,也就是静态变量和非静态变量,类加载的时候就加载类变量也可以说是类自己的变量,而实例变量只有在实例化的时候才被创建,所以在调用静态方法的时候还没有创建实例变量,你怎么能调用实例变量呢 解决方案二: 每个实例变量都有实例成员: class A { public int i; static

java中为什么只进行一个初始化就会执行类中的函数

问题描述 java中为什么只进行一个初始化就会执行类中的函数 import java.awt.*;import javax.swing.*;import java.awt.event.*;public class E2 extends Frame{ class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) {System.exit(0); } } E2() { super(""

JAVA中byte 、short为什么能赋常量的值,却不能赋变量的值

问题描述 JAVA中byte .short为什么能赋常量的值,却不能赋变量的值 byte b1= 1; byte b2 =2; byte b3 =b1+b2; 这种编译为什么会报错,求指导? 解决方案 道理很简单,两个byte相加的结果byte未必能装下.比如byte b1 = 129; byte b2 = 129; 你说 byte b = b1 + b2 = ? 解决方案二: b1和b2相加的结果值默认是int类型的,改为这样就正确了;byte b3 = (byte)(b1+b2); 解决方案

Win10 UWP开发中的重复性静态UI绘制小技巧 2

原文:Win10 UWP开发中的重复性静态UI绘制小技巧 2 小技巧1 地址:http://www.cnblogs.com/ms-uap/p/4641419.html 介绍 我们在上一篇博文中展示了通过Shape.Stroke族属性实现静态重复性UI绘制,使得UWP界面的实现变得稍微灵活一些了. 但这一技巧还是有不少局限的,毕竟折腾StrokeDashArray属性看上去并不是那么直观和适用(还存在用扇形欺骗观众这样的"问题"啦). 这一篇博文我们将为大家介绍一种更为适用,同时也更为灵

Win10 UWP开发中的重复性静态UI绘制小技巧 1

原文:Win10 UWP开发中的重复性静态UI绘制小技巧 1 介绍 在Windows 10 UWP界面实现的过程中,有时会遇到一些重复性的.静态的界面设计.比如:画许多等距的线条,画一圈时钟型的刻度线,同特别的策略排布元素,等等. 读者可能觉得这些需求十分简单,马上就想到了通过for循环之类来实现.只需要在Loaded事件里添上这些元素就好了. 但这样可能存在一些问题--如果这些UI元素只是静态的,是装饰性的--虽然code-behind不用白不用,但为了这些纯静态元素将代码逻辑变得臃肿似乎略有

C#中使用反射遍历一个对象属性及值的小技巧

  这篇文章主要介绍了C#中使用反射遍历一个对象属性及值的小技巧,这在很时候应该都非常有用,本文直接给出实例代码,需要的朋友可以参考下 总结: 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): 代码如下: Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach (PropertyInfo pi in t.GetProperti

谈谈Java中整数类型(short int long)的存储方式_java

在java中的整数类型有四种,分别是 byte  short int long 其中byte只有一个字节 0或1,在此不详细讲解. 其他的三种类型如下: 1. 基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此方) 最大值:Short.MAX_VALUE=32767 (2的15次方-1) 2. 基本类型:int 二进制位数:32 包装类:java.lang.Integer 最小值:Integer.M

Java中实现文件上传下载的三种解决方案(推荐)_java

java文件上传与文件下载是程序开发中比较常见的功能,下面通过本文给大家介绍Java中实现文件上传下载的三种解决方案,具体详情如下所示: 第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream(

在Java中使用下划线分隔数的字面值的用法讲解_java

在Java SE 7中新增了以二进制形式的字面值表示方式,你可以像使用十进制一样,方便地使用二进制形式的字面值来表示数值. 例如: // 一个8位的byte值: byte aByte = 0b100001; // 一个16位的short值: short aShort = 0b1010010100101; // 一个32位的int值: int anInt1 = 0b101000010100010110100101000101; // 一个64位的long值(注意末尾的后缀「L」) long aLo