Java面向对象的小知识:
一、java 的命名规则
源文件的名称必须与公共类的名称完全匹配,包括大小写。
二、java的主类
在 Java 应用程序中,主类并不一定必须是 public
类,但如果你希望该类能够被外部访问(例如,从命令行启动),则它应该是 public
。
主类的定义
- 公共类:如果主类是
public
,它的名称必须与文件名匹配。 - 非公共类:可以定义为没有
public
修饰符的类,但它只能在同一包内访问,并且不能直接作为 Java 应用程序的入口点。
实例:
1. 使用公共主类
// 文件名: MyApp.java
public class MyApp {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
2. 非公共主类
// 文件名: MyApp.java
class MyApp {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
在第二种情况下,如果你从命令行运行程序,仍然可以运行,但只在同一包内有效。
三、java主类和主方法的要求
Java 应用程序必须有一个主类(main class),并且这个类必须包含一个 main
方法作为程序的入口点。
1.主类
- 主类可以是
public
类,也可以是默认访问修饰符的类,但必须包含main
方法。 - 如果希望程序可以从命令行运行,通常将主类定义为
public
。
2.主方法
-
main
方法的签名必须是:public static void main(String[] args)
-
这个方法是 Java 虚拟机(JVM)执行程序时的入口点。
四、java中定义类
1.java的源文件
(1.文件扩展名
每个 Java 源文件的扩展名必须是 .java
。例如,MyClass.java
是一个有效的 Java 源文件名。
(2.内容
- 类定义:Java 源文件通常包含一个或多个类的定义。
- 方法:类内可以定义多个方法,这些方法包含具体的逻辑。
- 字段:类可以有实例变量和静态变量。
- 导入语句:可以包含
import
语句,用于引入其他类或包。 - 注释:可以包含注释,以提高代码的可读性。
(3.示例
// 文件名: Example.java
import java.util.List; // 导入语句
public class Example { // 公共类
private int value; // 字段
public Example(int value) { // 构造函数
this.value = value;
}
public void displayValue() { // 方法
System.out.println("Value: " + value);
}
public static void main(String[] args) { // 主方法
Example example = new Example(10);
example.displayValue();
}
若要在此源文件中定义其他类:
// 文件名: Example.java
import java.util.List; // 导入语句
public class Example { // 公共类
private int value; // 字段
public Example(int value) { // 构造函数
this.value = value;
}
public void displayValue() { // 方法
System.out.println("Value: " + value);
}
public static void main(String[] args) { // 主方法
Example example = new Example(10);
example.displayValue();
// 创建其他类的实例
AnotherClass another = new AnotherClass();
another.sayHello();
}
}
// 包私有类
class AnotherClass {
public void sayHello() {
System.out.println("Hello from AnotherClass!");
}
}
// 另一个包私有类
class YetAnotherClass {
// 类的内容
}
- 在这个示例中,
Example
是唯一的public
类,文件名为Example.java
。 AnotherClass
和YetAnotherClass
是包私有类,没有public
修饰符。- 你可以在
main
方法中创建AnotherClass
的实例,并调用它的方法。
(4.源文件中类的创建
在 Java 源文件中,如果有多个类,最多只能有一个类被声明为 public
类。
示例:
// 文件名: MyPublicClass.java
public class MyPublicClass {
// 公共类的内容
}
class MyPrivateClass {
// 包私有类的内容
}
class MyAnotherClass {
// 另一个包私有类的内容
}
2.java不同文件中定义类
(1.文件命名
- 公共类:如果一个类被声明为
public
,那么它的文件名必须与类名完全匹配(包括大小写)。例如,public class MyClass
必须放在MyClass.java
文件中。 - 非公共类:如果类没有
public
修饰符(即是包私有类),则文件名可以是任意名称,但通常建议使用与类名相同的命名,以提高可读性。
(2.包的要求
- 如果你将类定义在不同的文件中,并且这些类在同一个包内,则可以直接使用类名来引用它们。
- 如果类在不同的包中,则需要使用
import
语句来导入它们。
示例:
假设有两个类 Example
和 AnotherClass
在同一个包中,它们分别在不同的文件中:
// 文件名: Example.java
public class Example {
public static void main(String[] args) {
AnotherClass another = new AnotherClass();
another.sayHello();
}
}
// 文件名: AnotherClass.java
public class AnotherClass {
public void sayHello() {
System.out.println("Hello from AnotherClass!");
}
}
(3. 包的声明
如果你在不同的文件中定义类,且希望它们属于同一个包,可以在每个文件的顶部添加包声明。例如:
// 文件名: Example.java
package mypackage;
public class Example {
// ...
}
// 文件名: AnotherClass.java
package mypackage;
public class AnotherClass {
// ...
}
总结:
- 其他类可以放在不同的文件中。
public
类的文件名必须与类名匹配,非公共类可以有任意文件名。- 如果类属于同一个包,可以直接使用类名;如果在不同包中,则需要使用
import
语句。
五、java源文件的编译与运行
1.编译后生成字节码文件
在Java中,当你编译一个源代码文件时,Java编译器会将其转换为字节码文件。
源代码文件中或同一个包中,有几个类,就会生成几个字节码文件,且生成的字节码文件为:类名+.class
以下是关于编译后生成字节码文件的一些关键点:
(1. 字节码文件定义
- 字节码是Java程序的中间表示形式,通常以
.class
文件的形式存储。这些文件包含了经过编译的Java代码,能够被Java虚拟机(JVM)理解和执行。
(2. 生成过程
- 当你使用
javac
命令编译一个Java源文件(例如Speak.java
)时,它会生成一个或多个.class
文件。这些文件的名称与类名对应,例如Speak.class
和Xiti4.class
。
(3. 字节码的特性
- 平台独立性:字节码是与平台无关的,这意味着同一个字节码文件可以在任何安装了 JVM 的系统上运行。
- 可移植性:由于字节码可以在任何支持JVM的环境中运行,Java被称为“一次编写,处处运行”(WORA)。
(4.字节码设计
- 字节码文件包含了相关类的信息,如字段、方法、常量池等。这些信息使得JVM能够创建对象,调用方法,并管理内存。
- 每个字节码指令对应于一个操作,JVM 将这些指令解释并执行。
(5. 字节码与Java源代码的关系
- 字节码是源代码的编译结果,虽然可以通过反编译工具转回Java代码,但通常没有注释和原始代码的结构。
- 字节码的生成过程会进行语法和语义检查,确保代码符合Java语言规范。
(6. 运行字节码
- 字节码文件由JVM加载并执行。当你运行
java Xiti4
时,JVM会查找Xiti4.class
文件,找到main
方法并执行它。
2.使用Java解释器运行该程序的完整命令
在Java中,程序的入口点是main
方法而不是类的访问修饰符。
(1.主类定义:
- 在Java中,主类是包含
public static void main(String[] args)
方法的类。一个类没有声明为public
,但它仍然可以作为主类运行,尽管它在同一个包中。
(2.文件类别对比:
- 如果一个类被定义为
public
,则该类的名称必须与文件名相同。如果文件名与主类名称不匹配,编译将失败。
(3.执行程序:
- 使用
java
时,后面跟的类名是Java虚拟机(JVM)查找程序入口的类。只要该类包含main
命令方法,JVM就能够启动程序。
(4.包裹和行程:
- 如果类不在任何包中(即在默认包中),并且在同一个源文件中定义了多个类,JVM仍然可以找到并执行包含
main
方法的类。
总结:
即使类没有标记为public
,只要它具有main
方法,就可以通过java 类名
命令来执行该程序。
示例:
public class Speak {
void speakHello( ) {
System.out.println("I'm glad to meet you!");
}
}
class Xiti4 {
public static void main(String[ ] args) {
Speak sp = new Speak( );
sp.speakHello( );
}
}
(1)上述源文件的名字应该是( Speak.java
)
(2)上述源文件编译后生成( 2
)个字节码文件,这些字节码文件的名字是(Speak.class
)和(Xiti4.class
)
(3)使用Java解释器运行该程序的完整命令是(java Xiti4
)