您的位置:首页 > 编程语言 > Java开发

thingking in java 2.11练习(2)(先有static还是先有main?)

2016-07-21 08:31 260 查看
题目:参照本章的HelloDate.java这个例子,创建一个“hello,word”程序,该程序只要输出这句话即可。你所编写的类里只需一个方法(即main方法,在程序启动时被执行)。记住要把它设置为static形式,并指定参数列表即使根本不会用到这个列表。用javac进行编译,再用java运行它。如果你使用的是不同于jdk的开发环境,请了解如何在你的环境中进行编译和运行。

这道题对于稍微有点Java基础的人来说都是非常简单的,代码如下public class test {
public static void main(String[] args) {
System.out.println("hello,word");
}
}
不过仅仅如此,做题的意义不大,我们尝试着探究一下里面隐藏的深层次的内容。
pulic 表示该方法时对外公开的,为什么要对外公开呢?改成private行不行。

尝试后得知,不行,因为改成private后编译器里的run按钮不见了。为什么?暂时不知道,看下面。

其次,理解一下static

static是Java关键字,(java一共53个关键字加两个保留字,详情自寻资料)static应用于以下两种场景:

一,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建对象。

二,希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能调用这个方法。

简单理解一下字面上的意思,用static声明的事物在存储上,也就是在内存空间上,是唯一的,要使用static不需要创建包含声明static的那个类,直接引用即可。

但是放到这个程序中,似乎有些莫名其妙啊,这里为什么要用static,把它拿掉行不行。

尝试拿掉static,编译器没有提示错误。似乎真的没有问题,运行一下试试!

但是,run按钮呢,(笔者使用的是itellij编译器)run按钮又不见了,编译器运行的机会都不给你。

static重新添加上去后,run又出现了。

看来static是至关重要的!但是为什么呢?似乎想不出答案,那就跳过,看下一个。

void很好理解,表面这个方法返回空。

但不用void行不行,用string并且在方法最后return一个“hello”行不行?

经过尝试,run又不见了,看来还是不行。也不知道原因,继续下一个。

接下来,理解一下main

我们注意到,在编译器上打main的时候,编译器并没有提示,main也没有变色,查资料可得,main不是关键字,也不是保留字。那我们这里不用main,用其他字母可以吗?比如用center,用start。

在编译器上尝试了一下后显然是不行的,编译器提示“method xxx is never used”,这意味着,只有用main的时候才会被use。

thinking in java书里提到main的不多,仅说了在创建一个独立运行的程序时,那个类必须包含一个名为main的方法,至于为什么没有解释。那我们就网上搜一下资料。

网上关于main的博客很多,总结来说,有以下几条:

main是java应用程序的入口,java程序在运行时,首先执行的是main方法。

main是由jvm(java虚拟机)调用的。

这里再结合上面的static的用途,就很好理解了,因为main是入口,是第一个执行的,要是它与定义在哪个类有关,那限制太大了,所以加了static,当我们去掉static关键字时,jvm虚拟机显然就找不到main了,自然就无法运行。

至于main方法里的参数string[]args,是用来接受命令行输入,比如我们要做计算两个数的和,这两个数事先没有子啊程序中定义好,而是要在命令行中输入,输入的位置就是args。

综合以上,可以简单理解一下main方法为什么这样写。

首先,public的原因是因为jvm要调用它,并且是第一个调用它,若是改成其他如private,jvm就找不到程序,无法运行。

其次,要用static是因为main方法作为程序入口,不应该受类的限制,且程序的入口只有一个,不能有多个,所以要用static。

void是因为main方法是第一个被调用的,是最底层的,除了jvm,没有其他方法调用void,自然不需要返回值。

而main,不是关键字我们可以理解为一个程序只有一个main,不需要将main置为关键字,同时main只能这样写,否则jvm就不认识它了。

看来public static void main(String[] args)是不能有任何修改的规定的写法。

以上就是对该题目的简单扩展。

不过,笔者还有一个小小的疑问。

在分析过程中我们不难发现,static的两种特性和main的需求刚好完美的相匹配。笔者想问,是先有static关键字,发现它很适用于main,然后应用上,还是先有main,为了main的几个特性,创造出static关键字。

该问题仅供娱乐。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java