MethodTest01 -03方法
【
MethodTest01 -03方法
[
170没有“方法”,会存在什么问题
【
/*
对于一个java程序来说,如果没有“方法”,会存在什么问题?
代码无法得到复用。(怎么提高复用性,可以定义方法,然后需要
使用该功能的时候,直接调用一下方法即可。这样代码就得到复用了。)
*/
public class MethodTest01{
//入口主方法。
publicstatic void main(String[] args){
//需求1:请编写程序,计算100和200的求和。
intx = 100;
inty = 200;
intz = x + y;
System.out.println(x+ "+" + y + "=" + z);
//需求2:请编写程序,计算666和888的求和。
//这个需求2实际上和需求1是完全相同的,只不过具体求和时的“数据不同”
inta = 666;
intb = 888;
intc = a + b;
System.out.println(a+ "+" + b + "=" + c);
//需求3:请编写程序,计算111和222的和
intm = 111;
intn = 222;
intk = m + n;
System.out.println(m+ "+" + n + "=" + k);
/*
需求1和需求2本质上相同,只不过参与运算的数值不同,
代码编写了两份,显然代码没有得到重复利用,专业术语
叫做“复用性”差。
功能/业务逻辑既然相同,为什么要重复编写代码,代码能不能
写一次,以后要是需要再次使用该“业务/需求”的时候,直接调用
就可以了。
如果想达到代码复用,那么需要学习java语言中的方法机制。
*/
}
}
】
二171体验一下方法的好处
/*
这个程序是一个体验程序,你看不懂,你只需要去体验就行了。
体验一下方法的好处。
注意:
程序开始执行的时候是先执行main方法。
因为main方法是一个入口。
在java语言中所有的方法体中的代码都必须遵循自上而下的顺序依次逐行执行。
这个必须记住。
main方法不需要程序员手动调用,是由JVM调用的。
但是除了main方法之外其他的方法,都需要程序员
手动调用,方法只有调用的时候才会执行,方法不调用
是不会执行的。
*/
public class MethodTest02{
//方法定义在类体当中。
//方法定义的先后顺序没有关系。都可以。
/*
publicstatic void sumInt(int x, int y){ //自上而下的顺序依次逐行执行。
intz = x + y;
System.out.println(x+ "+" + y + "=" + z);
}
*/
//主方法。入口。
publicstatic void main(String[] args){ //自上而下依次逐行执行。
//需求1:请编写程序,计算100和200的求和。
sumInt(100,200);
//需求2:请编写程序,计算666和888的求和。
sumInt(666,888);
//需求3:请编写程序,计算111和222的和
sumInt(111,222);
}
//专门在这个类体当中定义一个方法,这个方法专门来完成求和。
//x y z在以下的sumInt方法中都属于局部变量
//局部变量有一个特点:方法结束之后,局部变量占用的内存会自动释放。
publicstatic void sumInt(int x, int y){ //自上而下的顺序依次逐行执行。
intz = x + y;
System.out.println(x+ "+" + y + "=" + z);
}
publicstatic void sum(){
//System.out.println(x);
//System.out.println(y);
//错误: 找不到符号
//System.out.println(z);
}
}
// 这里并没有讲解方法的定义,以及方法的调用。
三172
【
/*
1、方法怎么定义,语法机制是什么?
[修饰符列表] 返回值类型方法名(形式参数列表){
方法体;
}
注意:
[]符号叫做中括号,以上中括号[]里面的内容表示不是必须的,是可选的。
方法体由Java语句构成。
方法定义之后需要去调用,不调用是不会执行的。
1.1、关于修饰符列表:
修饰符列表不是必选项,是可选的。目前为止,大家统一写成:public static
后面你就理解应该怎么写了。
1.2、关于返回值类型:
第一:返回值类型可以是任何类型,只要是java中合法的数据类型就行,数据
类型包括基本数据类型和引用数据类型,也就是说返回值类型可以是:byte short
intlong float double boolean char String......
第二:什么是返回值?
返回值一般指的是一个方法执行结束之后的结果。
结果通常是一个数据,所以被称为“值”,而且还叫
“返回值”。
方法就是为了完成某个特定的功能,方法结束之后
大部分情况下都是有一个结果的,而体现结果的一般
都是数据。数据得有类型。这就是返回值类型。
main{
//调用a方法
a();..如果a方法执行结束之后有返回值,这个返回值返回给main了。
}
a(){}
方法执行结束之后的返回值实际上是给调用者了。谁调用就返回给谁。
第三:当一个方法执行结束不返回任何值的时候,返回值
类型也不能空白,必须写上void关键字。所以void表示该
方法执行结束后不返回任何结果。
第四:如果返回值类型“不是void”,那么你在方法体执行结束的时候必须使用
"return值;"这样的语句来完成“值”的返回,如果没有“return 值;”这样的语句
那么编译器会报错。
return值; 这样的语句作用是什么?作用是“返回值”,返回方法的执行结果。
第五:只要有“return”关键字的语句执行,当前方法必然结束。
return只要执行,当前所在的方法结束,记住:不是整个程序结束。
第六:如果返回值类型是void,那么在方法体当中不能有“return 值;”这样的
语句。但是可以有“return;”语句。这个语句“return;”的作用就是用来终止当前
方法的。
第七:除了void之外,剩下的都必须有“return值;”这样的语句。
1.3、方法名
方法名要见名知意。(驼峰命名方式)
方法名在标识符命名规范当中,要求首字母小写,后面每个单词首字母大写。
只要是合法的标识符就行。
【变方小
】
1.4、形式参数列表
简称:形参
注意:形式参数列表中的每一个参数都是“局部变量”,方法结束之后内存释放。
形参的个数是:0~N个。
publicstatic void sumInt(){}
publicstatic void sumInt(int x){}
publicstatic void sumInt(int x, int y){}
publicstatic void sum(int a, int b, double d, String s){}
形参有多个的话使用“逗号,”隔开。逗号是英文的。
形参的数据类型起决定性作用,形参对应的变量名是随意的。
1.5、方法体:
由Java语句构成。java语句以“;”结尾。
方法体当中编写的是业务逻辑代码,完成某个特定功能。
在方法体中的代码遵循自上而下的顺序依次逐行执行。
在方法体中处理业务逻辑代码的时候需要数据,数据来源就是这些形参。
2、方法定义之后怎么调用呢?
方法必须调用才能执行。
怎么调用,语法是什么?
类名.方法名(实际参数列表);
实参和形参的类型必须一一对应,另外个数也要一一对应。
*/
public class MethodTest03{
//方法定义在这里可以。
//main方法结束之后不需要给JVM返回任何执行结果。
publicstatic void main(String[] args){
//调用方法
//错误: 不兼容的类型: String无法转换为int
//MethodTest03.divide("abc",200); // int a = "abc";
//错误原因: 实际参数列表和形式参数列表长度不同
//MethodTest03.divide();
//(10, 2)叫做实际参数列表,简称实参。
//注意:实参和形参必须一一对应,类型要对应,个数要对应。
MethodTest03.divide(10,2);
//调用sum方法
//怎么去接收这个方法的返回结果????
//使用变量来接收这个方法的返回值。
//注意:变量的定义需要指定变量的数据类型。
//变量的数据类型是什么呢?
intjieGuo = MethodTest03.sum(100, 200);
System.out.println(jieGuo);//300
//jieGuo变量可以是double类型吗?
//double是大容量。int是小容量。自动类型转换。
doublejieGuo2 = MethodTest03.sum(100, 200);
System.out.println(jieGuo2);//300.0
// 对于没有返回值的方法,变量能接收吗?
//divide方法结束没有返回值。不能接收。
//错误: 不兼容的类型: void无法转换为int
//inti = MethodTest03.divide(100, 50);
//当一个方法有返回值的时候,我可以选择不接收吗?
//你可以返回值,但是我可以选择不要你这个值。这是允许的。
//只不过这样没有意义,一般程序返回了执行结果,都是需要接收这个结果的。
//我们可以不接收,但是这个返回值该返回还是会返回的。只不过不用变量接收。
//以下代码虽然没有使用变量接收这个返回值,但是这个值还是返回了。
//返回之后内存马上释放,因为没有使用变量接收。
MethodTest03.sum(100,200);
byteb1 = 10;
//inta = b1;
byteb2 = 20;
intresult = sum(b1, b2); // (b1,b2)是实参。自动类型转换。
System.out.println(result);
}
//计算两个int类型数据的和
/*
publicstatic String sum(int a, int b){
//错误: 不兼容的类型: int无法转换为String
returna + b;
}
*/
publicstatic int sum(int a, int b){
returna + b;
}
//方法定义到这里也可以。没有顺序要求。
//业务是什么?计算两个int类型数据的商
//方法执行结束之后返回执行结果。
//错误: 缺少返回语句
/*
publicstatic int divide(int x, int y){
intz = x / y;
}
*/
//错误: 不兼容的类型: String无法转换为int
/*
publicstatic int divide(int x, int y){
intz = x / y;
return"abc";
}
*/
//可以
/*
publicstatic int divide(int x, int y){
intz = x / y;
returnz;
}
*/
//可以
/*
publicstatic int divide(int x, int y){
returnx / y;
}
*/
//可以
/*
publicstatic int divide(int a, int b){
returna / b;
}
*/
//如果我不需要执行结束之后的返回值?
//这个结果我希望直接输出。
//错误: 不兼容的类型: 意外的返回值
/*
publicstatic void divide(int a, int b){
returna / b;
}
*/
//可以
/*
publicstatic void divide(int a, int b){
return;//用来终止这个方法的
}
*/
//可以
/*
publicstatic void divide(int a, int b){
}
*/
//可以
publicstatic void divide(int a, int b){
System.out.println(a/ b); // 5
}
}
】
[if !vml]
[endif]
【
public class MethodTest
{
publicstatic void main(String[] args)
{
MethodTest.sumInt(100,200);
MethodTest.sumDouble(1.0,2.0);
}
publicstatic void sumInt(int x,int y)
{
System.out.println(x+"+"+y+"="+(x+y));
}
publicstatic void sumDouble(double a,double b)
{
System.out.println(a+"+"+b+"="+(a+b));
}
}
】
【
结果:
F:\03学习资料\02情商\2020\A80JAVA好学吗\开始1228\课堂源码2021\007-方法与递归\mycode_ff>java MethodTest
100+200=300
1.0+2.0=3.0
】
[if !vml]
[endif]
【
////测试的稳定
【我做的;
\
【F:\03学习资料\02情商\2020\A80JAVA好学吗\开始1228\课堂源码2021\007-方法与递归\mycode_ff>java MethodTest
100+200=300
1.0+2.0=3.0
Other doOther...
】
【源代码
【
public class MethodTest
{
publicstatic void main(String[] args)
{
sumInt(100,200);
sumDouble(1.0,2.0);
Other.doOther();
}
publicstatic void sumInt(int x,int y)
{
System.out.println(x+"+"+y+"="+(x+y));
}
public static void sumDouble(double a,double b)
{
System.out.println(a+"+"+b+"="+(a+b));
}
}
class Other {
public static void doOther(){
System.out.println("OtherdoOther...");
}
打卡第二次 20210227周六
}
】】
【错误本:
F:\03学习资料\02情商\2020\A80JAVA好学吗\开始1228\课堂源码2021\007-方法与递归\mycode_ff>javac MethodTest.java
MethodTest.java:7: 错误: 找不到符号
doOther();
^
符号: 方法doOther()
位置: 类MethodTest
1 个错误
】
【对应代码:
[if !vml]
[endif]
】
】
】
】