Java教程

Java-方法

本文主要是介绍Java-方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • Java-方法
    • 1 概述和作用
    • 2 方法目的
    • 3 方法声明
      • 3.1 语法
        • 3.1.1 方法修饰符列表
        • 3.1.2 返回值类型
        • 3.1.3 方法名
        • 3.1.4 参数列表
          • 3.1.4.1 形参
          • 3.1.4.2 实参
        • 3.1.5 方法体
    • 4 方法分类
      • 4.1 静态方法
      • 4.2 成员方法
      • 4.3 构造方法
    • 5 方法调用
      • 5.1 静态方法调用
        • 5.1.1 语法
      • 5.2 成员方法调用
        • 5.2.1 语法
      • 5.3 构造方法调用
        • 5.3.1 语法
    • 6 返回值的使用
      • 6.1 有返回值
      • 6.2 没有返回值
    • 7 方法重载(唯一性)
    • 8 内存分析
      • 8.1 Java中的内存划分
        • 8.1.1 程序计数器
        • 8.1.2 方法区/静态区
        • 8.1.3 栈内存
        • 8.1.4 堆内存
        • 8.1.5本地栈
      • 8.2 java执行流程
      • 8.3 程序的加载
      • 8.3 程序的加载

Java-方法

1 概述和作用

一堆代码的集合,可以重复使用

好处:

​ 使程序变得更简洁更清晰

​ 有利于程序维护

​ 提高开发效率

​ 提高代码重用性/复用性

重点: 方法目的,方法声明,方法执行,方法唯一性

2 方法目的

代码重复:相同的功能,相同的代码,不用写很多遍,只写一遍即可,然后重复使用这一段代码,方法就是很多条语句的集合,当我们使用这个方法,就等于运行这段代码

3 方法声明

3.1 语法

[修饰符列表] 返回值类型 方法名(西安舒列表){方法体}

[ ]:可有可无,也可以有多个

3.1.1 方法修饰符列表

权限控制(四选一):public,private,protect,默认(不写)

static(声明静态),abstract,synchronized,final

3.1.2 返回值类型

11种数据类型的任意一种,或者是void(没有返回值)

3.1.3 方法名

合适的标识符即可(符合命名标准)

3.1.4 参数列表

可有可无,可以有多个(使用逗号隔开)

3.1.4.1 形参

形容参数,在方法声明的时候,规定应该传入什么类型的数据

3.1.4.2 实参

实际参数,调用方法的时候,实际传入的数据

3.1.5 方法体

如果有返回值类型,那么方法体中最后一句必须要写return数据,另外return还有终止方法运行的作用

如果没有返回值类型,那么方法中可以没有return语句,如果要加return也可以,但return之后不能有数据,此时return只有终止方法运行的作用

4 方法分类

4.1 静态方法

类体中, 使用static修饰的方法,是静态方法,类相关

4.2 成员方法

类体中, 没有使用static修饰的方法,是成员方法,对象相关

4.3 构造方法

用于创建对象

5 方法调用

方法不调用不执行,调用才执行,并把结果返回到调用处

所以方法声明时,不需要考虑声明的先后顺序

因为执行顺序是看调用顺序,而不是声明顺序,因为声明的时候不执行

5.1 静态方法调用

5.1.1 语法

类名.静态方法(参数值),当前类中,类名可以省略

5.2 成员方法调用

5.2.1 语法

对象.成员方法(参数值)

5.3 构造方法调用

5.3.1 语法

new

6 返回值的使用

6.1 有返回值

如果方法有返回值的时候,必须有return(没有就会报错),而且return之后不能写代码(写了也会报错)

image-20210516183651013

6.2 没有返回值

如果方法没有返回值,可以没有return

image-20210516183732811

7 方法重载(唯一性)

方法唯一性:方法名和参数列表

方法重载:overload

​ 方法名字相同,参数列表不同(个数不同或者类型不同)

在同一个类中,方法名是允许相同的,可以根据不同的参数列表找到某一个方法叫方法重载

优点: 相同功能,只需要记住一个名字,通过不同的参数区分不同的方法即可

image-20210516183918211

8 内存分析

程序:一堆命令的集合,是可执行文件,并且是一个静态概念,一般保存在硬盘中

进程:就是正在执行的程序,是个动态概念,会按照程序设计,一步步在内存中执行

​ 运行起来的程序就是指载入到内存中的可执行程序,这个时候,操作系统会开启一个进程来运行内存中的这个文件对象

​ 如果要关闭某个程序,可以直接结束该进程

8.1 Java中的内存划分

​ Java Runtime Data Area : java运行时数据区,也可以叫JVM内存

​ 内存被划分为5个区域 : 程序计数器,方法区/静态区,栈内存,堆内存,本地方法栈

image-20210516184043164

8.1.1 程序计数器

是一块比较小的内存区域,可以看做是当前执行的字节码位置, 分支 , 循环 , 跳转,异常等都需要依赖于程序计数器

可以理解为保存执行的代码行号,每个方法都会有一个计数器,要么你怎么知道返回值要返回到哪里去

8.1.2 方法区/静态区

保存我们的程序文件(class) , 载入内存后的哪个文件,java中就是class文件

包括方法执行之前,还有代码段,内部的运行常量池

8.1.3 栈内存

别名: 虚拟机栈/VM栈/栈内存

方法是在栈内存中执行的,包括局部变量也是在栈内存

栈内存 : 就是一个以栈数据结构为模型的一段内存空间

栈 : 是一个数据结构,先进后出 , 比如 弹夹

栈的构成因素

栈空间 : 就是指以栈数据结构为模型的一段内存空间(弹夹)

栈帧 : 栈内存中的每一个栈元素,叫栈帧(子弹)

栈底元素 : 是指第一个放入栈空间的栈帧(第一个放入弹夹的子弹,在最下面)

栈顶元素 : 是指最后一个放入栈空间的栈帧(最后一个放入弹夹的子弹,在最上面)

栈操作 :

压栈 : 就是指把栈帧放入栈空间的过程(把子弹放到弹夹的过程)

弹栈 : 就是指把栈帧在栈空间内移出的过程(把子弹从弹夹中打出去的过程)

8.1.4 堆内存

用来存放 根据静态区中的class文件对象,创建的用来保存class定义的数据的对象的空间

用来保存对象(类创建的对象 new)

每个对象的空间 分为3块

​ 1 数据部分 : 成员变量
​ 2 头部 : hashCode值
3 类型 : 是哪个类实例化而来的,保存类文件在静态区的地址

8.1.5本地栈

比如hashCode()方法,前面有个 native(本地)声明, 当我们调用本地方法的时候,对于我们来说,和调用其他方法一样

但是对于JVM来说,还是有区别的,因为需要一个专门的区域来存放,native是C中的关键字

本地方法栈 和 VM栈 结构一样

VM栈用来执行我们的java方法服务的, 而本地方法栈是为了JVM使用native方法服务的

8.2 java执行流程

1 编码

文本编辑器,按照java规则,进行编码,创建.java文件

2 编译

通过javac命令,使用java编译器,对.java文件进行编译,生成.class文件

3 运行

通过java命令,运行.class程序

​ 3.1 开启java虚拟机,把对应的.class文件载入内存中(静态区)

​ 3.2 JVM自动调用该class中的main方法

​ 3.3 main方法执行,JVM会在栈内存中开辟main方法栈帧(只要是方法调用,都会在栈内存开辟栈帧执行方法),然后把main方法中的代码复制进去,准备执行

​ 3.4 如果main方法中 没有其他方法的调用,则安心执行main方法,执行完就终止,JVM就关闭

载入到静态区

​ 3.6 如果main方法中,调用的当前类的方法,则不需要重载载入当前类

​ 3.7 当main方法中调用其他方法的时候,会再去栈内存中开辟对应的方法栈帧,把对应方法的代码复制进去,准备执行

​ 当该方法执行完成之后,方法弹栈,并返回到main方法中的调用处,继续向下执行

​ 一直到main方法执行结束,弹栈,JVM关闭

8.3 程序的加载

1 静态加载 : 程序开始执行,一次性把所有相关的文件,全部载入内存

2 动态加载 : 程序开始执行,先载入当前文件,当用到其他文件的时候,再单独去加载

java 中采用的动态加载

方法调用 就是压栈操作 , 而 方法调用结束,则是弹栈操作
复制进去,准备执行

​ 当该方法执行完成之后,方法弹栈,并返回到main方法中的调用处,继续向下执行

​ 一直到main方法执行结束,弹栈,JVM关闭

8.3 程序的加载

1 静态加载 : 程序开始执行,一次性把所有相关的文件,全部载入内存

2 动态加载 : 程序开始执行,先载入当前文件,当用到其他文件的时候,再单独去加载

java 中采用的动态加载

方法调用 就是压栈操作 , 而 方法调用结束,则是弹栈操作

这篇关于Java-方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!