方法声明
定义方法
- 方法是完成某个功能的一组语句,通常将常用的功能写成一个方法。
- 定义方法就是编写一段有特定功能的代码,在程序中使用同样功能的地方,没有必要重复编写同样的代码,只要调用定义好的方法就可以。可以实现代码的重用。简化了程序的编写和维护工作。
- 方法声明或称为定义方法,注意:方法声明不能嵌套,也不能在类外声明
示例
public class Hello {
public static void main(String[] args) {
}
}
方法使用大括号包含语句块称为方法体,用于执行特定的功能操作。方法体当中使用return关键字,它的作用是结束方法执行,并且把方法的执行(运算)结果返回到方法外部。
返回值:方法在执行完毕后返回给调用它的程序的数据
返回值类型:方法要返回的结果的数据类型
示例
public class Hello {
public static int square( int x ){
int y=x*x;
return y; //返回值
}
}
方法名词解释
-
修饰符:
- public 、static 被称为修饰符(后续会详细讲解它们); 返回值类型:
- 用来说明该方法运算结果的类型。如果返回其他类型,编译就可能出错; 方法名:
- 它作为调用时引用方法的标识; 形参列表:
- 在方法被调用时用于接受外部传入的变量称为形式参数简称为 形参,方法的形参个数可以是0个到多个,每个参数前面要声明参数的数据类型称为 参数类型;每个参数要用逗号分开。也可以一个参数都没有。 方法体:
- 它是一个语句块,执行特定的功能操作。对于有返回值类型的方法,方法体当中最后一个语句是return关键字,它的作用是把方法的执行(运算)结果返回到方法外部。 return 表达式:
- return是关键字,作用是将return后面表达式的结果作为方法的返回值。需要注意表达式的类型,必须与方法头中声明的“返回类型”相 匹配。
方法的分类
- 根据参数个数:
- 无参方法
- 有参方法:
- 参数类型为基本数据类型
- 参数类型为引用数据类型
- 根据返回值类型:
- 有返回值的方法:
- 返回值类型为基本数据类型
- 返回值类型为引用数据类型
- 无返回值的方法:
- 返回值类型使用void关键字
- 有返回值的方法:
方法示例
无参无返回值
- 无返回值对于无返回值类型的方法,它不向本方法外部返回任何值。定义这样的方法时,声明方法返回类型的位置不能省略不写,而应该用关键字void来代替,即 “空”的意思。
public class FunctionRect{
public static void drawRect(){
int width=10;
int height=5;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
System.out.print("#");
}
System.out.println();
}
}
}
无参有返回值
- 方法返回值:使用return关键字,完成方法的返回值遇到return语句,方法结束执行,后续语句不执行。因此在方法中return语句只能执行一次。方法的返回值,必须与方法声明中的返回值类型匹配
public class FunctionAdd{
public static int add(){
x=100;
y=200;
int z=x+y;
return z;
}
}
有参无返回值
- 有参方法:形参必须注明数据类型作用域:方法参数的生命周期是方法语句块。方法的参数是已经初始化完成并赋值,因此在方法中可以参与运算。
public class FunctionRect{
static void drawRect(int width,int height){
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
System.out.print("#");
}
System.out.println();
}
}
}
有参有返回值
public class FunctionAdd{
public static int add(int x,int y) {
int z=x+y;
return z;
}
}
方法调用
- 所谓调用方法,其实就是给方法的入口传入一些值(参数),然后在出口得到方法执行的结果(返回值)。
- 注意:需要根据方法名称调用方法,方法只有在被调用后才生效。
- 方法调用分类:
- 按照参数
- 无参方法的调用
- 有参方法的调用
- 按照返回值
- 无返回值方法的调用
- 有返回值方法的调用
- 按照位置(下一章讲解)
- 同一个类中方法调用
- 不同类中方法调用
- 按照参数
无参无返回值方法调用
public class 无参无返回值方法调用 {
// 多个方法定义没有顺序要求
// 定义输出“周五了,我最开心”的方法
public static void show() {
System.out.println("周五了,我最开心");
}
public static void main(String[] args) {
System.out.println("主方法开始运行");
// 想要运行某个方法,必须通过代码调用才可以
// 通过方法名调用
// 定义的方法可以被多次调用。
show();
show();
}
}
有参无返回值方法调用
- 调用有参方法:给方法的入口传入一些值(实参),给方法传入参数的过程,称为“传参”。方法传参的过程就是把实参赋值给对应的形参的过程,因此要求实参和形参的数量、类型、顺序必须匹配。
- 调用方法时,实参直接在括号中,不需要类型声明。实参可以是常量,也可以是有值的变量。
public class 有参无返回值方法调用 {
// 定义输出一个整数平方值的方法
// 方法定义时的参数 也可称之为形参
public static void showSquare(int m) {
System.out.println( m+"的平方"+(m*m) );
}
public static void main(String[] args) {
System.out.println("主方法开始运行");
// 调用有参方法时 需要在小括号中 传参 (传的数据)
// 传参本质就是变量赋值
// 调用时传入的参数称之为实参
// 传参是需要注意 实参的个数和类型要和形参完全匹配
showSquare( 10 );
}
}
有参有返回值方法调用
如果方法有返回值,调用方法可以得到该方法的返回值,然后赋值给与方法返回值类型相同的变量。
import java.util.Scanner;
public class 有参有返回值方法调用 {
// 定义计算两个整数平方和的方法
public static int sumSquare( int x,int y ) {
return x*x+y*y;
}
public static void main(String[] args) {
System.out.println("主方法开始运行");
// 调用方法
int m = sumSquare(10,20);
// 调用有返回值方法时,定义一个变量来接收返回值
// 该变量类型必须和返回值类型一致
System.out.println( m );
}
}
方法中不同数据类型改变形参
public class 改变形参比较 {
public static void getX(int x){
x = 3*x;
}
public static void getY(int[] y){
y[0] = 3*y[0];
}
public static void main(String[] args) {
int x = 10;
System.out.println("x调用方法前:" +x);
getX(x);
System.out.println("x调用方法后:" +x);
int[] y = {10};
System.out.println("y调用方法前:" +y[0]);
getY(y);
System.out.println("y调用方法后:" +y[0]);
}
}
方法重载(overload)
- 方法的重载就是在同一个类中允许同时存在一个以上同名的方法
- 方法重载的规则
- 方法名称相同
- 方法的参数必须不同
- 参数个数不同或参数类型不同
- 方法的返回值类型可以相同,也可以不同
示例
练习
1、编写一个方法,根据传入商品总价,计算返回折扣后新价格。折扣规则如下:
总价<100,不打折
总价在100到199之间,打9.5折总价在200到999之间,打9折
总价在1000以上,打8.5折。
import java.util.Scanner;
public class 练习第一题 {
// 1、编写一个方法,根据传入商品总价,计算返回折扣后新价格。
// 折扣规则如下:总价<100,不打折 总价在100到199之间,打9.5折
// 总价在200到999之间,打9折 总价在1000以上,打8.5折
public static double disCount(double sum) {
if ( sum>0&&sum<100 ) {
sum = sum;
}else if ( sum>=100&&sum<=199) {
sum = sum*0.95;
}else if ( sum>199&&sum<1000) {
sum = sum*0.9;
}else if ( sum>=1000) {
sum = sum*0.85;
}
return sum;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double sum;
System.out.println("请输入总价格");
sum = sc.nextDouble();
System.out.println("折后价格是"+disCount(sum));
}
}
2、编写一个方法,传入一个年份,输出该年份是平年还是闰年。
import java.util.Scanner;
public class 练习第二题 {
// 2、编写一个方法,传入一个年份,输出该年份是平年还是闰年。
public static String judgeYear(int year) {
// 年份能被4整除并且不能被100整除
if ( year%4==0 && year%100!=0 ) {
return "闰年";
} else {
return "平年";
}
}
public static void main(String[] args) {
int year; // 一个年份
Scanner sc = new Scanner(System.in);
year = sc.nextInt();
System.out.println(year+"是"+judgeYear(year));
}
}