Java Servlet if语句不需要{}括号?

时间:2013-06-21 02:53:21

标签: java jsp servlets

我是初学者,通过Murach的Java Servlet和JSP阅读......通过示例。有点卡在这个Ch11简单购物车的例子。
我会在这里发布整个代码,但它真的很长。

我已将完整代码放在我的保管箱链接上:https://dl.dropboxusercontent.com/u/36625850/Ch11-JSTL.rar

问题:

  1. CartServlet.java

    if(quantity > 0)
        cart.addItem(lineItem);
    else if(quantity == 0)
        cart.removeItem(lineItem);
    
        session.setAttribute("cart", cart);
        String url = "/cart.jsp";
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
    
        dispatcher.forward(request, response);
    

    这可能是一个愚蠢的问题。我注意到servlet If语句你不需要{}?为什么是这样?我的意思是普通的java if语句都需要{}所以为什么servlet会有所不同?

  2. cart.java

    public void addItem(LineItem item)
    {
    String code = item.getProduct().getCode();
    int quantity = item.getQuantity();
    for (int i = 0; i < items.size(); i++)
    {
        LineItem lineItem = items.get(i);
        if (lineItem.getProduct().getCode().equals(code))
        {
            lineItem.setQuantity(quantity);
            return;
        }
    }
    items.add(item);
    }
    
  3. 我不能遵循的是item.getProduct().getCode();。我不确定这会输出什么。

6 个答案:

答案 0 :(得分:2)

if-else子句(以及所有其他控制结构)在java中按块读取。

所以,如果你把

if(x>2)
System.out.println("a");  ==> this is the next block
System.out.println("b");

if(x<2)
{        ==> this is the next block
System.out.println("a");
System.out.println("b");
}

如果x == 1,

,则测试上面的代码
in first if statement 
prints --> "b"
in second if statement
prints --> "a"
           "b"

另一个例子

if(x>2)
 for(int i=0;i<100;i++)  --> next block of if
       for(int j=0;j<200;j++){  --> next block of first for
           if(x>0)
             Sysout("a");  --> next block of if
            else
             Sysout("b"); --> next block of else
       }

在Java中,建议始终使用大括号。

关于你的第二个问题

item.getProduct().getCode();

项目是LineItem对象。

你的班级肯定是

public class LineItem{

private Product product;

public Product getProduct(){
return product;
}


}

产品类

public class Product{

private String code;

public String getCode(){
 return code;
}

}

答案 1 :(得分:1)

1)Servlet也是java代码,适用于核心java的规则也适用于Servlet。 {}用于将多个语句组合成单个块。 离。

if(condition)
  statement 1;
  statement 2;

在上面的示例中,只有当条件求值为true时,才会执行statement1。语句2不会成为if语句的一部分,因此它将作为普通语句执行。

if(condition)
{
  statement 1;
  statement 2;
}

现在在上面的示例中,因为您在{}中包含了statement1和statement 2,整个块将成为if的一部分,并且只有if(condition)求值为true时才会执行这两个语句。< / p>

2)if (lineItem.getProduct().getCode().equals(code)

在上面的语句lineItem.getProduct()中返回product个对象。 因此lineItem.getProduct()变为product.getCode().equals(code)。现在product.getCode()返回代码对象。所以product.getCode().equals(code)变为code.equals(code)如果两者相等,则if计算为真。

答案 2 :(得分:0)

  1. 如果您不使用任何{} in,它将执行后面的第一个语句。如果您使用{},它将使用{}
  2. 来演示所有语句

    例如

    condition是真的

    if(condition)
       sttmnt1;   // it will execute this only
    sttmnt2; // this is out of if block
    

    并且在以下情况下将执行sttmnt

    if(condition){
       sttmnt1; 
       sttmnt2; 
    }
    

    所以在你的例子中

    if(quantity > 0)
        cart.addItem(lineItem);
    else if(quantity == 0)
        cart.removeItem(lineItem);
    

    在if和else if条件下只有一个语句。所以没有必要使用{}

    1. 要知道item.getProduct().getCode();将返回什么,请检查LineItem类的getProduct方法中返回的类对象。在返回的objec&lt; tt类类型中,检查磨损是getCode()
    2. 的返回类型

答案 3 :(得分:0)

  1. Servlet Java代码只是常规的Java代码。没有括号的if在常规Java中的工作方式相同。

  2. 您的LineItem类有一个方法getProduct,其返回值是一个具有getCode方法的对象。此代码段的作用是将getProduct().getCode()中所有条目的items值与给定项目的值进行比较。如果它们中的任何一个匹配,则该函数会中断并返回。简而言之,此方法可确保getProduct().getCode()集合中只有items的不同值。

答案 4 :(得分:0)

您需要了解的是{}使多个语句显示为一个块。

类似语句分组。

所以当你只有一个陈述时,你真的不需要{}但是当你有多个陈述时,{}是有用的。

然而,我甚至对一行语句一直使用括号,因为对我来说它看起来很漂亮: - )

答案 5 :(得分:0)

如果所有人的陈述相同。
没有单独的(Java Servlet if语句)。

如果只有一个语句要执行(当[if,else if,else,while,for])满足时,我们不需要使用{}(但不推荐,会出现可读性问题)

前:

  if(condition){ 
   System.out.println("hai"); // here only one statement is there to execute
   }

相同
    if(condition) 
   System.out.println("hai"); 

类似地

   int i=1;
  while(i++!=10){
  System.out.println("hai"); 
     }

相同
       int i=1;
  while(i++!=10)
  System.out.println("hai"); 

在Java中,只有switch语句需要{},即使它有单个case语句