目录
一、概述
Java中的方法就是C语言中的函数,一个方法就是一个功能单元。其中main方法由Java虚拟机(JVM)自动调用,其它的方法须得在main方法中直接或间接调用才会启动。
注意:与C语言不同的是,Java中的方法在定义时没有先后顺序之分,定义在调用的前后都行。而C语言必须满足先声明后使用的条件,如果定义在调用之后,需先手动声明一下。
二、方法的格式
[修饰符列表] 返回值类型 方法名 (形式参数列表){
方法体;
}
上面格式中的[]代表可选,也就是修饰符可以写可以不写。修饰列表中主要有public、static、protected、private、final等。
返回值类型可以是基本数据类型,也可以是引用数据类型。
public static void main(String[] args) {
//如常见的程序入口main方法
//public static 是修饰符,表示它是公开的静态方法
//void是返回值类型,表示不返回值。如果是int则表示返回整形int的数值
//main是方法名
//String[] args是一个叫做args的字符串数组
//花括号内的就是方法体
}
注意:return是用来结束方法的关键字,不是退出循环的关键字。也可以用return来结束void返回值类型的方法。结束void返回值类型的方法时后面不可以跟任何内容。
三、方法的调用
方法的调用主要是三种方式:
1.类名.方法名()
2.引用.方法名()
引用是类实例化对像后,对像的引用。创建对象的方式是new 类名(),返回结果用变量接收时,这个变量就是引用。
3.直接用new出来的对象调用
class Test01 {
int age;
static String nny;
//返回类型前没有加static修饰的方法是实例方法,必须采用引用.的方式,或者直接new对象调用
public void insFun(){
System.out.println("实例方法");
}
//下面有static修饰的是实例方法,用类名或者引用或者直接new对象都可以调用,但是建议使用类名去调用
public static void staFun() {
System.out.println("静态方法");
}
public static void main(String[] args) {
//类名.静态方法名()
Test01.staFun();//静态方法
//引用.实例方法名()
Test01 t = new Test01();//创建实例对象,t是创建的实例对象的引用
t.insFun();//实例方法
//直接用对象来调用
(new Test01()).insFun();//实例方法
}
}
四、JVM内存简要介绍
这里先简单了解一下
Java虚拟机的内存主要可以分为三大板块(具体来说有五大板块,为了方便入门先介绍三大板块):
栈区:主要是为方法的调用开辟空间,局部变量存储的地方。
堆区:new出来的对象都在堆区,包括数组。实例变量存储的地方。
方法区:主要是加载进来的字节码代码块。又分为常量池和静态域。双引号括起来的字符串都放在常量池当中,各种静态变量,静态代码块都放在静态域中。不过jdk1.7中已经把原本放在方法区中的静态变量、字符串常量池等移到堆中。之后的jdk1.8直接取消了方法区。原方法区中存储的类信息、编译后的代码数据等移动到了元空间(MetaSpace)。
五、方法重载机制(Overload)
方法重载主要指的是在同一个类中,同一个方法名接收不同的参数的现象。
在实际的开发中,我们常常会遇到有很多功能相似,却因为接收的参数不同而不同的方法。Java中提供了这样的机制,可以允许方法名相同,参数列表不同的现象存在,从而使得开发更加便利。
Java区分方法首先通过方法名来区分,如果方法名相同,再通过参数列表区分。
方法重载需要满足以下两个条件:
1.在同一个类中同名才叫重载
2. 同名的方法需要参数列表不同,与修饰符列表和返回值类型无关。
参数列表不同有三种情况:
(1)、参数类型不同
(2)、参数顺序不同
(3)、参数个数不同
public class Test02 {
//方法重载需要在同一个类中,形式参数列表的个数、顺序或者类型不同
public static void myPrint(int i){
System.out.println("打印整形数据"+i);
}
public static void myPrint(float i){
System.out.println("打印浮点型数据"+i);
}
public static void main(String[] args) {
Test02.myPrint(100);
Test02.myPrint(100.01f);
}
}
此外,Java中实际参数是基本数据类型相当于传值调用,是引用数据类型相当于传址调用,传的是地址。