java方法
方法可以理解为要做某件事情,而采取的解决办法。
在java中,方法就是用来完成解决某件事情或实现某个功能的办法。
方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值。
可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法。方法一般都有一个返回值,用来作为事情的处理结果。
Tips:
类里面只用于定义:定义变量,容器,方法,其他处理语句不能写。
方法里不能再定义方法。
1语法格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,......){
执行语句
………
return 返回值;
}
1)修饰符:public static(目前只记这一种就可以)
2)返回值类型:方法结束后想要给调用者的数据类型(基本数据类型,引用数据类型都可以)。void就是没有返回值类型,不能写return。如果不是void,则必须有return。
3)方法名:符合标识符规定即可
4)参数列表:需要外界传入参与方法中运算的值,也叫形参(如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。)
5)return关键字:用于结束方法以及返回方法指定类型的值
6)返回值:被return语句返回的值,该值会返回给调用者
例:计算圆的面积
class Demo01
{
public static void main(String[] args)
{
//方法调用,并用一个变量接收返回值
double area=getArea(1.2);
System.out.println("圆的面积为"+area);
}
//方法定义
public static double getArea(double r){
double area=Math.PI*r*r; //计算圆的面积
return area; //将结果返回给调用者
}
}

2 内存图:

弹栈:方法执行完就弹栈(后进先出)
3 练习1:定义无返回值无参数方法,打印3行,每行3个*号的矩形
class Demo02{
public static void main(String[] args){
printStar();
}
public static void printStar(){
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
System.out.print("*");
}
System.out.println();
}
}
}

练习2:定义有返回值无参数方法,如键盘录入得到一个整数
import java.util.Scanner;
class InNum
{
public static void main(String[] args){
int n=getNum();
System.out.println("录入的数为"+n);
}
public static int getNum(){
Scanner sc=new Scanner(System.in);
System.out.print("请输入一个整数:");
int n=sc.nextInt();
return n;
}
}

练习3:定义无返回值有参数方法,如打印指定M行,每行N个*号的矩形
class Star
{
public static void main(String[] args)
{
printStar(5,4);
}
//定义无返回值有参数方法,如打印指定M行,每行N个*号的矩形
public static void printStar(int m,int n){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
System.out.print("*");
}
System.out.println();
}
}
}

练习4:定义有返回值有参数方法,如求三个数的平均值
class AvgNum
{
public static void main(String[] args)
{
double avg=calculate(10,10,10);
System.out.println(avg);
}
public static double calculate(double n1,double n2,double n3){
double avg=(n1+n1+n1)/3;
return avg;
}
}

4方法的重载
4.1定义
Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数或顺序必须不同,这就是方法的重载。
通过传不同的参数,来调用不同的方法。
4.2注意事项
1)在一个类中
2)方法名相同
3)参数:个数,类型,顺序,只要有一个不同,就是重载
4)与返回值无关(如void method(int x)与int method(int y) 不是方法重载,不能同时存在,属于重复定义)
5)与具体的变量标识符无关(如method(int x)与method(int y) 不是方法重载,不能同时存在,属于重复定义)
System.out.println()就是一个方法重载,
在这个文件中,
可以找到:


等等很多个,这就是方法重载,每次传的参数类型不同。
例:
class Demo03
{
public static void main(String[] args)
{
int sum1=getSum(1,2);
System.out.println("和为"+sum1);
double sum2=getSum(1.1,2.2);
System.out.println("和为"+sum2);
double sum3=getSum(1,2.9);
System.out.println("和为"+sum3);
double sum4=getSum(1.8,2);
System.out.println("和为"+sum4);
}
//定义方法计算两个数之和
public static int getSum(int a,int b){
return a+b;
}
//方法重载
public static double getSum(double a,double b){
return a+b;
}
public static double getSum(int a,double b){
return a+b;
}
public static double getSum(double a,int b){
return a+b;
}
}

如果这样写,就会报错:
public static double getSum(int a,int b){
return a+b;
}
public static int getSum(int c,int d){
return c+d;
}

5 参数传递
调用一个方法时,会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,称为参数传递。
5.1
值传递:
当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响
引用传递:
当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响
例:
class Demo04
{
public static void main(String[] args)
{
int a=0;
double b=1;
method01(a,b);
System.out.println("a的值为"+a);
System.out.println("b的值为"+b);
}
public static void method01(int a,double b){
a=20;
b=30;
}
}

class Demo05
{
public static void main(String[] args)
{
int[] arr={1,0};
method01(arr);
System.out.println("arr[0]的值为"+arr[0]);
}
public static void method01(int[] arr){
arr[0]=20;
}
}

5.2参数传递图解
因为数组进了堆,所以值会被改变

6 练习:
1)点名器
import java.util.Scanner;
import java.util.Random;
class CallName
{
public static void main(String[] args)
{
String[] student=storage(5); //调用存储
showAll(student); //调用总览全班同学
callOne(student); //调用点名
}
//存储所有同学姓名
public static String[] storage(int num){
String[] student=new String[num];
Scanner sc=new Scanner(System.in);
for(int i=0;i<num;i++){
System.out.println("请输入第"+(i+1)+"位同学的名字:");
student[i]=sc.next();
}
return student;
}
//总览全班同学姓名
public static void showAll(String[] student){
System.out.print("全班同学为:");
for(int i=0;i<student.length;i++){
System.out.print(student[i]+" ");
}
System.out.println();
}
//随机点名其中一人,打印到控制台
public static void callOne(String[] student){
Random r=new Random();
int n=r.nextInt(student.length);
System.out.println(student[n]+"被点到了!");
}
}
2)库存管理
import java.util.Scanner;
class Stock
{
public static void main(String[] args)
{
//初始数据
String[] proName={"MacBookAir","ThinkpadT450","ASUS-FL5800"}; //商品名
double[] proSize={13.3,14.0,15.6}; //尺寸
double[] proPrice={6988.88,5999.99,4999.5}; //价格
int[] proNum={5,10,18}; //库存
//功能选择
while(true){
System.out.println("----------库存管理----------");
System.out.println("1.查看库存清单");
System.out.println("2.修改商品库存数量");
System.out.println("3.退出");
System.out.println("请输入要执行的操作序号:");
Scanner sc=new Scanner(System.in);
int select=sc.nextInt();
if(select==1){
showList(proName,proSize,proPrice,proNum); //把四个数组传进去
}
if(select==2){
modifyNum(proNum); //传入库存
}
if(select==3){
signOut();
break;
}
}
}
//查看库存清单
public static void showList(String[] proName,double[] proSize,double[] proPrice,int[] proNum){
System.out.println();
System.out.println("--------------------商城库存清单----------------------------");
System.out.println("编号\t品牌型号\t尺寸\t价格\t\t库存数");
//打印商品
for(int i=0;i<proName.length;i++){
System.out.println(" "+(i+1)+"\t"+proName[i]+"\t"+proSize[i]+"\t"+proPrice[i]+"\t\t"+proNum[i]);
}
System.out.println("------------------------------------------------------------");
int sumNum=0; //总库存
for(int i=0;i<proNum.length;i++){
sumNum+=proNum[i];
}
System.out.println("总库存数:"+sumNum);
double sumMoney=0; //总金额
for(int i=0;i<proName.length;i++){
sumMoney+=proPrice[i]*proNum[i];
}
System.out.println("库存商品总金额:"+sumMoney);
System.out.println();
System.out.println();
}
//修改库存
public static void modifyNum(int[] AfterProNum){
System.out.println();
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("请输入您要修改的商品编号");
int proId=sc.nextInt();
if(proId<=AfterProNum.length&&proId>0){
System.out.println("请输入您要修改的库存数量");
int afterNum=sc.nextInt();
AfterProNum[proId-1]=afterNum;
System.out.println();
break;
}
}
}
//退出
public static void signOut(){
System.out.println("您已退出");
}
}

浙公网安备 33010602011771号