以下程序本身并不重要。它只使用类Counter内部的静态字段,通过使用for循环来计算创建的对象数,如下所示。
package temp;
final class Counter
{
private static int cnt;
public Counter()
{
cnt++;
}
public static int show()
{
return(cnt);
}
}
final public class Main
{
public static void main(String[] args)
{
for (int i=0;i<50;i++)
{
Counter counter=new Counter();
}
/*for (int i=0;i<50;i++)
Counter counter=new Counter();*/
System.out.print("\nNumber of objects constructed:->"+Counter.show()+"\n\n");
}
}
唯一的问题是,注释的for循环的含义与上述for循环的含义相同(同一事实也适用于while循环)根本不起作用,从而导致指示“ 不是语句 ”
的编译时错误。意味着在这种特殊情况下,即使for循环仅包含一个语句,一对括号也是必须的!为什么?
要了解为什么会发生这种情况,您必须查看语言规范中Java的Blocks和Statements语法。
ForStatement定义为:
ForStatement:
for ( ForInitopt ; Expressionopt ; ForUpdateopt )
Statement
声明定义为:
Statement:
StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatement
StatementWithoutTrailingSubstatement:
Block
EmptyStatement
ExpressionStatement
SwitchStatement
DoStatement
BreakStatement
ContinueStatement
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
然后,查看Block:
Block:
{ BlockStatementsopt }
BlockStatements:
BlockStatement
BlockStatements BlockStatement
BlockStatement:
LocalVariableDeclarationStatement
ClassDeclaration
Statement
您会注意到,在此规范内,LocalVariableDeclarationStatement无效,除非它在一个块中。但是,由于ForStatement要求在其后加上一条语句,因此必须存在括号才能使表达式有效。这样,在没有括号的情况下,任何局部变量声明在循环中都是无效的。
问题内容: 我想知道为什么允许它具有不同类型的对象引用?例如; 您能否举一个使用不同类型的对象引用有用的示例? 编辑: 问题答案: 这是多态性和抽象的核心。例如,这意味着我可以写: …并处理 任何 类型的输入流,无论是来自文件,网络,内存中的输入流。还是同样地,如果您有一个,则可以不考虑其实现而要求其元素0。 将子类的实例视为超类的实例的能力称为Liskov的替代原理。它允许松散耦合和代码重用。
来自JDBC规范 关闭语句对象将关闭该语句对象生成的任何ResultSet实例并使其无效。在垃圾收集再次运行之前,ResultSet对象持有的资源可能不会被释放,因此当不再需要ResultSet对象时,显式关闭它们是一种很好的做法。 > 调用ResultSet.close()是否立即释放ResultSet对象? 调用Statement.close()是否立即释放语句对象? 调用语句。close()
我一直在使用JavaScript代码进行自动GUI测试。我一直在进行全面的测试,并优化了一些代码。例如,我有一个函数可以将值输入到窗口的所有字段中,该窗口大致如下所示: 最初输入函数看起来是这样的:这是相当笨拙的,占用了很多空间,不如编辑函数以接受一个将字段作为属性值的对象那样整洁。现在函数看起来像这样:其中是这样定义的: 在我进入测试一个特殊需求的部分之前,这一直工作得很好,该需求说明当您在窗口
我对编程有点陌生,我被卡住了。假设我在一个项目中有五个不同的类:foo1、foo2、foo3、foo4和foo5,它们都做不同但相似的事情。现在假设我需要为每个对象创建一个新对象,比如:foo1 bar1=new foo1();foo2 bar2=新的foo2();foo3 bar3=新的foo3();等等当然这是可行的,但如果我能在一个for循环中实例化我需要的所有对象,或者至少把我想要创建的所
问题内容: 我正在尝试使用pyodbc创建一个SQL Server数据库。 失败并显示此错误 多语句事务中不允许使用CREATE DATABASE语句 它失败,因为该方法启动了事务,并且无法在事务内运行。 那么还有其他方法可以使用python执行命令吗? 问题答案: 建立连接时,pyodbc的默认设置符合Python的DB- API规范。因此,当执行第一个SQL语句时,ODBC将开始有效的数据库事
循环结构能够让程序员以最少的精力去完成大量重复的工作,它可以让计算机根据条件做循环计算,当条件成立时继续循环,当条件不成立时结束循环。 依据前面所学的知识,如果我们想在屏幕上依次打印1到5,可以编写以下程序: 案例演示 预览 复制 复制成功! // PrintNums.java class PrintNums { public static void main(String[] args)