2.2

2.2,第1张

##################################################

搞清源文件与

——————————

声明与定义

        在说类之前 先搞明白声明是什么 定义又是什么?

        以 C 语言来举例说明

        声明/declaration 和 定义/definition 是两个容易混淆的概念

        声明只是给 变量、函数、结构体、联合体 命名
        表明程序有该 变量、函数、结构体、联合体

        定义是具体给变量分配存储空间、给出函数的具体实现、指明结构体和联合体成员

        如果程序中仅仅有声明,缺少定义实现

        最终无法生成可执行的程序,因为信息不完整,无法完成编译全过程。

        声明可以出现多次 而定义有且只能出现一次

        定义必须有,且只能出现一次

        声明和定义可以同时出现

    抽象图:
声明函数类型以及标识符 (参数数量类型) {

    /* 定义就是具体的实现 */
}

——————————

声明一个公开类

%%%%%

        死记:

一个 Java 源文件中只能有一个 public 修饰类且 Java 源文件中若只有一个类则源文件名必须与该类名一致

%%%%%
        首先我们这个程序文件

main.java

        是一个文件

        第一句:

public class main { }

        字面翻译一下:

公开的 类 自定义类名 { 代码块 }

        很显然 就是说我定义了一个公开的 main 类

        我们在这个文件中声明了一个 main类:

        如何声明的?语法格式是:

类型修饰符 关键字 类名 { }

        现在 我们这样说:

文件 main.java 中
有一个 main 类

        一般来说 都是这种情况 一个文件一个类

        而且类名绝对不能随便命名 要见名知意

%%%%%

        Java 中的所有程序代码都必须存在于一个类中

        用 class 关键字定义类

        在 class 前面可以有一些修饰符

        格式如下:

修饰符 class 类名 {
    /* 程序代码 */
}

——————————

CentOS 工作目录

[lilian@CentOS ~]$ mkdir javaTest    /* 建立目录 javaTest */
[lilian@CentOS ~]$ cd javaTest/    /* 进入工作目录 */
[lilian@CentOS javaTest]$ pwd    /* 查看当前路径 */
/home/lilian/javaTest
[lilian@CentOS javaTest]$ ls    /* 查看目录内容 */
[lilian@CentOS javaTest]$ touch main.java    /* 创建 main.java 空文件 */
[lilian@CentOS javaTest]$ ls    /* 再次查看目录内容 */
main.java
[lilian@CentOS javaTest]$ 

        创建了源文件 main.java

——————————

类的三个问题

        根据上面死记的准则:

一个 Java 源文件中可以定义多个类
同一个源文件中定义的类最多只能有一个类可以被 public 关键字修饰
若源文件中有被 public 修饰所修饰的类那么源文件名必须与 public 所修饰的类同名

        可以提出以下问题:

源文件中如果没有 public 所修饰的类,源文件该如何命名?
一个源文件中如果定义了多个类,编译之后会形成几个 .class 字节码文件?
main() 这个主方法必须定义在 public 类当中吗?

%%%%%

        源文件中如果没有 public 所修饰的类,源文件该如何命名?

        如果源文件中没有任何一个类被 public 关键字所修饰

        那么我们可以用任意名称来命名这个源文件

        只要源文件的名称符合命名规范就可以了!

%%%%%

        一个源文件中如果定义了多个类,编译之后会形成几个 .class 字节码文件?

源文件与编译后的字节码文件的名称和数量其实没有一一对应关系

字节码文件的名称和数量其实是由源文件中类的名称和数量决定的

    main.java code:
public class main {

	/* 空类 */
}

class first {

	public static void main ( String[] args ) {

		System.out.println ( "你好,世界!" );
	}
}

class second {

	/* 空类 */
}

        编译之后发现产生了三个字节码文件:

         且每个 .class 字节码文件的命名与源文件中的每个类名相对应

%%%%%

        main() 这个主方法必须定义在 public 类当中吗?

        有一种说法,认为主方法必须被定义到 public 类当中才能运行,其实这也是一种讹传

        可以试试上面那个例子 主方法并没有被定义到 public 类当中 但是我们照样能通过相应的命令执行这个主方法:

[lilian@CentOS javaTest]$ ls
first.class  main.class  main.java  second.class
[lilian@CentOS javaTest]$ java first
你好,世界!
[lilian@CentOS javaTest]$ 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/921887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存