🦫方法
2021-3-4
| 2023-8-3
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
对于一个java程序来说,如果没有“方法”,会存在什么问题?代码无法得到复用
怎么提高复用性?可以定义方法,然后需要使用该功能的时候,直接调用一下方法即可
 

方法的定义

修饰符列表不是必选项,是可选的,方法的修饰符可以包括:public,protected,private,abstract,static,final,synchronized,其中public,protected,private不能同时存在
 
如果没有返回值使用void关键字;如果存在返回值可以是基本类型和引用类型。 如果存在返回值,使用return语句。return语句后面不能再执行语句,因为不可能会执行到,编译器会发生错误。只要有“return”关键字的语句执行,当前方法必然结束。
如果返回值类型是void,那么在方法体当中不能有“return 值;”这样的语句。但是可以有“return;”语句,这个语句“return;”的作用就是用来终止当前方法的。
 
形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放。
 

方法的调用

实参和形参的类型必须一 一对应,个数也要一 一对应
 
方法调用的时候,什么时候“类名.”是可以省略的,什么时候不能省略? a()方法调用b()方法的时候,a和b方法都在同一个类中,“类名.”可以省略,不在同一个类中“类名.”不能省略。
 

可变参数

可变参数用类型...定义,可变参数相当于数组类型:
 
完全可以把可变参数改写为String[]类型:
但是,调用方需要自己先构造String[],比较麻烦
另一个问题是,调用方可以传入null
而可变参数可以保证无法传入null,因为传入0个参数时,接收到的实际值是一个空数组而不是null
 
 

方法执行过程中,内存在JVM的分配

JVM三块主要的内存:栈内存、堆内存、方法区内存。堆内存和方法区内存各有一个,一个线程一个栈内存。
  • 方法区最先有数据:方法区中放代码片段,存放class字节码,在类加载的时候载入
  • 栈内存:方法调用的时候,该方法需要的内存空间在栈中分配;方法不调用是不会在栈中分配空间的。栈中主要存储的是方法体中的局部变量。
  • 堆内存:在程序执行过程中使用new创建对象时,对象内部有实例变量,所以实例变量存储在堆内存中
notion image
notion image
变量分类:
  • 局部变量:类的方法中的变量
  • 成员变量:独立于方法之外的变量
    • 类变量(静态变量):有 static 修饰,存储在方法区内存中
    • 实例变量:没有 static 修饰
 
 
方法只有在调用的时候才会在栈中分配空间,并且调用时就是压栈。 方法执行结束之后,该方法所需要的空间就会释放,此时发生弹栈动作
notion image
 
notion image
 
notion image
 
 
notion image
notion image
  • Java
  • 控制语句方法重载overload
    目录