目录
Java方法
何为方法
-
System.out.println() System:类 out:对象 println():方法
-
Java方法是语句的集合,它们在一起执行一个功能。
-
方法是解决一类问题的步骤的有序组合
-
方法包含于类或对象中
-
方法在程序中被创建,在其他地方被引用
-
-
设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。
我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展。
package com.chang.method;
public class Method0101 {
// main方法
public static void main(String[] args){
int sum =add(1,2);
System.out.println(sum);
a();
}
//int 返回一个值
public static int add(int a, int b){
return a+b;
}
// void 不返回东西
public static void a(){
for (int i = 0; i <=1000; i++) {
if(i%5==0){
System.out.print(i+"\t"); // \t :横向跳格
}if(i%(5*3)==0){
System.out.print("\n"); // \n :换行
}
//println 输出完全换行
//print 输出完不会换行
}
}
}
方法的定义
-
Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,一般情况下,定义一个方法
包含一下语法:
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
-
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
-
修饰符: 修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
-
返回值类型:方法返回值。returnValueType是方法返回值的数据类型。
有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void。
-
方法名:是方法的实际名称。方法名与参数表共同构成方法签名。
-
参数类型:参数就像一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或者变量。
参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含参数。
-
形式参数:在方法被调用时,用于接收外界输入的数据
-
实参:调用方法时实际传给方法的数据
-
-
方法体:方法体包含具体的语句,定义该方法的功能
-
package com.chang.method;
public class Method0201 {
public static void main(String[] args) {
//实际参数:实际调用传递给他人的参数
int num = max(10,20);
System.out.println(num);
}
//比较两个数的大小
//形式参数,用来定义作用的
public static int max(int a,int b){
int c = 0;
if(a==b){
System.out.println("两个值相等");
return 0;//return也可以是终止方法
}
if(a>b){
c=a;
}else {
c=b;
}
return c;
}
}
方法的重载
-
重载就是一个类中,有相同名字的函数,但参数形式不同的函数
-
方法的重载规则
-
方法名称必须相同
-
参数列表必须不同(个数不同、或者类型不同、或者参数排序列表不同等)。
-
方法的返回类型可以相同也可以不同
-
仅仅返回类型不同不足以成为方法的重载
-
-
实现理论
-
方法名称相同时,编译器会根据调用方法的参数个数、参数类型、等去逐个匹配,已选择对应的方法
如果匹配失败,则编译器会报错!
package com.chang.method; public class Method0301 { public static void main(String[] args) { int sum = add(10.0,10.0);//当给实际参数定值时:如果值是int类型 走形式参数为int类型的add方法 System.out.println(sum); // 如果值是double类型 走形式参数为double类型的add方法 } public static int add(int a,int b){ return a+b; } public static int add(double a,double b){ return (int)a+(int)b; } }
命令行传参
-
有时候你希望运行一个程序的时候再传递给它消息。这需靠传递命令行参数给main()函数实现。
package com.chang.method; public class Method0401 { public static void main(String[] args) { //args.length 数组长度 for (int i = 0; i <args.length ; i++) { System.out.println("args["+i+"]:"+args[i]); } } }
-
打开文件所在位置,进入命令行
-
-
-
找不到或无法加载主类原因:代码中引用了包机制 因此需要用cd..退到包机制上面的文件夹中:eg:src
-
第一运行java出没有变化 是因为没给传参
-
可变参数
-
在JDK1.5开始,Java支持传递同类型的可变参数的一个方法
-
在方法声明中,在制定参数类型后加一个省略号(...)
-
一个方法中只能制定一个可变参数,他必须是方法的最后一个参数。任何普通的参数必须在它之前声明
package com.chang.method;
public class Method0501 {
public static void main(String[] args) {
Method0501 method0501 = new Method0501();
method0501.add(1,2,3,4,5);//必须是相同的类型
}
public void add(int...i){
System.out.println(i[0]);
}
}
package com.chang.method;
public class Method0502 {
public static void main(String[] args) {
Method0502 method0502 = new Method0502();
method0502.printMax(10,20,30,21,29);
}
public void printMax(double...i){
if(i.length==0){
System.out.println("您没有输入");
}
double result = i[0];
for (int j = 0; j <i.length ; j++) {
if(i[j]>result){
result = i[j];
}
}
System.out.println("最大值为:"+result);
}
}
递归
-
A方法调用B方法,我们很容易理解
-
递归就是:A方法调用A方法!就是自己调用自己
-
利用递归可以用简单的程序来解决一些复杂的问题。他通常把一个大型复杂的问题层层转化为
一个与原问题相似规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算。
大大减少了程序的代码量。递归的能力在于拥有限的语句来定义对象的无限集合。
-
递归结构包含两个部分
-
递归头:什么时候不调用自身方法。如果没有头,将陷入死循环
-
递归体:什么时候调用自身方法。
-
package com.chang.method;
public class Method0601 {
public static void main(String[] args) {
//求5!
Method0601 method0601 = new Method0601();
int sum = method0601.a(5);
System.out.println(sum);
}
public int a(int n){ //n=5 ----> else n*a(4)---->a(4)-->n=4--->a(4)==4*a(3)....
if(n==1){ // 5*a(4)
return 1; //5*4*a(3)
}else { //5*4*3*a(2)
return n*a(n-1); //5*4*3*2*a(1) =======5*4*3*2*1==120;
}
}
}
狂神说Java作业:计算器
-
写一个计算器,要求实现加减乘除功能,并且能循环接收新的数据,通过用户交互!
package com.chang.method;
import java.util.Scanner;
public class Method0602 {
//写一个计算器,要求实现加减乘除功能,并且能循环接收新的数据,通过用户交互!
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double a1 = 0;//操作数1
double a2 = 0;//操作数2
String a3 = "";//运算符
for (String a = "y"; a.equals("y"); ) {
System.out.println("请您输入第一个操作数");
a1 = scanner.nextDouble();
System.out.println("请您输入运算符:(+、-、*、/)");
a3 = scanner.next();
System.out.println("请您输入第二个操作数");
a2 = scanner.nextDouble();
switch (a3) {
case "+":
System.out.println("结果为:" + a1 + a3 + a2 + "=" + add(a1, a2));
break;
case "-":
System.out.println("运算结果为:" + a1 + a3 + a2 + "=" + sub(a1, a2));
break;
case "*":
System.out.println("运算结果为:" + a1 + a3 + a2 + "=" + mul(a1, a2));
break;
case "/":
if (a2 == 0) {
System.out.println("被除数不能为0");
} else
System.out.println("运算结果为:" + a1 + a3 + a2 + "=" + div(a1, a2));
break;
default:
System.out.println("输入的运算符不规范");
}
System.out.println("是否继续运算(继续使用输入:y,结束使用输入任何数值)");
a = scanner.next();
}
System.out.println("感谢您的使用");
}
//加法
public static double add(double a,double b){
return a+b;
}
//减法
public static double sub(double a,double b){
return a-b;
}
//乘法
public static double mul(double a,double b){
return a*b;
}
//除法
public static double div(double a,double b){
return a/b;
}
}