A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hejinzhong 中级黑马   /  2014-8-17 21:31  /  1719 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



一个.java文件中可以有多个 类(不是内部类),但只能一有一个public的类,并且 public的类名必须与文件相一致。 这句话怎么理解,是在编译时怎么处理的?

10 个回复

倒序浏览
华谦 来自手机 中级黑马 2014-8-17 21:39:34
沙发
我表示也不懂,坐等高手
回复 使用道具 举报
一个.java文件中可以写多个class,但是只能有一个class是public修饰的,且这个class的名字必须和文件名相同,在编译的时候每一个class都会生成一个对应的.class文件。
回复 使用道具 举报
main方法被jvm调用,所有权限要足够大。所以用public
只是为了方便使用工具(EditPlus Eclipse,等)方便编译运行
如果你用记事本 主函数所在类可以不用跟.java文件名相同,
你可以试试  javac 文件名.java   java 主函数所在类名

同时一个学生类中的get和set方法不都是public么,怎么可能只有一个public
回复 使用道具 举报
可以有很多类,编译的时候会把这些类挨个编译成.class,但是一个文件中的类只能有一个class被public修饰里面放主方法
回复 使用道具 举报
酋长第一 发表于 2014-8-17 22:10
main方法被jvm调用,所有权限要足够大。所以用public
只是为了方便使用工具(EditPlus Eclipse,等)方便编 ...

大姐,说的是一个.java中有多个类,不是一个类中有多个方法!
回复 使用道具 举报
public class Test {

        public static void main(String[] args) {
                makeShape(14);
        }

        public static void makeShape(int needLength) {
                if (needLength > 30) {
                        System.out.println("不要太过分!日");
                        return;
                }
                for (int i = 0; i < needLength; i++) {
                        for (int j = i; j < needLength-1; j++) {
                                System.out.print(" ");
                        }
                        for (int j = 0; i >= j; j++) {
                                System.out.print("* ");
                        }
                        System.out.println();
                }
                for (int i = 0; i < needLength; i++) {
                        for (int j = 0; i >= j; j++) {
                                System.out.print(" ");
                        }
                        for (int j = i; j < needLength-1; j++) {
                                System.out.print("* ");
                        }
                        System.out.println();
                }
        }

        private int x = 100; // 成员变量 / 属性 / 字段 指的都是它 名字好几个呢

        // 叫函数的是它 叫方法的也是它
        public void 呵呵() {
                int xx = x; // 这里的xx 叫 局部变量 , 必须初始化值 什么叫初始化? 你就理解给它个默认值
                System.out.println(xx);
        }

        public void hehe() {

        }

        public Test() {
                System.out.println("无参构造函数");
        }

        public Test(int x) {
                System.out.println(x);
                System.out.println("有参构造函数1");
        }

        public Test(int x, int y, int z) {
                System.out.println(x + "" + y + "" + z);
                System.out.println("有参构造函数2");
        }

        public Test(int x, int y) {
                System.out.println(x + "--" + y);
                System.out.println("有参构造函数3");
        }

}

/**
* 单例 1
*
* @Description:饿汉
*/
class Single01 {  // 不能被public修饰  public class Single01 是错误的
        private Single01() {
        }

        private static Single01 single = new Single01();

        public static Single01 getInstance() {
                return single;
        }
}

/**
* 单例 2
*
* @Description:懒汉
*/
class Single02 {     // 不能被public修饰  public class Single02 是错误的
        private Single02() {
        }

        private static Single02 single = null;

        public static Single02 getInstance() {
                if (single == null) {
                        single = new Single02();
                }
                return single;
        }
}
回复 使用道具 举报
类的前面加public是用来表示该类为公有的,也就是在整个程序里都可以访问到它。但是要注意的是,如果将一个类声明成public,则也要将文件名称取成和这个类一样的名称,所以说在一个JAVA文件里,最多只能有一个publicd的类,否则.java的文件便无法命名。
回复 使用道具 举报
人家定义的,没有为什么   就好像定义标识符的规则一样。
其实一个文件名只能有一个public类是为了让虚拟机更快的找到程序的入口,因为一个文件里的main函数必须要定义在public类里  否则运行的时候会出错,不是编译时期哦,楼主可以试试看
回复 使用道具 举报
方便找到执行切入点
回复 使用道具 举报
wfaly 中级黑马 2014-8-21 13:39:50
11#
谢谢  楼主 分享..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马