对相同代码块的提取和封装,并对其进行命名:函数名。通过函数名可是实现函数的调用
public staric:修饰符
int:返回值类型
add:函数名
(int a,int b):函数的参数,形参
返回值类型:函数调用完成后,如果希望返回一个结果,那么在返回值类型处就写该结果,
对应的类型,在函数最后面可以通过return值;方式结果返回给函数调用者。
如果不需要拿到函数执行的如果,返回值类型处就写void,表示无返回值,在函数最后面不饿能写return,
或者只能写单独的一个return,表示程序执行到此结束。
函数的调用:通过函数名和参数值来进行调用
add(20,30);
20,30叫做实参,按顺序传递给形参a和b
public static void printAny(String s) { //··带参数的函数·· //String s:形参,形式参数,作用就是规定传给函数的值是什么类型 //传给函数的值会赋值给形参s System.out.print(s); } public static void main(String[] args) { //mian函数,程序的入口 //通过名称和实参值调用函数: printAny("AAA");//AAA:实参,在函数调用过程中会赋值给形参String s;相当于String s="AAA"; printA(); //System.out.println("AAA"); printB(); //System.out.println("BBB"); printA(); //System.out.println("AAA"); printB(); //System.out.println("BBB"); add(10,20); add(20,10); add(10,23); int sum=add(10,50); //带返回值的函数 实参 System.out.println("sum="+sum); } //函数不可以嵌套 ,在类里边写 //定义一个函数主要用于打印输出AAA public static void printA() { System.out.println("AAA"); } //定义一个函数主要用于打印输出BBB public static void printB() { System.out.println("BBB"); System.out.println("=================================="); } //定义一个函数,专门用于计算俩个数的和 int a=10; int b=20; //将俩个数的和通过返回值(出口)返回回来 public static int add(int a,int b) { //void 空的,无返回值 System.out.println("a="+a); System.out.println("b="+b); System.out.println("a+b="+a+b); int sum=a+b; //形参 return sum; //return返回值 sum }函数的重载Overload:
函数名相同,参数不同。
===一个类里面有俩个方法(函数),用的相同的名字只是参数不同
public class ChongZai { public static void main(String[] args) { int sum=add(10,20); System.out.println(sum); String s=add(10,"20"); System.out.println(s); int b=add(10,20,30); System.out.println(b); String s1=add("aaa",10); System.out.println(s1); } //定义一个函数,计算俩个数的和 public static int add(int a,int b) { return a+b; } //重复调用 // public static int add(int a,int b) { // return a+b; // } //定义一个函数,计算三个数的和 public static int add(int a,int b,int c) { return a+b+c; } //类型不一样 public static String add(int a,String b) { return a+b; } //类型不一样/顺序也不一样 public static String add(String a,int b) { return a+b; } }可变参数:
当传入函数的参数个数不确定时,可以使用...语法来定义可变参数,可变参数本质上是一个数组,在函数内部可以当作数组一样取操作。
注:1.如果函数中除了可变参数,还有其他类型的参数,那么可变参数必须要写在参数列表的最后面
2.在函数中最多只允许出现一次可变参数。
public class KeBianCanShu { public static void main(String[] args) { int [] arr= {10,20,30}; int sum=add(arr); System.out.println(sum); } //定义一个函数,用于累加若干个整数和 //传入几个整数,就累加这几个整数并返回 // public static int add(int arr[]) { // int sum=0; // for(int i=0;i函数递归:
函数自己调用自己或者俩个函数互相调用
注意:递归必须指定结束条件,否则StackOverflowError,栈内存溢出。
递归效率比较低,尽量避免使用。
使用场景:
求阶乘
求斐波那契数列
快速排序
二叉树
文件夹遍历
数据库自连接
······
public class DiGui { public static void main(String[] args) { a(); int jc=f(3); System.out.println(jc); } //递归:函数相互调用 //能结束的递归:正向递归 不能结束的:反向递归 //自己也可以调用自己 public static void a() { System.out.println("aaa"); b(); //在a里边调用b的函数 } public static void b() { System.out.println("bbb"); // a(); //b里调用a } //递归的引用 阶乘! public static int f(int x) { if(x==1) { return 1; } return x*f(x-1); }标识符:
由程序员自己定义的包名、变量名、和函数名;
-
强制性规范
能使用:字母、数字、下划线、、$组成
不能以数字开头
不能使用java中的关键字:
-
建议性规范
变量名和标识符遵循小驼峰命名法:
有多个连续的单词充当变量名时,第一个单子首字母小写,后边的单词每个首字母大写。
例:------int classRoomCount
变量/标识符命名要见名之意:年龄----age
类名
类名要遵循大驼峰命名法:首字母大写、有多个连续的单词充当类名时,每个单词首字母大写。
包名
首字母建议小写、包名命名建议为公司域名的倒置--------com.公司.项目名.模块名