main方法实例
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello,Java"); System.out.println("My name is:" + args[0]); } }
注意:1:类名一定是大驼峰类型,即像TestDemo这样的命名。
2:类名一定要跟文件名相同 ,前提是这个类一定是一个public类
3:main方法作为程序的入口,void为返回值,main为方法名称,括号内为形式参数,在这里思考一个问题:为什么main方法为static静态的?
思考:String[] args这个main函数参数中的数组存放的到底是什么?
当我们用for循环遍历输出这个数组的时候我们会发现此时没有输出
但当我们在命令行运行TestDemo.java文件的时候,此时我们传入两个参数,一个是hello,一个是world,此时我们发现程序会输出hello和world
所以args代表的是我们java运行时命令行参数,当我们在命令行运行.java文件并附带参数的时候,此时会直接对这几个参数进行输出,如下图所示:
运行java程序
Java是一门半编译型、半解释型语言。先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节码 组成的平台无关、面向JVM的文件。最后启动java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够理解的形式来运行,即如下图所示:
jvm中内存的划分
1:java虚拟机栈(jvm Stack):平时所说的栈,方法要开辟内存一定要在java虚拟机栈上开辟。
2:本地方法栈:运行的代码是jvm底层代码,java虚拟机(jvm)是由c/c++代码实现
3:堆:堆上存放的一般是对象。
4:程序计数器:存放的是指令,即下一条程序执行的指令
5:方法区:一般存储的是静态的数据,其中还包含了方法表,其中存储的是方法的地址,构成了一张表
jdk(Java Development Kit):Java开发工具包,提供给Java程序员使用,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。
jre(Java Runtime Environment):Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境。
jvm(Java Virtual Machine):JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
三者的关系更像是包含关系:
下面来看一道面试题:我们常用的jdk命令都有哪些?
编译:javac命令
运行:java命令
例如对上述一个文件名为TestDemo的文件编译运行便如图所示:
再来看一道练习题目:
这道题目的答案为c,请问为什么?
答:因为java f是运行f这个类,a,b,c为三个元素,赋值给了我们的args数组,所以args[0]=1,args[1]=2,args[2]=3,但是这个程序在输出的时候其中有一个输出的是args[3],所以最终在编译时期并不会出错,但是在运行时期会报越界异常.
思考:为什么一个.java文件对应一个.class文件?
答:原因是这样可以做到随用随取,即当程序中有多个.java文件的时候,此时我们可能只需要其中的几个.java文件,当用到哪个.java文件的时候,就去找对应的字节码文件(.class文件).扔给我们的jvm即可。