首先要知道java方法参数是怎么传递的
java方法参数的传递分为两种
1.基本类型的传递:
java方法中参数的传递对于基本类型来说是传递基本类型的值,也就是我们所说的传值
2.对象的传递:
对于对象的传递java中是传递对象的引用,也就是传递对象的地址,也就是传址(有的也说这个也是传值,只不过这个值包装了对象的地址原理其实是一样的)
java方法的调用是在方法栈中运行,分为方法入栈、出栈、压栈、弹栈、执行代码五个部分。
入栈:当运行方法的时候方法就会进入方法栈接着执行此方法。
出栈:当方法运行完毕之后方法就会移除方法栈
压栈与弹栈:当一个方法在运行当中调用了另一个方法,那么此方法就会压栈,被调用的方法就会入栈开始执行,当被调用的方法执行完毕出栈后,压栈的方法就会弹栈,接着执行后面的代码。
光说没用,看看例子吧
例1:
public static void main(String[] args) {
int i = 5;
change(i);
System.out.println(i); //result 5
}
public static void change(int i) {
i = 500;
}
![](http://dl.iteye.com/upload/attachment/456098/74717928-30a8-3116-8fce-b63365e8c9e2.png)
分三个阶段分析:
阶段一:main方法入栈开始执行代码,在栈中初始化一个基本变量int i=5,执行到change方法,main方法压栈。
阶段二:change方法入栈开始执行代码,这里要注意,当执行change方法的时候是在方法栈中重新开辟一块内存来执行此方法;此方法传递了一个参数int i = 5,在内存中是初始化一个变量并赋值为5接着执行 i = 500,重新给变量i赋值为500,然后方法执行完毕,chang方法出栈,这个时候,为执行chang方法开辟的那块内存就会自动销毁。
阶段三:change方法执行完出栈,main方法弹栈,接着执行后面的代码,这里注意了, main方法中的变量i虽然传递给chang方法重新赋值,但只是在chang方法内部赋了值,当chang方法执行完出栈了,内存自动销毁,也就是说,main方法中变量i并没有被赋上值还是原来的5,所以最后打印出5,main方法出栈,执行main方法的那块内存销毁。
例2:
public static void main(String[] args) {
Person person = new Person();
person.age = 18;
changeAge(person);
System.out.println(person.age); //result 25
}
public static void changeAge(Person person) {
person.age = 25;
}
class Person {
int age;
}
分析:
同样是三个阶段:
阶段一:main方法入栈开始执行代码,初始化一个Person对象(这里是在堆中new一个Person),并给person对象的age属性赋值为18。
阶段
二:changeAge方法入栈开始执行代码,这里要注意,当执行change方法的时候是在方法栈中重新开辟一块内存来执行此方法;此方法传递了一个Person对象引用(即堆中new出来的person对象的地址),接着重新给person对象中的age属性赋值为25方法执行完毕,chang方法出栈,这个时候,为执行chang方法开辟的那块内存就会自动销毁,但是Person对象是在堆内存中,并没有销毁,也就是说现在person对象的age属性的值为25。
阶
段三:change方法执行完出栈,main方法弹栈,接着执行后面的代码,所以我们会看到打印出Person对象的age属性的值是25,方法执行完毕main方法出栈,执行main方法的那块内存销毁,这个时候就没有任何一个对象的引用指向堆内存中的person对象了,java虚拟机会通过finalize方法清理没有引用指向的对象进行垃圾回收。
总结:
java方法的运行主要有三点
1:java方法的参数的传递对于基本类型则是传递变量的值,对于对象则是传递对象的应用(即对象的地址)
2:java方法是在方法栈中运行的主要分为五个部分:入栈、出栈、压栈、弹栈、执行代码
3:java每执行一个方法都会在方法栈中开辟一个新的内存,且当方法执行完毕这块内存会自动释放
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0045/6098/74717928-30a8-3116-8fce-b63365e8c9e2-thumb.png)
- 大小: 14 KB
分享到:
相关推荐
- 它还包括Java运行时环境(JRE),即Java程序运行所必需的环境。 2. **JRE (Java Runtime Environment)**: - JRE包含JVM以及运行Java应用程序所需的类库。 - 如果只是运行Java程序,用户只需要安装JRE即可。 ...
java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的...
Java 词法分析器 Java 词法分析器是 Java 程序设计语言的词法分析工具,用于对 Java 源代码进行词法分析。...Java 词法分析器还提供了异常处理机制,能够捕获和处理异常,以便确保词法分析器的稳定运行。
Java运行内存分析涉及了Java虚拟机(JVM)内存结构和内存管理的各个方面。JVM内存主要分为以下几个部分:栈内存(Stack)、堆内存(Heap)、方法区(Method Area)、运行时常量池(Runtime Constant Pool)以及直接...
解压后阅读,可以了解如何使用这个JavaCore分析工具,以及可能遇到的问题和解决方法。 至于`license`文件,它包含了软件的许可协议,规定了用户可以如何使用、分发和修改这个工具。确保遵循这些条款是非常重要的,...
Java运行时监控是Java开发和运维过程中至关重要的一个环节,它可以帮助我们理解应用程序在实际运行中的性能、资源消耗以及可能出现的问题。通过对Java应用的实时监控,我们可以及时发现并解决潜在的性能瓶颈,优化...
Java层次分析法(Analytic Hierarchy Process,AHP)是一种基于多准则决策分析的方法,它通过将复杂问题分解为多个相互关联的子问题,并通过比较和综合这些子问题的相对重要性来解决整个问题。在Java编程环境中实现...
- 学习和理解JVM内存模型,包括堆、栈、方法区等,有助于更好地分析内存问题。 6. **标签解析**: - "jvm":指的是Java虚拟机,是Java程序运行的平台,负责执行字节码、内存管理、线程调度等。 - "javacore":本...
这个文件最重要的作用就是分析 Java 堆内存泄露问题,heap analyzer,MAT 等工具都可以分析这种文件。 Java core 文件保存的是 java 应用程序在崩溃时或任一时刻关于 Java 运行环境的各种信息。包括 Java 虚拟机的...
Java运行时监控是Java开发和运维中的重要环节,它能够帮助开发者实时了解应用程序的性能状况,及时发现并解决潜在的问题,提升系统效率和稳定性。在Java世界中,监控主要包括对内存使用、CPU消耗、线程状态、I/O操作...
Java Flight Recorder(JFR)是Java虚拟机(JVM)的一个特性,用于捕获Java应用程序的详细运行时信息,以便于性能分析和故障排查。它是Java Mission Control(JMC)工具的一个重要组成部分,提供了一个强大的性能...
Cannon-utils是一个可能与Java运行时动态编译相关的工具或库,但具体功能和使用方法需要查看其文档或源码才能详细了解。通常,这样的工具可能提供了辅助分析JIT编译效果、性能测试或者优化Java代码的功能。 总的来...
Java虚拟机运行时数据区分析 Java虚拟机(JVM)是一种抽象的计算机,它提供了一个运行Java字节码的环境。JVM将Java源代码编译为字节码,并在运行时执行这些字节码。为了更好地理解JVM的工作原理,我们需要了解JVM的...
在这个作业中,学生可能需要设计并实现一种解析策略,例如使用递归下降解析,这是一种常见的基于Java的解析方法,通过创建一系列的Java方法来对应语言的文法规则。 在实现语法分析器时,学生需要编写一套规则来识别...
Java程序由类组成,每个类都包含方法和变量,通过编译成字节码后,可以在Java虚拟机(JVM)上运行。 二、语法解析 分析Java源代码的第一步是语法解析,这是将源代码转换为抽象语法树(AST)的过程。AST是一种树状...
Java运行环境(JRE,Java Runtime Environment)是执行Java应用程序必不可少的组件,它为Java程序提供了运行所需的系统库和环境。JRE包含了Java虚拟机(JVM,Java Virtual Machine),这是Java程序的核心部分,负责...
实验中提到的“递归下降语法制导翻译法”是一种常用的语义分析方法。递归下降分析基于语法的递归性质,将每个非终结符对应一个函数,当遇到语法分析树的一个节点时,调用相应的函数进行处理。而“语法制导翻译”则是...
总之,IBM的jca467.jar是WAS环境下进行Java线程分析的强大工具,它能够帮助开发者深入洞察应用程序的内部运行情况,有效地定位和解决多线程问题,提升系统的稳定性和性能。通过熟练掌握并运用这个工具,开发者可以在...
《自己动手写Java虚拟机及class文件解析分析工具(java8运行)...通过阅读PDF文档和使用提供的工具,读者将能够深入到Java编程的底层,增强对Java运行机制的理解,这对于提升Java开发技能和解决实际问题具有重要意义。
Java内存dump分析和Thread Dump(Java ...通过上述分析,我们可以深入理解Java应用程序的运行状态,优化性能,减少资源浪费,提升系统稳定性。在实际工作中,结合日志、性能监控等手段,可以更有效地定位和解决问题。