黑马程序员技术交流社区

标题: 一个.java中类多少的问题? [打印本页]

作者: hejinzhong    时间: 2014-8-17 21:31
标题: 一个.java中类多少的问题?


一个.java文件中可以有多个 类(不是内部类),但只能一有一个public的类,并且 public的类名必须与文件相一致。 这句话怎么理解,是在编译时怎么处理的?
作者: 华谦    时间: 2014-8-17 21:39
我表示也不懂,坐等高手
作者: Kikyou    时间: 2014-8-17 21:52
一个.java文件中可以写多个class,但是只能有一个class是public修饰的,且这个class的名字必须和文件名相同,在编译的时候每一个class都会生成一个对应的.class文件。
作者: 酋长第一    时间: 2014-8-17 22:10
main方法被jvm调用,所有权限要足够大。所以用public
只是为了方便使用工具(EditPlus Eclipse,等)方便编译运行
如果你用记事本 主函数所在类可以不用跟.java文件名相同,
你可以试试  javac 文件名.java   java 主函数所在类名

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

大姐,说的是一个.java中有多个类,不是一个类中有多个方法!
作者: 阳光的嘉主角    时间: 2014-8-18 09:28
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;
        }
}
作者: 许愿じ☆VE杰    时间: 2014-8-21 07:25
类的前面加public是用来表示该类为公有的,也就是在整个程序里都可以访问到它。但是要注意的是,如果将一个类声明成public,则也要将文件名称取成和这个类一样的名称,所以说在一个JAVA文件里,最多只能有一个publicd的类,否则.java的文件便无法命名。
作者: 136616244    时间: 2014-8-21 07:50
人家定义的,没有为什么   就好像定义标识符的规则一样。
其实一个文件名只能有一个public类是为了让虚拟机更快的找到程序的入口,因为一个文件里的main函数必须要定义在public类里  否则运行的时候会出错,不是编译时期哦,楼主可以试试看
作者: 恣意的豆腐    时间: 2014-8-21 07:54
方便找到执行切入点
作者: wfaly    时间: 2014-8-21 13:39
谢谢  楼主 分享..




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2