1.函数的定义、调用
1.1函数的定义
public static 返回值类型 函数名(参数列表) {
}
参数列表可以为空为无参函数
返回值类型为void为无返回值函数
1.2函数的调用
函数名(参数列表);
函数不能嵌套定义,但可以嵌套调用(递归)
1.3关于return的使用
给调用者返回一个值,结束该函数的调用。
2.函数的递归调用
2.1递归求解斐波那契数列
class Test {
public static long fib1(int n){
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
return fib1(n-1)+fib1(n-2);
}
}
public static void main(String[] args) {
System.out.println(fib1(5));
}
}
2.2递归求阶乘
class Test {
public static long factorial(int n){
if(n==1){
return 1;
}else{
return n*factorial(n-1);
}
}
public static void main(String[] args) {
System.out.println(factorial(5));
}
}
2.3关于递归的一些问题
递归有一个允许的递归深度问题,具体是多深,我也忘记了。但是请不要使用无限递归,多了会报一个栈溢出错误。
3.变量作用域
3.1全局变量与局部变量
1.通常函数外面是属于全局变量,在其他函数中可以调用,这其实是default权限(这将在后面面向对象部分提到)
2.函数内部定义的变量和代码块中定义的变量起作用范围就是在整个函数内或代码块中,出了这个代码块或函数该变量将不可见。属于局部变量。函数参数也是局部变量的作用范围。
3.
4.可变参数
4.1如何使用可变参数
class Test {
public static int sum(int ...nums){
int sum = 0;
for (int num : nums) {
sum+=num;
}
return sum;
}
public static void main(String[] args) {
System.out.println(sum(1,2,3,4,5,6,7,8,9));
}
}
4.2关于可变参数需要注意的几点
1.可变参数位置问题,可变参数必须放在参数列表最后
2.可变参数可以看做是数组,传值的时候可以传数组
3.可变参数最多只能有一个
4.参数传递的问题
基本数据类型:形式参数的改变不影响实际参数。传值传递
引用数据类型:形式参数的改变直接影响实际参数。传引用传递
请问java中的参数传递既有基本类型,也有引用类型,那么,引用类型到底是值传递还是引用传递?
答:值传递。java中只有值传递,引用类型传递的也是一个值,地址值。
5.命令行参数
5.1命令行参数的使用
class Test {
public static void main(String[] args) {
for (String string : args) {
if("hello".equals(string)){
System.out.println("this is hello cmd");
}else if("bye".equals(string)){
System.out.println("this is bye cmd!I'll quit");
}
}
}
}
5.2 cmd下如何输入命令行参数
5.3eclipse下如何传入命令行参数
想要在Eclipse中输入命令行参数,可以在目录中该程序上右键,选择“Run As”,选择”Run configurations”,如图:
运行结果在下方的console了部分