Android开发基础之Java⽅法
Java ⽅法
在前⾯⼏个章节中我们经常使⽤到 System.out.println(),那么它是什么呢?
println() 是⼀个⽅法。
System 是系统类。
out 是标准输出对象。
这句话的⽤法是调⽤系统类 System 中的标准输出对象 out 中的⽅法 println()。
那么什么是⽅法呢?
Java⽅法是语句的集合,它们在⼀起执⾏⼀个功能。
⽅法是解决⼀类问题的步骤的有序组合
⽅法包含于类或对象中
⽅法在程序中被创建,在其他地⽅被引⽤
⽅法的优点
1. 使程序变得更简短⽽清晰。
2. 有利于程序维护。
3. 可以提⾼程序开发的效率。
4. 提⾼了代码的重⽤性。
⽅法的命名规则
1.⽅法的名字的第⼀个单词应以⼩写字母作为开头,后⾯的单词则⽤⼤写字母开头写,不使⽤连接符。例如:addPerson。
2.下划线可能出现在 JUnit 测试⽅法名称中⽤以分隔名称的逻辑组件。⼀个典型的模式是:test<MethodUnderTest>_<state>,例
如 testPop_emptyStack。
⽅法的定义
⼀般情况下,定义⼀个⽅法包含以下语法:
修饰符返回值类型⽅法名(参数类型参数名){
...
⽅法体
...
return 返回值;
}
⽅法包含⼀个⽅法头和⼀个⽅法体。下⾯是⼀个⽅法的所有部分:
修饰符:修饰符,这是可选的,告诉编译器如何调⽤该⽅法。定义了该⽅法的访问类型。
返回值类型:⽅法可能会返回值。returnValueType 是⽅法返回值的数据类型。有些⽅法执⾏所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
⽅法名:是⽅法的实际名称。⽅法名和参数表共同构成⽅法签名。
参数类型:参数像是⼀个占位符。当⽅法被调⽤时,传递值给参数。这个值被称为实参或变量。参数列表是指⽅法的参数类型、顺序和参数的个数。参数是可选的,⽅法可以不包含任何参数。
⽅法体:⽅法体包含具体的语句,定义该⽅法的功能。
public static int age(int birthday){...}
参数可以有多个:
static float interest(float principal, int year){...}
注意:在⼀些其它语⾔中⽅法指过程和函数。⼀个返回⾮void类型返回值的⽅法称为函数;⼀个返回void类型返回值的⽅法叫做过程。
实例
下⾯的⽅法包含 2 个参数 num1 和 num2,它返回这两个参数的最⼤值。
/** 返回两个整型变量数据的较⼤值 */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
更简略的写法(三元运算符):
public static int max(int num1, int num2) {
return num1 > num2 ? num1 : num2;
}
⽅法调⽤
Java ⽀持两种调⽤⽅法的⽅式,根据⽅法是否返回值来选择。
当程序调⽤⼀个⽅法时,程序的控制权交给了被调⽤的⽅法。当被调⽤⽅法的返回语句执⾏或者到达⽅法体闭括号时候交还控制权给程序。当⽅法返回⼀个值的时候,⽅法调⽤通常被当做⼀个值。例如:
int larger = max(30, 40);
如果⽅法返回值是void,⽅法调⽤⼀定是⼀条语句。例如,⽅法println返回void。下⾯的调⽤是个语句:
System.out.println("欢迎访问菜鸟教程!");
⽰例
下⾯的例⼦演⽰了如何定义⼀个⽅法,以及如何调⽤它:
TestMax.java ⽂件代码:
public class TestMax {
/** 主⽅法 */
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println( i + " 和 " + j + " ⽐较,最⼤值是:" + k);
}
/
** 返回两个整数变量较⼤的值 */
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
以上实例编译运⾏结果如下:
5 和 2 ⽐较,最⼤值是:5
这个程序包含 main ⽅法和 max ⽅法。main ⽅法是被 JVM 调⽤的,除此之外,main ⽅法和其它⽅法没什么区别。
main ⽅法的头部是不变的,如例⼦所⽰,带修饰符 public 和 static,返回 void 类型值,⽅法名字是 main,此外带个⼀个 String[] 类型参数。String[] 表明参数是字符串数组。
void 关键字
本节说明如何声明和调⽤⼀个 void ⽅法。
下⾯的例⼦声明了⼀个名为 printGrade 的⽅法,并且调⽤它来打印给定的分数。
⽰例
TestVoidMethod.java ⽂件代码:
public class TestVoidMethod {
public static void main(String[] args) {
printGrade(78.5);
}
public static void printGrade(double score) {
if (score >= 90.0) {
System.out.println('A');
}
else if (score >= 80.0) {
System.out.println('B');
}
else if (score >= 70.0) {
System.out.println('C');
}
else if (score >= 60.0) {
System.out.println('D');
}
else {
System.out.println('F');
}
}
}
以上实例编译运⾏结果如下:
C
这⾥printGrade⽅法是⼀个void类型⽅法,它不返回值。
⼀个void⽅法的调⽤⼀定是⼀个语句。所以,它被在main⽅法第三⾏以语句形式调⽤。就像任何以分号结束的语句⼀样。
通过值传递参数
调⽤⼀个⽅法时候需要提供参数,你必须按照参数列表指定的顺序提供。
例如,下⾯的⽅法连续n次打印⼀个消息:
TestVoidMethod.java ⽂件代码:
public static void nPrintln(String message, int n) {
for (int i = 0; i < n; i++) {
System.out.println(message);
}
}
⽰例
下⾯的例⼦演⽰按值传递的效果。
该程序创建⼀个⽅法,该⽅法⽤于交换两个变量。
TestPassByValue.java ⽂件代码:
public class TestPassByValue {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
System.out.println("交换前 num1 的值为:" +
num1 + " ,num2 的值为:" + num2);
// 调⽤swap⽅法
swap(num1, num2);
System.out.println("交换后 num1 的值为:" +
num1 + " ,num2 的值为:" + num2);
}
/** 交换两个变量的⽅法 */
public static void swap(int n1, int n2) {
System.out.println("\t进⼊ swap ⽅法");
System.out.println("\t\t交换前 n1 的值为:" + n1
+ ",n2 的值:" + n2);
// 交换 n1 与 n2的值
int temp = n1;
n1 = n2;
n2 = temp;
System.out.println("\t\t交换后 n1 的值为 " + n1
+ ",n2 的值:" + n2);
}
}
以上实例编译运⾏结果如下:
交换前 num1 的值为:1 ,num2 的值为:2
进⼊ swap ⽅法
交换前 n1 的值为:1,n2 的值:2
交换后 n1 的值为 2,n2 的值:1
交换后 num1 的值为:1 ,num2 的值为:2
传递两个参数调⽤swap⽅法。有趣的是,⽅法被调⽤后,实参的值并没有改变。
⽅法的重载
上⾯使⽤的max⽅法仅仅适⽤于int型数据。但如果你想得到两个浮点类型数据的最⼤值呢?
解决⽅法是创建另⼀个有相同名字但参数不同的⽅法,如下⾯代码所⽰:
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
如果你调⽤max⽅法时传递的是int型参数,则 int型参数的max⽅法就会被调⽤;
如果传递的是double型参数,则double类型的max⽅法体会被调⽤,这叫做⽅法重载;
就是说⼀个类的两个⽅法拥有相同的名字,但是有不同的参数列表。
Java编译器根据⽅法签名判断哪个⽅法应该被调⽤。
⽅法重载可以让程序更清晰易读。执⾏密切相关任务的⽅法应该使⽤相同的名字。
重载的⽅法必须拥有不同的参数列表。你不能仅仅依据修饰符或者返回类型的不同来重载⽅法。
变量作⽤域
变量的范围是程序中该变量可以被引⽤的部分。
⽅法内定义的变量被称为局部变量。
局部变量的作⽤范围从声明开始,直到包含它的块结束。
局部变量必须声明才可以使⽤。
⽅法的参数范围涵盖整个⽅法。参数实际上是⼀个局部变量。
for循环的初始化部分声明的变量,其作⽤范围在整个循环。
但循环体内声明的变量其适⽤范围是从它声明到循环体结束。它包含如下所⽰的变量声明:
你可以在⼀个⽅法⾥,不同的⾮嵌套块中多次声明⼀个具有相同的名称局部变量,但你不能在嵌套块内两次声明局部变量。
命令⾏参数的使⽤
有时候你希望运⾏⼀个程序时候再传递给它消息。这要靠传递命令⾏参数给main()函数实现。
命令⾏参数是在执⾏程序时候紧跟在程序名字后⾯的信息。
实例
java创建文件下⾯的程序打印所有的命令⾏参数:
CommandLine.java ⽂件代码:
public class CommandLine {
public static void main(String args[]){
for(int i=0; i<args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
}
如下所⽰,运⾏这个程序:
$ javac CommandLine.java
$ java CommandLine this is a command line 200 -100
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
构造⽅法
当⼀个对象被创建时候,构造⽅法⽤来初始化该对象。构造⽅法和它所在类的名字相同,但构造⽅法没有返回值。
通常会使⽤构造⽅法给⼀个类的实例变量赋初值,或者执⾏其它必要的步骤来创建⼀个完整的对象。
不管你是否⾃定义构造⽅法,所有的类都有构造⽅法,因为Java⾃动提供了⼀个默认构造⽅法,默认构造⽅法的访问修改符和类的访问修改符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论