Java SE-Method
1、方法的定义和调用
Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码
方法包括以下要素:
-
修饰符:可选,告诉编译器如何调用方法,定义方法的访问类型。如public,static(可以直接调用,不带的话需创建对象调用)。
-
返回值类型:
-
方法名:方法的实际名称,表达方法的具体作用即可。
-
参数类型:参数可以在方法调用时传递值给方法,(void)方法可以不含参数;
形式参数:方法被调用时接收外界输入的数据;
实参:调用方法时实际传给方法的数据。
-
方法体:方法保护的具体语句,定义该方法的功能。
public class Demo01 {
public static void main(String[] args) {
System.out.println(sum(1,2));
min(1,2);
min(2,1);//方法调用时直接调用方法!
}
public static int sum (int a,int b){//静态的方法才能直接调用,否则要new对象
return (a+b);
}
public static void min(int a,int b){//void表示无类型,表示无返回值,方法调用时直接调用方法!
if(a<b){
System.out.println("a最小");
}else{
System.out.println("b最小");
}
return;
}
}public class Demo02 {
public static void main(String[] args) {
System.out.println(max(10,20));
System.out.println(max(20,20));
}
public static int max(int a,int b){
int max = 0;
if(a==b){
System.out.println("a==b");//在return之前可以输出
return 0; //直接终止方法,返回数值0
}
if(a>b){
max = a;
}else {
max = b;
}
return max;//除viod类型方法,其他类型方法必须带返回值
}
}2、方法的重载
-
方法名时一样的
-
参数类型,个数可以不一样
-
调用时虚拟机根据实参的类型调用具体函数
public class Demo01 {
public static void main(String[] args) {
System.out.println(sum(1,2));
System.out.println(sum(1.0,2.9));
}
public static int sum (int a,int b){//静态的方法才能直接调用,否则要new对象
return (a+b);
}
public static int sum (double a,double b){//这里改了数据类型
return (int)(a+b);//这里强制转换了数据类型
}
}3、命令行传递参数
package com.tang11.method;//带包的类,在cmd运行时很麻烦
public class Demo03 {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("this is"+i+"code:"+args[i]);//cmd编译要英文的,不然容易出错
}
}
}
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src\com\tang11\method>javac Demo03.java
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src\com\tang11\method>java Demo03
错误: 找不到或无法加载主类 Demo03
//上一级文件夹
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src\com\tang11\method>cd ../
//上一级文件夹
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src\com\tang11>cd ../
//上一级文件夹
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src\com>cd ../
//运行class文件
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src>java com.tang11.method.Demo03
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src>this tang home
'this' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
//输入命令参数
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src>java com.tang11.method.Demo03 this my home
this is0code:this
this is1code:my
this is2code:home
C:\Users\86152\Desktop\study\code\JavaSE\基础语法\src>4、可变参数
-
一个方法只能有一个可变参数
-
可变参数要放在参数的最后面
-
可变参数相当于一个数组,如果如果参数少于方法调用的数组数量会报错
public class Demo04 {
public static void main(String[] args) {
max(22.3,44.44);
}
public static void max(double ...number) {
if(number.length==0){
System.out.println("out");
return;
}
System.out.println(number[0]);
System.out.println(number[1]);
System.out.println(number[2]);
System.out.println(number[3]);
return;
}
}5、递归
1、递归要有界限,不能无限调用,否则会内存崩掉,递归一定要有什么时候不调用自身 2、尽量不用递归 3、递归的层数尽量少一些,否则内存会溢出 4、Java是栈模式,最底层是main函数,如果调用函数楼房会越来越高,第一层,第二层...无限叠加,这样会使程序崩溃
public class Demo05 {
public static void main(String[] args) {
System.out.println(f(5));//5!=5*4*3*2*1=120,用递归算阶乘
/*
1、递归要有界限,不能无限调用,否则会内存崩掉
2、尽量不用递归
3、递归的层数尽量少一些,否则内存会溢出
4、java是栈模式,最底层是main函数,如果调用函数楼房会越来越高,第一层,第二层...无线叠加,这样会使程序崩溃
*/
}
public static int f(int i){//先求最小数,在逆推最大的数的值
if(i==1){
return 1;//递归一定要有什么时候不调用自身
}else{
return i*f(i-1);//5*f(4)->4*f(3)->3*f(2)->2*f(1)*->2*1,
// 程序运行时,前面的方法在还在等待的,后面的方法得出结果,
// 后面的结果解决上一层方法待解决问题
}
}
} -
-
浙公网安备 33010602011771号