`
df20070608
  • 浏览: 30232 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

浅谈java main方法

阅读更多

浅谈java main方法

public static void main(String[ ] arg){

……

}

这个方法是所有java程序员再熟悉不过的方法了,但这个方法又是最特殊的方法,它的名字必须是main,它的参数必须是一个字符串数组,它的类型必须是public static void,这么多必须让初学者对其充满充满了疑问却又无可奈何,现在让我们一点点的来分析一下main方法!

1.       关键字public

public是一个访问权限修饰符,与public相对应的还有protected、默认(没有任何权限修饰符)、private,四种修饰符如其名称所示,分别对应公有、受保护、缺省、私有四种访问级别。外部类仅能处于公有与缺省级别,而内部类、变量、方法可根据需要处于四种级别中任意一种。四种修饰符修饰的类、变量与方法的可见性表1所示:

1

 

访问级别

同类

同包

子类

其他地方

公有

可访问

可访问

可访问

可访问

受保护

可访问

可访问

可访问

 

缺省

可访问

可访问

 

 

私有

可访问

 

 

 

注:空白处均为不可访问

 

 

2.       关键字static

通常我们想要使用某个类的属性或方法时,我们需要创建一个类的对象,并用new为该类分配数据空间。但当我们需要让所有对象共用一个属性时,或让某个属性/方法不与包含它的类的任何对象关联在一起,能在没有创建对象时直接调用时,这种方法显然不再适用,而static关键字却很好的解决了这一问题。让我们来看一段小程序

public class Test{

        public static String s="这是一个静态变量";

        public static void output(){

           System.out.println(s);

    }  

}

接着我们在mian方法中执行

Test.s="静态变量被初始化了";

Test.output();

System.out.println("*************");

Test f01=new Test();

Test f02=new Test();

f01.s="第一次改变静态变量";

f01.output();

f02.s="第二次改变静态变量";

System.out.println(f01.s);程序运行后得到输出:

静态变量被初始化了

*************

第一次改变静态变量

第二次改变静态变量

从这段程序中可以看见,调用静态方法或变量有两种方法,第一种:通过类名与点运算符调用;第二种:通过对象与点运算符调用。但推荐使用第一种方法,它强调了静态变量与方法的静态性。另外对象f02s作了修改,可以看见f01.s值也发生了改变,这对普通变量是不可理喻的,但在这里,静态变量只有一份存储空间,在加载类的过程完成静态变量的内存分配,因此任何一个对象对静态变量的修改,都可以反应到其他对象中。

基于静态方法可在没有创建对象时直接调用的特殊性,对其也有一些限制

a.  静态方法不能调用非静态属性或方法

b.  静态方法中不能引用this super关键字

 

3.      关键字void

void修饰方法时,该方法的没有返回值,注意:没有返回值与返回值为空(return null)是不同的两个概念,返回值为空它有返回值,并且返回值为null

4.      String[ ] arg

这是一个简单的字符串数组的定义,可根据自己的习惯写为String[ ] argString arg[ ],其中arg为自己写的数组名。

 

说了这么多,大家对main方法格式中出现的关键字应该都有了大致了解,现在我们回到main方法上来看看为什么是public static void mainString[ ] arg)。

首先,main方法是JVMjava虚拟机)自动调用,JVM调用main方法的位置自然不会在某个类中、或某个包中,因此只有当main方法在公有级别上时,才对JVM可见,所以mian方法需要public修饰,同理,main方法所在的类也需要public修饰符。由于main方法是所有程序的入口,也就是main被调用时没有任何对象创建,不通过对象调用某一方法,只有将该方法定义为静态方法,所以main方法是一个静态方法,既需要static修饰。JVM对于java程序已经是最底层,由它调用的方法的返回值已经没有任何地方可去,因此,main方法返回值为空,既需用void修饰。至于main方法的参数String[ ] arg我们现在已经很少有机会去用它了,它用于在接受命令行传入的参数,试一下面的小程序吧:

public class Test{

       public static void main(String[] arg){

              System.out.println("输出在命令行接受的参数");

              for(int i=0;i<arg.length;i++){

                     System.out.println(arg[i]);

              }

       }

}

将其保存为Test.java文件,然后在命令行转到该文件目录,并输入:

javac Test.java

java Test 1st 2nd

1st 2nd用空格隔开,运行结果:

输出在命令行接受的参数

1st

2nd

虽然我们现在很少用到String[] arg 这个参数,但JVM仍然只认有这个参数的为main方法,写入其他参数则视为对main方法的重载,自己试试吧!

终上所述,main方法的格式必须是public static void main(Sting[ ] arg)

 

补充:

       想一下没有main方法的程序能不能运行呢?试着去掉main方法,写上一个静态块:

static{

//在此写入你想要运行的代码

}

运行一下,看看效果吧!

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    浅谈java 执行jar包中的main方法

    在Java编程语言中,`main`方法是程序的入口点,它是任何Java应用程序开始执行的地方。当我们在命令行中执行一个包含`main`方法的Java应用程序时,通常使用`java`命令来启动JVM(Java虚拟机)。对于独立的可执行Java...

    浅谈Java中方法的参数传值.pdf

    Java方法参数传值是Java编程中的基础知识点,涉及变量、数据类型和方法调用的机制。在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括布尔型(boolean)、字节型(byte)、短整型(short)、整型...

    浅谈Java语言的输入数据的方法.pdf

    本文将详细介绍Java语言中的三种数据输入方法,分别是使用main方法命令行参数、使用java.util.Scanner类和使用java.io.BufferedReader类。 1. 使用main方法命令行参数 在Java语言中,main方法的原型是`public ...

    浅谈java包的使用

    ### 浅谈Java包的使用 #### 一、引言 在Java开发过程中,随着项目的逐渐庞大和复杂,良好的组织结构对于代码管理至关重要。而Java包(Package)就是用来实现这种逻辑分组的一种机制。通过将相关的类放入同一个包中...

    浅谈Java程序中的构造方法调用.pdf

    Java 程序中的构造方法调用 Java 程序设计语言中的构造方法是一个特殊的成员方法,它专门用于创建对象和对所创建的对象进行初始化。正确调用构造方法是我们设计程序的关键所在。构造方法的调用方式有三种:一是在...

    浅谈java代理机制 .txt

    ### 浅谈Java代理机制 #### 一、引言 在深入探讨Java代理机制之前,我们首先需要了解代理模式的基本概念及其应用场景。代理模式是一种结构型设计模式,它为其他对象提供了一种代理以控制对这个对象的访问。在Java...

    java jvm调优浅谈

    Java JVM 调优浅谈 Java 虚拟机(JVM)是 Java 语言的核心组件之一,负责加载、验证、执行 Java 字节码。JVM 的调优对于 Java 程序的性能和稳定性至关重要。下面对 JVM 调优的相关知识点进行了详细的解释。 数据...

    浅谈java中nio的使用方式

    Java NIO(New Input/Output)是一种用于处理I/O操作的非阻塞I/O模型,与传统的Java IO相比,它提供了更高的性能和更灵活的编程方式。NIO的核心概念包括Channel、Selector、SelectionKey和Buffer。 1. **Channel...

    浅谈Java文件执行顺序、main程序入口的理解

    Java文件执行顺序主要指的是Java文件的编译和执行过程中,JVM(Java虚拟机)是如何寻找入口点,并执行main方法的。 首先,当我们编译Java文件时,JVM会首先寻找入口点,也就是main方法。main方法是Java程序的入口...

    浅谈Java的输入输出流

    ### Java输入输出流基础知识 #### 一、引言 Java作为一种广泛应用的编程语言,其强大的输入输出(IO)处理能力是其重要的特性之一。通过Java IO库,开发者能够轻松地处理各种类型的输入输出操作,包括但不限于文件...

    浅谈JAVA中多线程的实现.pdf

    通过main方法中调用兔子和乌龟线程的start()方法,模拟了它们的赛跑过程。最终结果是乌龟赢了比赛,这表明尽管兔子速度快,但不连续的执行方式导致了最终的落后。 其次,作者还介绍了通过实现Runnable接口来实现多...

    浅谈Java内部类的四个应用场景

    ### 浅谈Java内部类的四个应用场景 #### 一、引言 在Java语言中,内部类(Inner Class)作为一种特殊的存在,为开发者提供了更为灵活的面向对象编程方式。通过本文,我们将深入探讨Java内部类的四个典型应用场景,...

    浅谈Java中方法参数传递的问题

    Java 中方法参数传递的问题 Java 中方法参数传递的问题是 Java 编程语言中一个非常重要的概念。方法参数传递是指在方法调用过程中,将指定的数值传递给方法中的参数,使得方法中的参数拥有了这个指定的值,可以使用...

    java递归算法浅谈

    Java 递归算法浅谈 Java 递归算法是 Java 编程中的一种常见算法,通过自调用函数实现复杂问题的解决。下面是 Java 递归算法的相关知识点。 一、递归函数的定义 递归函数是指在函数体内直接或间接地调用自己,即...

    浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx

    首先,创建Java线程有两种主要方式:直接实例化`Thread`类或者创建一个新的类去继承`Thread`类并重写`run()`方法。例如,你可以创建一个名为`CalculatePrimes`的类,继承自`Thread`,并在`run()`方法内实现计算素数...

    浅谈java线程join方法使用方法

    浅谈Java线程join方法使用方法 Java中的线程join方法是一种实现线程同步的方式,可以将原本并行执行的多线程方法变成串行执行的。在Java中,线程join方法的作用是使当前线程等待另一个线程的结束,然后再继续执行...

    浅谈为什么java命令运行class文件出现异常共7页.p

    在本资料"浅谈为什么java命令运行class文件出现异常共7页.pdf"中,可能详细讨论了这些常见问题及其解决方法。由于提供的压缩包中仅有一个名为"赚钱项目"的文件,这似乎与Java编程无关,因此可能不是解决上述问题的...

    浅谈Java多线程处理中Future的妙用(附源码)

    "浅谈Java多线程处理中Future的妙用" 在Java多线程处理中,Future是一个非常重要的概念,它可以帮助我们更好地处理并发任务。Future是一个未来对象,里面保存着线程处理结果,它像一个提货凭证,拿着它你可以随时去...

    浅谈Java方法的重载

    当在`main`方法中调用`max`时,Java编译器会根据传递的参数类型选择正确的方法。 方法重载的规则包括: 1. **方法名必须相同**:重载的方法必须拥有相同的名称。 2. **参数列表必须不同**:这可以通过改变参数的...

    浅谈Java中的StringBuilder

     在《浅谈Java String内幕(1)》 中,字符串变量(非final修饰)通过 “+” 进行拼接,在编译过程中会转化为StringBuilder对象的append操作,注意是编译过程,而不是在JVM中。  public class StringTest {  ...

Global site tag (gtag.js) - Google Analytics