菜鸟学Java public static void main(String[] args) 是什么意思?
这是一个经典的Java程序,它使用了面向对象的编程风格:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); }}第一行代码:
public class HelloWorld {这行代码定义了一个名为HelloWorld的公共类(public class),该类是程序的入口点。Java程序中的每个类都必须以一个公共类来定义。文件名必须与公共类的名称相同,并以.java作为文件扩展名。
注:String args[] 与 String[] args 都可以执行,但推荐使用 String[] args,这样可以避免歧义和误读。
public static void main(String[] args)这行代码定义了一个公共静态方法(public static method)main,它是Java程序的起点。在程序执行时,从main方法开始执行。main方法是程序的入口,可以执行程序中的其他代码。
main方法的参数是一个字符串数组String[] args,它允许在命令行中传递参数给程序。args数组在程序运行时可以用来接收命令行参数。
这是 Java 程序的入口地址,Java 虚拟机运行程序的时候首先找的就是 main 方法。跟 C 语言里面的 main() 函数的作用是一样的。只有有 main() 方法的 Java 程序才能够被 Java 虚拟机运行,可理解为规定的格式。
对于里面的参数及修饰符:
public:表示的这个程序的访问权限,表示的是任何的场合可以被引用,这样 Java 虚拟机就可以找到 main() 方法,从而来运行 javac 程序。static: 表明方法是静态的,不依赖类的对象的,是属于类的,在类加载的时候 main() 方法也随着加载到内存中去。void :方法是不需要返回值的。main:约定俗成,规定的。String[] args:从控制台接收参数。为什么是 String[] args,这个 args 是干嘛的?
String[] args 可以看出来它是一个数组。在命令行中比如运行 Test.class 文件,你可以这样写:
java Test runoob相当于给数组传入了一个 runoob 字符串。也可以打印出来,可以作为简单的输入。
例如:
public class Test { public static void main(String[] args) { System.out.println(args[0]); }} $ javac Test.java$ java Test runoobrunoob此处注意,main 是一个程序的入口,一个 java 程序运行必须而且有且仅有一个 main 方法。
args[0] 是你传入的第一个参数,args[1]是传入的第二个参数,以此类推。
String[] args 还有一种等价的写法: String... args
前者为数组形式, 后者为可变参数形式。
前者用得较多, 但是看到后者也应认识。
Java 程序利用 main 函数中 args 参数实现参数的传递(传递空格处理)
public class Test{ public static void main(String []args) { System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); }}用控制台编译运行:
$ javac Test.java$ java Test aaa bbb ccc aaabbbccc注意:三个参数之间用空格隔开!
如果要输出空格怎么办?
只需要在包含空格的参数上,使用双引号 "" 即可。
实例运行:
$ java Test aaa "b bb" cccaaab bbccc 2、包里面的多个类一个包里面可以有多个java类吗?
是的,一个包(package)可以包含多个Java类。在Java中,包是一种组织代码的方式,它可以将相关的类和其他资源放在一起,使代码更有结构和可维护性。
一个包可以包含多个Java类文件,并且这些类可以相互引用和访问。这种组织结构有助于避免类名冲突,并使代码更易于组织和管理。
要在一个包中创建多个Java类,你可以将这些类放在同一个包目录下,并确保每个类的文件名与类名相匹配。例如,假设你有一个名为com.example的包,你可以在该包下创建多个Java类文件,如ClassA.java、ClassB.java等。
com/ example/ ClassA.java ClassB.java在这个例子中,com.example是包的名称,ClassA.java和ClassB.java是位于该包下的两个Java类文件。
2.1 全限定名调用程序在Java代码中引用包中的其他类时,你需要使用类的全限定名(fully qualified name),即包名加类名。例如,在ClassA.java中引用ClassB的话,你需要使用com.example.ClassB作为类的名称。
package com.example;public class ClassA { // 引用ClassB com.example.ClassB b = new com.example.ClassB(); // ...}一个包可以包含多个Java类文件,并且这些类可以相互引用。这种组织方式有助于将相关的类组织在一起,提高代码的可读性和可维护性。
2.2 包名的层数在上面的结构中,com.example是一个包名,需要限定包名的层数吗?可不可以没有example这一层?
在Java中,包名是按照一定的命名约定来组织和识别代码的。包名通常以域名的倒序形式命名,以确保包名的唯一性和可读性。
对于包的层数并没有硬性的限制要求,你可以根据自己的需要来组织包的层次结构。每个层级在包名中通过.进行分隔。
在你提供的示例中,com.example是一个包名,其中com是顶级包,example是子包。这种层次结构有助于将相关的类组织在一起,并提供更好的可读性和可维护性。当多个开发者共同开发项目时,按照这种约定命名包可以减少类名冲突的可能性。
根据Java的命名约定,建议使用类似域名的包名结构,但并不是强制要求。你可以根据你的项目需求和个人喜好来命名包。
因此,可以有不同的包层级结构,如只有一个层级的包名com、两个层级的包名com.example,或者