小编vas*_*ace的帖子

通过enum方式的Singleton是否是懒惰初始化?

这是一个非常广泛的枚举单例代码:

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并符合第三点.

如果我的理解错了,有人可以纠正我吗?

java singleton

24
推荐指数
2
解决办法
8548
查看次数

cvc-elt.1.a:找不到元素“ xxx”的声明

我必须为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)

xml xsd

5
推荐指数
1
解决办法
4万
查看次数

正则表达式获取正确的java类名

出于某种原因,我想扫描 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)

知道我的正则表达式吗?

java regex

4
推荐指数
1
解决办法
2002
查看次数

newCachedThreadPool 如何缓存线程

每个方法的注释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)

我想知道缓存在哪里以及它是如何工作的?因为我CollectionThreadPoolExecutor或者它的超类中没有看到任何可能的静态变量。

java multithreading executorservice java.util.concurrent

3
推荐指数
1
解决办法
1573
查看次数