zoukankan      html  css  js  c++  java
  • 一个.java文件内只能写一个class吗

    先给结论:当然不是!!

    可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以不含public类,如果只有一个非public类,此时可以跟文件名不同。

    为什么一个java源文件中只能有一个public类?

     在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):

    1. 每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。
    2. public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。
    3. 虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。

    例如:

    package ab;
    
    class Alpha {
        private int privateVar;
        Alpha(int _privateVar){     //构造方法
            privateVar = _privateVar;
        }
        boolean isEuqualTo(Alpha b) {
            if (this.privateVar == b.privateVar) return true;
            else return false;
        }
    }
    public class Beta{
        public static void main(String[] args){
            Alpha a = new Alpha(1);
            Alpha b = new Alpha(2);
            System.out.println(a.isEuqualTo(b));
        }
    }

    编译会产生两个.class文件,且能正确运行。

    其次,这里并没有要求main函数只能写在public类中(虽然我们通常是这么做的)。我们可以把main函数写在非public类中,例如新建test.java:

    package exercise;
    
    public class test {
        public static void func(){
            System.out.println(1);
        }
    }
    
    class test2{
        public static void main(String[] args){
            System.out.println(2);
        }
    }

     Java里面就是main方法(这个main方法只需要放到任意一个类中即可)。当你用java执行这个类时,系统会寻找main方法作为入口执行。

    所以这里test类中的函数根本没有执行,结果只打印出2。

    参考链接:

     1、https://www.cnblogs.com/zhukunqiang/p/6652787.html

     2、https://blog.csdn.net/bareheadzzq/article/details/6562211

     3、https://www.jianshu.com/p/8624e27ae45d

  • 相关阅读:
    centos6.5下的mysql5.6.30安装
    mysql常见错误
    fpm打包redis3.0.7
    centos6.5安装fpm打包工具
    centos6.5安装flume
    centos6.5 安装mono
    利用rsyslog 对linux 操作进行审计
    CentOS7修改服务器主机名方法
    CentOS 7 修改网卡名称为eth
    keepalived配置日志
  • 原文地址:https://www.cnblogs.com/lfri/p/10552111.html
Copyright © 2011-2022 走看看