初识java的main方法

简介: 初识java的main方法

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文件并附带参数的时候,此时会直接对这几个参数进行输出,如下图所示:


2.png


运行java程序

Java是一门半编译型、半解释型语言。先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节码 组成的平台无关、面向JVM的文件。最后启动java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够理解的形式来运行,即如下图所示:


 2.png


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是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

三者的关系更像是包含关系:


2.png


下面来看一道面试题:我们常用的jdk命令都有哪些?


编译:javac命令

运行:java命令

例如对上述一个文件名为TestDemo的文件编译运行便如图所示:


2.png


再来看一道练习题目:


2.png


这道题目的答案为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即可。


相关文章
|
17天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
23天前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
60 9
|
16天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
30 4
|
16天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
21 4
|
14天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
21 1
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
91 4
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
109 2
|
1月前
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
42 2
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
23 3