似乎有两种不同的JSR用于注释.
JSR-305:软件缺陷检测的注释 (附加资源)
JSR-308:Java类型的注释 (附加资源)
两者似乎都面向静态代码分析.
你知道吗:
我正在使用Java 1.7,Eclipse 3.7和市场上的FindBugs插件.这个例子和天堂一样好:
class Application
{
public static void main( String[] args )
{
System.out.println( "Bla" );
}
}
Run Code Online (Sandbox Code Playgroud)
此消息在过去不存在,内部实现始终在系统中:
public final static PrintStream out = null;
Run Code Online (Sandbox Code Playgroud)
所以Findbugs是对的,但现在消息发生了什么改变?
我知道Oracle Java SE包含不属于OpenJDK的闭源扩展和工具,但是Oracle Java SE JVM与OpenJDK JVM相同,或者Oracle在将其作为Java SE JVM发布之前是否对OpenJDK JVM进行了更改?
更新1: 我从JDK7更新项目中找到了一些信息:http://openjdk.java.net/projects/jdk7u/qanda.html
7 Update Project是否会收到Oracle的安全修复程序?
是.
与OpenJDK 6一样,安全修复程序首先保密,并在被推送到公共森林之前应用于私有森林,作为影响JDK发布列车的修复程序的一般同步发布的一部分.此外,他们不会通过公共代码审查和回拨审批流程,他们在项目问题跟踪器中的相应问题将不会公开显示.
我Files.WalkFileTree()用来导航文件夹和计算音频文件,但遇到tar文件时出现问题,它似乎将它视为一个实际的文件夹我期望它只是跳过它.
我看不到任何让我控制这种行为的选项
码:
package com.jthink.songkong.fileloader;
import com.jthink.songkong.cmdline.SongKong;
import com.jthink.songkong.ui.MainWindow;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.concurrent.Callable;
import java.util.logging.Level;
/**
* Count the number of files that can be loaded, for information purposes only
*/
public class CountFilesinFolder implements Callable<Boolean> {
public static class CountFiles
extends SimpleFileVisitor<Path> {
private int fileCount = 0;
private final PathMatcher matcher;
CountFiles(String pattern) {
matcher =
FileSystems.getDefault()
.getPathMatcher("regex:" + pattern);
}
/**
* Find Music file
*
* @param file
* @param attr
* …Run Code Online (Sandbox Code Playgroud) 在任何地方都有Java 7的二进制版本(使用Mac/BSD端口项目)吗?一些博客(例如,在Mac OS X上构建Java 7)有详细的说明从源代码构建jdk,但我希望有人可以下载它的二进制文件.
这些说明的问题在于让所有版本号都正确是非常烦人的,而轻微的变化可能会导致浪费时间.
下面是一些使用Java 6编译但不能在Java 7中编译的代码的简单示例.
public class Test<T extends Test> {
private final int _myVar;
public Test(int myVar) {
_myVar = myVar;
}
public int get(TestContainer<T> container){
T t = container.get();
return t._myVar;
}
private static class TestContainer<T extends Test> {
private final T _test;
private TestContainer(T test) {
_test = test;
}
public T get(){
return _test;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Java 7中,它无法在get(TestContainer<T> container)方法中编译,错误如下:
错误:_myVar在Test中具有私有访问权限
我不明白为什么这不再编译 - 在我看来它应该.变量t是类型T,必须扩展Test.它试图从类中访问_myVar实例的字段.TestTest
实际上,如果我将方法更改为get(TestContainer<T> …
我在Java 6中有一个正确编译的接口:
public interface IMultiMap<K, V> extends Map<K, Set<V>> {
public int valueSize();
public boolean put(K key, V value);
public void clear(Object key);
public boolean isEmpty(Object key);
}
Run Code Online (Sandbox Code Playgroud)
但在Java 7中,此接口无法编译.我得到一个编译错误boolean put(K, V),它具有相同的擦除V put(K, V).编译器的完整错误:
error: name clash: put(K#1,V#1) in IMultiMap and put(K#2,V#2) in Map have the same erasure, yet neither overrides the other
public boolean put(K key, V value);
where K#1,V#1,K#2,V#2 are type-variables:
K#1 extends Object declared in interface IMultiMap
V#1 extends Object declared in interface …Run Code Online (Sandbox Code Playgroud) 我一直在用Java构建开发环境(作为一个小型研究项目).作为其中的一部分,我构建了一个自定义文本组件,使用Graphics2d绘制文本本身,如下所示:
g2.drawString("some text", 100, 100);
Run Code Online (Sandbox Code Playgroud)
使用1.6(我假设这是由Apple提供),所有东西都在Eclipse中很好地开发,直到我打包并运行java 1.7(由Oracle提供).显然在开发环境中字体非常重要,所以我很不高兴看到1.7中的结果.
我尝试过包装自定义字体,但它们都显得粗糙和腐蚀.上面的比较并不算太差,但有些字体(如摩纳哥)看起来很糟糕.
我猜这与Apple如何将事物挂钩到Quartz有关.但有没有办法改善事物,所以它在其他系统上看起来并不可怕?有没有人有这个策略?
更新:这是摩纳哥的比较:

以及摩纳哥C(在paintComponent中)的缩放比较(左边是1.7,右边是1.6).请注意,我正在使用以下方法从本地ttf文件加载字体:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("monaco.ttf");
Font customFont = null;
try
{
customFont = Font.createFont(Font.TRUETYPE_FONT, is);
customFont = customFont.deriveFont(16.0f).deriveFont(Font.BOLD);
is.close();
ge.registerFont(customFont);
} catch (FontFormatException e1)
{
e1.printStackTrace();
} catch (IOException e1)
{
e1.printStackTrace();
}
this.setFont(customFont);
Run Code Online (Sandbox Code Playgroud)

另请注意,使用以下命令打开抗锯齿:
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Run Code Online (Sandbox Code Playgroud) 我正在将Spring 3.1.2批处理应用程序迁移jdk1.7.0_25到jdk1.7.0_40x64和Oracle.
使用Sun OperatingSystemMXBean.getProcessCpuTime()作为性能指标,结果显示性能下降2.5倍(即,我在u25上运行的应用程序要快得多).
java.util.HashMap和java.util.ArrayList 更改,因为当使用u25的HashMap和ArrayList类引导u40时结果是相同的,并且这些更改对于这种差异来说太小了.-Xbatch并-Xcomp产生相同的结果(假设这些JDK之间的服务器编译是相同的).java.lang.invoke.MethodHandles但似乎无关.除非Spring 3.1.2使用它们 - 我找不到它的证据.javac 编译似乎也没有改变.一些一般性说明:
jdk1.8.0)都会出现此问题,而版本<u40似乎很好(包括各种版本的JDK 6).+UseSerialGC用于测试).jdk1.7.0_40.任何提示或想法?
编辑添加:应用程序的结构是一个外部循环,运行金融蒙特卡罗模拟:即大量的日期,计算等.因此,它目前有点复杂,我同意,不适合找到问题.我将不得不尝试将其缩小.
我正在解决一些Java难题,并偶然发现了这个:
public class Outer {
class Inner1 extends Outer {}
class Inner2 extends Inner1 {}
}
Run Code Online (Sandbox Code Playgroud)
在编译此代码的同时,javac 1.6.0_45我正如预期的那样得到此错误:
Outer.java:8: cannot reference this before supertype constructor has been called
class Inner2 extends Inner1 {}
^
Run Code Online (Sandbox Code Playgroud)
这是因为编译器为Inner2具有类似代码的类生成默认构造函数,这解释了上面的错误:
Inner2 () {
this.super();
}
Run Code Online (Sandbox Code Playgroud)
现在很明显,因为你真的不能在Java 1.6.0_45,JLS 8.8.7.1中做到这一点(我可以猜到):
构造函数体中的显式构造函数调用语句可能不引用此类或任何超类中声明的任何实例变量或实例方法,或者在任何表达式中使用this或super; 否则,发生编译时错误.
请参阅(奇怪情况下接受的答案,"在调用超类型构造函数之前无法引用此内容")
但是,如果我尝试用javac 1.7.0_79它编译它- 它没关系!
这就是问题 - 在Java 1.7中已经改变了什么,这个代码现在是正确的?
提前致谢!