我正盯着2001年的一些旧代码,并发现了这句话:
else {
do {
int c = XMLDocumentFragmentScannerImpl.this.scanContent();
if (c == 60) {
XMLDocumentFragmentScannerImpl.this.fEntityScanner.scanChar();
XMLDocumentFragmentScannerImpl.this.setScannerState(1);
break label913;
}
Run Code Online (Sandbox Code Playgroud)
我以前从未见过这个,并在这里发现了带标签的断点:
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
这基本上不起作用goto吗?使用它是否是好的做法?这让我感到不安.
我不是新手使用正则表达式,我理解他们所基于的基本理论 - 有限状态机.
我不太擅长算法分析,也不理解正则表达式与基本线性搜索的比较.我问,因为从表面上看,它似乎是一个线性阵列搜索.(如果正则表达式很简单.)
我在哪里可以了解有关实现正则表达式引擎的更多信息?
我正在阅读" 更好,更快,更轻的Java "(由Bruce Tate和Justin Gehtland撰写)并且熟悉敏捷类型团队的可读性要求,例如Robert Martin在其清晰的编码书中所讨论的内容.在我现在的团队中,我被告知明确不使用+运算符,因为它在运行时创建了额外的(和不必要的)字符串对象.
但是这篇文章,写于04年,讨论了对象分配是关于10个机器指令的.(基本上免费)
它还讨论了GC如何帮助降低此环境中的成本.
什么是使用之间的实际性能的权衡+,StringBuilder还是StringBuffer?(就我而言,它StringBuffer仅限于Java 1.4.2.)
StringBuffer对我来说导致丑陋,不太可读的代码,正如Tate的书中的几个例子所示.而且StringBuffer是线程同步的,这似乎有它自己的成本是大于中使用了"危险" +操作.
思想/意见?
我现在才意识到他们使用Constants类的功能和实用性......但是我很想知道它们是如何实现的.它们似乎很像静态方法或静态常量,因为您只需导入"拥有"枚举的文件,您可以使用它来引用它们enumName.valueName.Javadocs在网上似乎暗示他们是一个class但似乎很奇怪,根据需要有一个"未命名"的课程.(至少在Java中......)
在运行时,我正在获取类的方法名列表,我想调用这些方法.我理解如何从这里完成第一部分:http: //docs.codehaus.org/display/GROOVY/JN3535-Reflection
GroovyObject.methods.each{ println it.name }
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到的信息是如何在我抓住它的名字后再调用一个方法.
我想要的是到达这里:
GroovyObject.methods.each{ GroovyObject.invokeMethod( it.name, argList) }
Run Code Online (Sandbox Code Playgroud)
我似乎找不到正确的语法.上面似乎假设我已经重载了GroovyObject类的默认invokeMethod,这不是我想要的方向.
我知道我可以通过以下方式访问列属性:
select *
from sysobjects
Run Code Online (Sandbox Code Playgroud)
然而,我找不到的信息是关于从哪里获取列的类型和类型长度,即:in
FOO VARCHAR(80)
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到元数据表中类型声明的"VARCHAR(80)"部分?
我试着查看systypes表,但是它的xtype值与sysobjects表中的xtype值不匹配.
*我无权访问用于构建这些表的原始SQL,也没有任何管理员权限.
如果您熟悉DB2,我正在寻找等效的
select name,
coltype,
length,
from sysibm.syscolumns
where tbname = 'FOO'
Run Code Online (Sandbox Code Playgroud) 我正在看的代码是这样的:
for (i = 0; i < linesToFree; ++i ){
printf("Parsing line[%d]\n", i);
memset( &line, 0x00, 65 );
strcpy( line, lines[i] );
//get Number of words:
int numWords = 0;
tok = strtok(line , " \t");
while (tok != NULL) {
++numWords;
printf("Number of words is: %d\n", numWords);
println(tok);
tok = strtok(NULL, " \t");
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题围绕着使用numWords.运行时系统是否重用此变量,或者int每次运行for循环时是否分配新变量?如果你想知道我为什么这么问,我是一个Java程序员,他想进入HPC,因此我想学习C.通常我知道你想避免像这样的代码,所以这个问题确实是探索性的.
我知道答案可能依赖于编译器......我正在寻找一个更深层次的解释.假设您选择的编译器.
显然,在某些时候,对象被创建并销毁/返回池.我对这些垃圾收集方式特别感兴趣.有没有办法控制这种行为?具体来说,是否会调用invalidate()标记这些对象进行收集?他们何时释放存储在其中的任何参考?
越详细越好.
我知道在String创建a时的编译时,该String将是该特定签名的任何对象使用的字符串.
String s = "foo"; < - 任何其他相同的字符串将只是对此对象的引用.
这适用于在运行时方法期间创建的字符串吗?我有一些代码,其中一个对象包含一段字符串数据.原始代码就像
for(datum :data){
String a = datum.getD(); //getD is not doing anything but returning a field
StringBuffer toAppend = new StringBuffer(a).append(stuff).toString();
someData = someObject.getMethod(a);
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
由于String已经创建了data,所以最好只调用datum.getD()而不是在循环的每次迭代中创建一个字符串.
除非有什么我想念的?
完整上下文:我正在尝试使用grails应用程序处理多个文件.我将显示的代码来自后处理页面,它提供有关已处理文件的信息.
我最初的感觉是使用这样的代码:
<table>
<tr>
<th>Parsed from Excel:</th>
<th>Uploaded to DS:</th>
<th>File Name:</th>
<th>Size:</th>
</tr>
<tr>
<g:each in="${fileContents}" var="item">
<td>${item}</td>
</g:each>
<%--
<td>${fileContents.ExcelRows?.encodeAsHTML()}</td>
<td>${fileContents.policies?.encodeAsHTML()}</td>
<td>${fileContents.originalFileName?.encodeAsHTML()}</td>
<td>${fileContents.Size?.encodeAsHTML()}</td>
--%>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
现在,我不明白为什么<g:each循环中显示的内容总是报告,key=value例如ExcelRows=14我在一个输出案例中收到的内容.
当我切换注释(注意使用的<%--标签)时,它完全按预期工作.从我的" ExcelRows"栏目中,我得到的只是"14".我认为<g:each循环应该做同样的事情有什么问题?直观地说,它归结为For each item in fileContents
display item.
我的控制器代码:
def processFile = {
def uploadedFile = request.getFile('excelFile')
Run Code Online (Sandbox Code Playgroud)
//...snipped
def fileContents = [
ExcelRows:"${ods.numberOfRows}",
policies:"${ods.numberOfPolicies}",
originalFileName: "${ods.originalFilename}",
Size:"${ods.size}"
]
[fileContents:fileContents]
}
Run Code Online (Sandbox Code Playgroud)