这是一个非常广泛的枚举单例代码:
public enum enumClazz{
INSTANCE
enumClazz(){
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
和一堆地方说这是一个懒惰的初始化.但在阅读" Java虚拟机内部"第7章- 类型的生命周期后,我感到困惑:
Java虚拟机规范为类和接口加载和链接的时序提供了实现的灵活性,但严格定义了初始化的时间.所有实现必须在其第一次活动使用时初始化每个类或接口.以下六种情况符合有效用途:
- 创建一个类的新实例(在字节码中,执行新指令.或者,通过隐式创建,反射,克隆或反序列化.)
- 调用由类声明的静态方法(在字节码中,执行invokestatic指令)
- 使用或赋值由类或接口声明的静态字段,除了最终的静态字段并由编译时常量表达式初始化(在字节码中,执行getstatic或putstatic指令)
- 在Java API中调用某些反射方法,例如Class类中的方法或java.lang.reflect包中的类
- 初始化类的子类(类的初始化需要事先初始化其超类.)
- 在Java虚拟机启动时将类指定为初始类(使用main()<方法)
粗体风格的第三点澄清了如果字段是static final,则字段的初始化发生在编译时.同样,INSTANCEin enumClazz隐含地等于public static final并符合第三点.
如果我的理解错了,有人可以纠正我吗?
我必须为xsd手写一个示例xml,但总是收到无效消息:cvc-elt.1.a:找不到元素'RS_WMS_GET_PO_DATA_v2.0'的声明。
我的XSD:
<?xml version="1.0" encoding="utf-16"?>
<schema xmlns:ns0="http://www.rossinc.com/" xmlns:msbtsdml="http://schemas.rossinc.com/BizTalk" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.rossinc.com/" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
<appinfo>
<msbtsdml:StoredProcedureName xmlns:msbtsdml="http://schemas.rossinc.com/BizTalk/DMLAdapter">RS_WMS_GET_PO_DATA</msbtsdml:StoredProcedureName>
<msbtsdml:ResponseRootName xmlns:msbtsdml="http://schemas.rossinc.com/BizTalk/DMLAdapter">poData</msbtsdml:ResponseRootName>
</appinfo>
</annotation>
<element name="RS_WMS_GET_PO_DATA_v2.0">
<complexType>
<sequence>
<element minOccurs="1" maxOccurs="1" name="Parameters">
<complexType>
<sequence>
<element default="0" name="ERROR_OCCURRED" type="string">
<annotation>
<appinfo>
<msbtsdml:ParamDir xmlns:msbtsdml="http://schemas.microsoft.com/BizTalk/2003">In</msbtsdml:ParamDir>
</appinfo>
</annotation>
</element>
<element default="1" name="XML_TAGS" type="int">
<annotation>
<appinfo>
<msbtsdml:ParamDir xmlns:msbtsdml="http://schemas.microsoft.com/BizTalk/2003">In</msbtsdml:ParamDir>
</appinfo>
</annotation>
</element>
<element default="0" name="NUM_ROWS" type="int">
<annotation>
<appinfo>
<msbtsdml:ParamDir xmlns:msbtsdml="http://schemas.microsoft.com/BizTalk/2003">In</msbtsdml:ParamDir>
</appinfo>
</annotation>
</element>
</sequence>
</complexType>
</element>
<element name="RS_WMS_GET_PO_DATA">
<complexType>
<all minOccurs="1" maxOccurs="1">
<element name="COMPANY_CODE" type="string" />
<element name="DIVISION" …Run Code Online (Sandbox Code Playgroud) 出于某种原因,我想扫描 java 文件的内容(例如 TagMatchingInterface.java)并通过正则表达式获取类名(TagMatchingInterface),但我的正则表达式匹配不正确的类名,因为有一些关键字(类/接口/枚举)隐藏在评论中:
/**
*
* @author XXXX
* Introduction: A common interface that judges all kinds of algorithm tags.
* some other comment
*/
public class TagMatchingInterface
{
// content
public class InnerClazz{
// content
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的模式:
public Pattern CLASS_PATTERN = Pattern.compile("(?:public\\s)?(?:.*\\s)?(class|interface|enum)\\s+([$_a-zA-Z][$_a-zA-Z0-9]*)");
....
Matcher matcher = CLASS_PATTERN.matcher(content);
if (matcher.find()) {
System.out.println(match.group(2));
}
Run Code Online (Sandbox Code Playgroud)
知道我的正则表达式吗?
每个方法的注释public static ExecutorService newCachedThreadPool()中的Executor类:
Threads that have not been used for sixty seconds are terminated and
removed from the **cache**.
Run Code Online (Sandbox Code Playgroud)
我想知道缓存在哪里以及它是如何工作的?因为我Collection在ThreadPoolExecutor或者它的超类中没有看到任何可能的静态变量。