调试记录:The public type <<classname>> must be defined in its own file

This question already has an answer here:

I have written the following code:

package staticshow;


public class StaticDemo {
  static int a = 3;
  static int b = 4;

  static {
    System.out.println("Voila! Static block put into action");
  }

  static void show() {
    System.out.println("a= " + a);
    System.out.println("b= " + b);
  }
}

public class StaticDemoShow {
  public static void main() {
    StaticDemo.show(); 
  }
}

I am getting the error message:

The public type StaticDemo must be defined in its own file

error in the very first line public class StaticDemo {. Why is it happening and how can I resolve it? Note that my project name is StaticDemoShow, package name is staticshow and class names are as given in the code.

EDIT- After making just one class public or both the classes default, I am getting the error "Selection does not contain a main type". Now what should I do?

share improve this question

marked as duplicate by HolgerDennis MengRaedwaldDavid LJarrod Roberson Nov 6 '13 at 22:32

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

 
  
Is your class file named StaticDemo? –  Vaughan Hilts  Nov 6 '13 at 14:30 
  
@VaughanHilts, No. My project name is "StaticDemoShow". –  Mistu4u  Nov 6 '13 at 14:34
2 
No need to downvote IMHO. Every beginner will stumble across this. @VaughanHilts It seems both are in the same file. –  Axel  Nov 6 '13 at 14:34
  
duplicate of Java compiler error: "public type .. must be defined in its own file" and Public class must be defined in its own file and a lot more I guess… –  Holger  Nov 6 '13 at 19:14 
  
just in case you need to rightfully have mulitple types in one file, you may get here and look for another answer and motivation provided here: stackoverflow.com/questions/32012525/… –  Andreas Dietrich  Aug 14 '15 at 14:33 

8 Answers

up vote 15 down vote accepted

We cant have two public classes in one file. The JVM cannot understand, in one file we must write one public class only.

public class StaticDemo {

    static int a = 3;
    static int b = 4;

    static {
        System.out.println("Voila! Static block put into action");
    }

    static void show() {
        System.out.println("a= " + a);
        System.out.println("b= " + b);
    }

}
 class StaticDemoShow {
    public static void main() {
        StaticDemo.show();
    }

}
share improve this answer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> 是 JSP (JavaServer Pages) 中的三个标签,用于管理 JavaBeans。 1. <jsp:useBean> 标签:该标签用于定义一个 JavaBean 并为其创建一个实例。它的语法如下: ``` <jsp:useBean id="bean_name" class="fully_qualified_classname" scope="page|request|session|application"/> ``` 其中: - id:为 JavaBean 实例分配的名称。 - class:JavaBean 的完全限定名。 - scope:JavaBean 实例的生命周期,可以是 page、request、session 或 application。 执行过程:当 JSP 页面第一次请求时,该标签创建一个 JavaBean 的实例,并将其存储在指定的作用域中。如果该实例已经存在,则不会重新创建。 2. <jsp:setProperty> 标签:该标签用于向 JavaBean 实例设置属性值。它的语法如下: ``` <jsp:setProperty name="bean_name" property="property_name" value="property_value"/> ``` 其中: - name:JavaBean 实例的名称。 - property:要设置的属性名。 - value:要设置的属性值。 执行过程:该标签找到指定的 JavaBean 实例,并将指定的属性设置为指定的值。 3. <jsp:getProperty> 标签:该标签用于获取 JavaBean 实例的属性值并显示在 JSP 页面上。它的语法如下: ``` <jsp:getProperty ### 回答2: <jsp:useBean>标签用于在JSP页面中实例化一个JavaBean对象。 语法: <jsp:useBean id="bean对象的标识符" class="JavaBean的类名" scope="可选的域"> </jsp:useBean> 执行过程: 1. 当JSP页面被请求时,服务器会执行JSP引擎。 2. 遇到<jsp:useBean>标签时,服务器会尝试查找指定id的bean对象,如果找不到,则会实例化一个新的bean对象。 3. 如果找到了bean对象,则会将该对象的引用存储在指定id的标识符中。 4. 如果未指定class属性,则服务器会尝试根据id的标识符找到对应的类名,并实例化一个新的bean对象。 5. 如果未指定scope属性,默认为page。 6. 执行<jsp:useBean>标签中的其他代码。 <jsp:setProperty>标签用于设置JavaBean对象的属性值。 语法: <jsp:setProperty name="bean对象的标识符" property="bean属性名" value="属性值"> </jsp:setProperty> 执行过程: 1. 查找指定name的bean对象。 2. 根据指定的property属性名在bean对象中查找对应的属性。 3. 将value的属性值赋给找到的bean属性。 <jsp:getProperty>标签用于获取JavaBean对象的属性值。 语法: <jsp:getProperty name="bean对象的标识符" property="bean属性名" /> </jsp:getProperty> 执行过程: 1. 查找指定name的bean对象。 2. 根据指定的property属性名在bean对象中查找对应的属性。 3. 返回找到的属性值。 以上是<jsp:useBean>,<jsp:setProperty>和<jsp:getProperty>标签的语法和执行过程。 ### 回答3: <jsp:useBean>标签用于实例化一个JavaBean对象。其语法如下: <jsp:useBean id="beanId" class="beanClass" scope="scope"> <jsp:setProperty name="beanId" property="propertyName" value="propertyValue" /> </jsp:useBean> 其中,id为JavaBean对象的标识符,class为JavaBean类的全限定名,scope为作用域(可选,默认为page)。 <jsp:setProperty>标签用于为JavaBean对象设置属性。其语法如下: <jsp:setProperty name="beanId" property="propertyName" value="propertyValue" /> 其中,name为JavaBean对象的标识符,property为属性名,value为属性值。 <jsp:getProperty>标签用于获取JavaBean对象的属性值。其语法如下: <jsp:getProperty name="beanId" property="propertyName" /> 其中,name为JavaBean对象的标识符,property为属性名。 执行过程如下: 1. 解析器在页面解析阶段遇到<jsp:useBean>标签时,会根据class属性实例化一个JavaBean对象,并根据id属性将其存储在指定作用域中,如果没有指定作用域,默认为page作用域。 2. 如果有<jsp:setProperty>标签,解析器会根据name和property属性找到相应的JavaBean对象和属性,然后将value属性的值设置给该属性。 3. 在页面其他位置使用<jsp:getProperty>标签时,解析器会根据name和property属性找到相应的JavaBean对象和属性,并返回属性的值。 注意:<jsp:useBean>和<jsp:setProperty>标签通常都在页面的开头或顶部进行设置,以确保可以在页面的任何位置使用<jsp:getProperty>标签获取属性值。同时,<jsp:useBean>标签只能实例化一个JavaBean对象,若需要多个对象,可以使用多个<jsp:useBean>标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值