java 函数详解
基本概念
函数是定义在类中的一段独立的代码块,用来实现某个功能,解决了重复性代码的问题。Java中,函数又被称为方法。
函数的主要作用是为了提高程序的复用性和可读性。
函数都是在栈内存中运行;运行的函数处在栈顶。
函数格式:
修饰符 返回值类型 方法名 ( [ 参数类型1 参数名1,参数类型2 参数名2.... ] ){
// [ ] 里面表示可选项,即参数不是必须的
执行语句...
return 返回值; //返回值的类型必须与返回值类型一致
}
说明:
- 修饰符:可以是访问修饰符,也可以说是函数修饰符(abstract、final、
static、synchronized),还可以是两者的组合。 - 返回值类型:用于限定函数返回值的数据类型。
- 方法名:自己定义,符合标识符命名规则就行;驼峰命名规则 :单个单词首字母小写,多个单词后面的单词首字母大写。
- 参数类型:用于限定调用函数时传递的数据类型。
- 参数名:是一个变量,用来接收调用方法时传递的数据。
- return:用来接收方法以及返回函数指定类型的值。
- 返回值:这个值会返回给函数的调用者。
注意:
- 方法的返回值最多只能有一个,不能返回多个值
- 方法返回值的类型必须兼容,例如,如果返回值的数据类型为int ,则不能返回 String 型值。
- void 表示不确定返回值类型,不能理解为没有返回值,只是返回值的类型不确定而已;故不能定义形式参数变量来接收;
主函数main() 解释
常见的 java 主函数格式如下:
public static void main(String[] args)
- 作用:main函数是JVM识别调用的入口函数。
public static void main(String[] args) 含义
public static void main(String[] args) 含义:
- public:访问权限修饰符。因为权限必须最大,所以使用public。(具体的权限信息找度娘)。
- static: 静态修饰符。首先你必须知道main方法是一个程序的入口,如果写成非静态,那么就必须实例化一个对象再来调用它,入口函数何必难为入口呢?写成static不需要实例化对象,直接用主函数所属类名调用即可。
- void: 返回值类型空。那你可能要问,为什么不写成int?
Java中,JVM对main函数有限制,不能有返回值。写成int,让void和jvm情何以堪? - main: 函数名。切记不要和关键字搞混。它只是一个被JVM识别的固定的名字。
- String[] args: 参数类型以及参数名称。你可能还要问,为什么是String类型,为什么参数名是args?
String类型是Java的规范,不是你我能决定的;而args完全可以写成其他的合法标识符。但是为了统一起见使用args,它代表arguments:参数的意思。
因此,定义成public static void main(String[] args)貌似是必须的。
public class JavaMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(args); //形参值。
System.out.println(args.length); //形参长度。
System.out.println(args[0]); //数组第一个元素值。
}
}
结果为:
[Ljava.lang.String;@15db9742
0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Packger.JavaMain.main(JavaMain.java:11)
(1)"[Ljava.lang.String;@15db9742" :[Ljava.lang.String是clss名字,[ 表示一维数组,[[表示二维数组,L表示是对象类型,java.lang.String对象的标准类名;@15db9742代表哈希值。由此可知:主函数参数是一个类型为String名称为args的一维数组做形参。
(2)0 表示没有传入参数。
(3)因为没有传入参数,所以数组的长度为0,所以访问第一个数组元素产生越界。
函数的参数传递
(1).形式参数:函数定义时的参数为形式参数------>简称形参
(2).实际参数:函数调用时的参数为实际参数 ------>简称实参
参数传递:只能有实参传给形参
注意:
- 调用带参方法时,必须保证实参和形参在个数、顺序、类型上都要保持一致.
- 调用方法时,实参不需要指定数据类型
- 方法的参数可以是基本是数据类型,也可以是引用数据类型,如 String、数组;还可以是自定义数据类型
- 当方法参数有多个时,多个参数间以逗号分隔
java自定义方法(函数)
1. 无参无返回值方法
如果方法中不包含参数,且没有返回值,我们称为无参无返回值方法
范例:
public class TestDemo{
public static void main(String[] agrs){
print(); //主方法里面,直接调用方法
print();
print();
}
public static void print(){ //方法定义
System.out.println("Hello World");
System.out.println("Hello World");
System.out.println("Hello World");
}
}
2. 无参带返回值方法
范例:
class JavaMain
{
public static void main(String[] args)
{
JavaMain test1 = new JavaMain();
int sum = test1.sum();
System.out.println("sum"+sum);
}
public int sum() {
int a = 5;
int b = 6;
int sum = a+b;
return sum;
}
}
在 sum() 方法中,返回值类型为 int 类型,因此在方法体中必须 使用return 返回一个整数值。
3. 有参无返回值方法
范例:
class JavaMain
{
public static void main(String[] agrs){
print("Hello World"); //主方法里面,直接调用方法
print("author");
}
public static void print(String msg){
System.out.println(msg);
}
}
结果为:
Hello World
author
函数调用方式:
- 对象名.方法名(实参1,实参2,…… ,实参n)
有参有返回值方法
范例:
class JavaMain
{
public static void main(String[] agrs){
int result = add(10,20) ;
System.out.println(result) ;
//既然方法有返回值,那么这些返回值也可以直接输出
System.out.println(add(100,200)) ;
}
public static int add(int x,int y){
return x + y ;
}
}
输出结果为:
30
300
完整示例:
public class method {
/*
* 程序入口,主函数 .
* @ 方法 <==> 函数,指的是同一个东西.
*/
public static void main(String[] args) {
// 通过函数名调用
method01();
method02(9, 3);
System.out.println("5+6=" + add(5, 6));
}
/*
* @ 函数的格式为:
* @ 访问修饰符 返回值类型 函数名(参数类型1 参数名1,参数类型2 参数名2....){
* @ 执行语句
* @ return 返回值;//返回值的类型必须与返回值类型一致
* @ }
*/
//声明一个静态函数method01() 无参数无返回值
static void method01() {
System.out.println("这是method01方法,可以通过method01();调用.");
// 这个return可以省略.每个函数都是以return结束,返回到函数调用处
return;
}
//有参数无返回值
static void method02(int num1, int num2) {
method01();
System.out.println("这是method02方法,第一个参数是" + num1 + "第二个参数是" + num2);
}
/*
* 有返回值的返回值类型要和要返回的数据类型一致
* @ 例如:计算两个整数的和,结果仍然是整型,返回值类型为int.返回值类型可以说基本数据类型,也可是自定义的数据类型
*/
static int add(int num1, int num2) {
int sum = 0; // 声明一个整形变量并初始化为0
sum = num1 + num2;// 将num1和num2的和赋值给sum
return sum;// 将sum的值返回到调用处
}
}
参考博客:
https://blog.csdn.net/hohiuching/article/details/77480471