方法是一种语法结构,它可以把一段代码封装成一个功能,可以重复调用,以此提高代码的复用性,提高开发效率,让程序逻辑更加清晰。
(1)定义一个方法的语法格式如下:
[public] returnType methodName ([paramList]) {
//方法体
return 返回值;
}
案例如下:
public int sum(int x,int y){
int z = x + y;
return z;
}
访问修饰符,方法的访问修饰符有public、protected、private,也可以缺省访问修饰符。
方法返回值,returnType为方法的返回值类型,返回值类型可以是基本数据类型和引用数据类型,也可以无返回值用void表示。
方法名,methodName为方法名,采用小驼峰命名规则。
方法参数,方法参数也称形式参数,是在方法名后面一对括号内的参数列表,方法可以没有参数,也可以多个参数,多个参数用逗号隔开。
方法体,方法体实现业务逻辑和进行数据返回,无返回值类型方法体内可以不写return或只写return;。
方法的使用,方法必须调用才能使用,调用格式:方法名(…)。
(2)方法案例
键盘输入两个整数,求两个数的和,求和部分使用sum( )方法实现。
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个数:");
int x = input.nextInt();
System.out.print("请输入第二个数:");
int y = input.nextInt();
int z = sum(x,y); //调用求和方法
System.out.println("和为:" + z);
}
/**
* 求两个整数和的方法
* @param x
* @param y
* @return
*/
public static int sum(int x,int y){
int z = x + y;
return z;
}
}
方法的参数传递机制是值传递。
(1)基本类型参数传递
基本类型在传输实参给方法的形参的时候,并不是传输实参变量本身,而是传输实参变量中存储的数据值,方法调用结束后对实参并没有影响。
其中,实参是在方法内部定义的变量,形参是在方法定义时括号中所声明的参数。
基本类型参数传递案例如下:
public class Test {
public static void main(String[] args) {
int x = 10;
change(x); //调用change()方法,x为实参
System.out.println("第三次输出:x = " + x); //10
}
public static void change(int x){ // x为行参
System.out.println("第一次输出:x = " + x); //10
x = 20;
System.out.println("第二次输出:x = " + x); //20
}
}
(2)引用类型参数传递
引用类型的参数传输存储的引用值(地址值),因此在方法调用后,方法内部的实参可能会发生变化。
引用类型参数传递案例如下:
public class Test {
public static void main(String[] args) {
int[] nums = {1,2,3};
change(nums); //调用change()方法
System.out.println("第三次输出:nums[0] = " + nums[0]); //10
}
public static void change(int[] nums){
System.out.println("第一次输出:nums[0] = " + nums[0]); //1
nums[0] = 10;
System.out.println("第二次输出:nums[0] = " + nums[0]); //10
}
}
所谓方法重载(overloading),就是在同一个作用域内,方法名相同但参数个数或者参数类型不同的方法。
注意:仅返回值不同不能区分重载的方法。
方法重载案例如下:
public class Test {
public static void main(String[] args) {
//测试1
int result1 = sum(1,2);
System.out.println("测试1结果:" + result1);
//测试2
int result2 = sum(1,2,3);
System.out.println("测试2结果:" + result1);
//测试3
double result3 = sum(1.1,2.2);
System.out.println("测试3结果:" + result1);
}
public static int sum(int a,int b){
System.out.println("调用重载方法1");
return a + b;
}
public static int sum(int a,int b,int c){
System.out.println("调用重载方法2");
return a + b + c;
}
public static double sum(double a,double b){
System.out.println("调用重载方法3");
return a + b;
}
}
递归是解决复杂问题的一种常见方法,其基本思想就是把问题逐渐简单化,最后实现问题的求解。
(1)方法递归分析
求正整数n的阶乘n!,就可以通过递归实现,n!可按递归定义如下:
当(n>0),n! = n ×(n-1)!
当(n=0),n! = 1
设计算n!的方法为factor(n),则该算法的简单描述如下:
if(n == 0){
return 1;
} else{
return n * factor(n-1) ;
}
(2)方法递归案例
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = input.nextInt();
long result = factor(num);
System.out.println(num + "!=" + result);
}
public static long factor(long n){
if(n == 0){
return 1;
}else{
return n * factor(n-1);
}
}
}
回文素数是指一个数同时为素数和回文数,其中素数一般指质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。例如131是一个素数,同时也是一个回文数,757也是回文数。编写程序,显示1000以内的回文素数。
public class Test {
public static void main(String[] args) {
for(int i=2;i<=1000;i++){
if(isSushu(i) && isHuiwen(i)){
System.out.println("回文素数:" + i);
}
}
}
/**
* 判断是是否为素数
*/
public static boolean isSushu(int num){
for(int i=2;i<=Math.sqrt(num);i++){
if(num % i == 0){
return false;
}
}
return true;
}
/**
* 判断是否为回文
*/
public static boolean isHuiwen(int num){
int x,y;
x = num; //x为原来的数
y = 0; //y为反转的熟
while(num != 0){
y = y * 10 + num % 10;
num = num / 10;
}
if(x == y){
return true;
}else{
return false;
}
}
}