##################################################
目录
##################################################
搞清源文件与类
——————————
声明与定义
在说类之前 先搞明白声明是什么 定义又是什么?
以 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]$
##################################################
编写 Java 程序需知
——————————
Java 中的程序可分为结构定义语句和功能执行语句
其中结构定义语句用于声明一个类或方法
功能执行语句用于实现具体的功能
每条功能执行语句的结尾都必须用英文分号
;
结束 如果误写成中文的分号编译器会报告
Invalid Character/无效字符
错误信息
——————————
Java 语言是严格区分大小写的
大写和小写标识符 是两个完全不同的符号
——————————
Java 程序中一个连续的字符串不能分开在两行中书写
例如下面这条语句在编译时将会出错:
System.out.println ( "你好
世界!" );
如果为了便于阅读想将一个太长的字符串分开在两行中书写
可以先将这个字符串分成两个字符串然后用加号将这两个字符串连起来
在加号处断行
上面的语句可以修改成如下形式:
System.out.println ( "你好" +
"世界!" );