class test1
{
public static void main(String[] args)
{
test t1 = new test(10);

System.out.println("create a class!");
}

}public class test
{
int a;

public test(int a)
{
this.a = a;

System.out.println(a*a);
}
}
class文件运行时不是把public类作为主类吗?为什么我没有把main方法写在主类里也能运行??

解决方案 »

  1.   

    把public类作为主类?不是啊。有main方法的类都可以执行的
      

  2.   

    不是的。一个主程里面只能有一个Public ,这个和Public在那没关系。main可以不再Public类里面。
      

  3.   

    我一直以为,一个程序如果有两个以上的类,就必须要有且只能有一个public类,这样JVM从这个public类里面找main,所以楼主你这个程序要是能运行的话,我真的是受益匪浅,很感激
      

  4.   

    一个class文件只能有一个公共类,至于非公共类和内部类,其实你可以去看编译好的.class
    文件,他们是分开的....也就是说编译好的.class文件都是一个类一个文件
    至于main在哪,跟这个唯一的关系是,编译器不能自动找到程序入口(也就是main)在哪,所以你要具体告诉他在哪个类里面...
      

  5.   

    test t1 = new test(10);
    LZ你这程序肯定运行不了啊,编译都不能通过啊,调用默认的构造函数是不能传参的啊
      

  6.   

    main是一个程序(类)开始运行的入口,也就是程序从main开始顺序往下执行。
    首先lz你是怎么运行的,是通过 java test1 吧!你如果java test 那么就会发现出错吧,原味就是因为test中没有main,程序不知道从哪开始。
    main就是一个入口方法,你在一个源程序中定义多个类,可以为每一个类都写main方法。经过编译成一个个独立的class文件之后,你就可以去运行每一个独立的class文件(有时就用这种方法来测试类的呀)。我改了下你的例子,你看看有帮助没。
    class test1
    {
    public static void main(String[] args)
    {
    test t1 = new test(10);
    System.out.println("create a class! in test1");
    }}public class test
    {
    int a; public test(int a)
    {
    this.a = a;
    System.out.println(a*a);
    }
    public static void main(String[] args)
    {
    test t1 = new test(100);
    System.out.println("create a class! in test");
    test1.main(null); //调用都可以,main也只是一个方法而已
    }
    }
    这样编译成class文件之后,你用 java test 还有 java test1 ,都是没有结果的
      

  7.   

    sorry, 这样编译成class文件之后,你用 java test 还有 java test1 ,都是 有结果的
      

  8.   

    我运行了下楼主的代码,用的命令行,没用IDE,不过不知道javac后面接哪个类,都试过了,一个编译不通过,一个编译通过,但是运行有异常,
      

  9.   

    有main方法的类就是主类,是不是我要把代码存成test1.java啊,编译时 javac test1.java?可是报错,说是要有public  ,删了test1后,我又保存成test.java,这回编译通过了,运行时抛异常java.lang.NoSuchMethodError
    运行成功的朋友,帮帮我吧
      

  10.   

    jdk javac test1.java  编译通过, java test1 运行正常。
    java 编译时首先查找要编译的类需要的类,并将需要的类编译成class文件。
    main函数只是一个类的入口,任何类只要有main函数都可以运行,但类文件不一定要有main函数,一个类完全可以为其他类提供可供调用的方法,作为辅类。
    楼主所说的Public类作为主类是不是指打包成jar包时的情况。这里是不是直接运行test1类了。
      

  11.   

    源文件名应该和public类名一样,应该是test而不是test1。
      

  12.   

    经过我多次研究终于把原理搞清楚啦。先分享一下:
    上面的代码虽然是写在一个文件里面,但是我们编译的时候了会把它编译成两个class文件,也就是说一个class里面就只有一个类,而且默认为public类型,所以说我们只要找到含main的那个类就是我们可以运行的啦!!
      

  13.   

    一个Java文件只允许有一个类,上面的情况要将第一个test1放到test类里面,作为一个inner class.