我从事Java已有很长时间了,但是从未遇到过这样的事情。我想知道它的作用以及为什么它不是错误。
public class Foo{
private int someVariable;
{
doSomething();
}
public Foo(){
}
private void doSomething(){
// Something is done here
}
}
我想知道单个块的目的是什么,其中包含对“
doSomething()”的调用。它只是一个基本代码。我遇到的实际代码位于http://www.peterfranza.com/2010/07/15/gwt-
scrollpanel-for-touch-screens/
这是一个(非静态)初始化程序块。它在官方教程中记录在这里:
初始化实例成员
通常,您需要将代码放在构造函数中以初始化实例变量。使用构造函数初始化实例变量有两种选择:初始化块和final方法。实例变量的初始化块看起来像静态初始化块,但没有static关键字:
{ // whatever code is needed for initialization goes here }
Java编译器将初始化程序块复制到每个构造函数中。因此,该方法可用于在多个构造函数之间共享代码块。
这是一个简单的演示:
public class Test {
{
System.out.println("Initializer block");
}
Test() {
System.out.println("Constructor 1");
}
Test(int i) {
System.out.println("Constructor 2");
}
public static void main(String[] args) {
new Test();
System.out.println("---");
new Test(1);
}
}
输出 :
Initializer block
Constructor 1
---
Initializer block
Constructor 2
例如,JLabel
在面板中添加时,您可能会发现这很有用:
panel.add(new JLabel() {{ setBackground(Color.GREEN); setText("Hello"); }});
在引擎盖下:
初始化程序块的字节码从字面上复制到每个构造函数中。(至少由Suns javac和eclipse编译器:
Test();
Code:
0: aload_0
1: invokespecial
4: getstatic #2;
7: ldc #3; //String "Initializer block"
9: invokevirtual #4; //Method PrintStream.println:(String;)V
12: getstatic #2;
15: ldc #5;
17: invokevirtual #4;
20: return
Test(int);
Code:
0: aload_0
1: invokespecial #1;
4: getstatic #2;
7: ldc #3; //String "Initializer block"
9: invokevirtual #4; //Method PrintStream.println:(String;)V
12: getstatic #2;
15: ldc #6;
17: invokevirtual #4;
20: return
为应用程序定义的范围是:API权限 我正在使用客户端凭据流生成令牌: 下面是我发布的获取访问令牌的请求。
问题内容: 在我的字节码检测项目中,我经常迷失在VerifyErrors上。但是,默认的Java Verifier很少提供有关导致错误的指令的信息(它仅提供方法和一条小消息)。是否有任何独立的字节码验证程序在定位错误(至少是精确的指令位置)方面提供了更高级的帮助?谢谢。 问题答案: 与任何涉及JVM字节码的项目一样,我将首先检查BCEL是否具有对您有用的任何东西。另外,也许FindBugs可能会有
问题内容: 我有一些通过 Runtime.getRuntime.exec(String) 运行命令的代码,它可以在Windows上运行。当我将代码移至Linux时,它崩溃了,并且解决该问题的唯一方法是切换到 exec(String []) 版本。如果我这样处理,代码在Windows和Linux上是否可以相同,还是应该在Windows上使用exec(String)而在Linux上使用exec(Str
问题内容: 我对了解Java的高质量独立源代码格式器的可用选择感兴趣。 该格式必须是独立的,也就是说,它必须支持“批量”模式是从任何特定的开发环境脱钩。理想情况下,它也应独立于任何特定的操作系统。因此,这里对IDE du jour的内置格式化程序没有什么兴趣(除非IDE支持批处理模式格式化程序调用,也许是从命令行启动)。用封闭源C / C ++编写的仅在Windows上运行的格式化程序不是理想的,
创建验证 任何时候,都可以直接使用think\Validate类而不需要定义验证器类进行独立的验证操作,例如: $validate = Validate::make([ 'name' => 'require|max:25', 'email' => 'email' ]); $data = [ 'name' => 'thinkphp', 'email' => 't
用数组和for循环 有溪流 一般来说,我知道ArrayList有开销,这可能导致数组的最小大小在看到增益之前。此外,如果有更好的方法来执行流操作或迭代。不确定forEach在这种情况下是否有效,因为它是一个终端操作,我需要按照array/arrayList的原始顺序捕获结果。