java方法
方法的基本结构
修饰符 返回值类型 方法名 (参数类型 参数名){
…
方法体
…
return 返回值;
}
修饰符: 定义了该方法的访问类型(public,private,protected,default)。
返回值类型:没有返回值用void,有返回值时写明是int,float,double,Sting等等。
方法名: 方法名和参数表共同构成方法签名。
参数类型: 相当于一个占位符,方法可以没有参数。
方法体: 定义该方法要实现的功能。
例子1:
//返回两个整型数的最大值
public static int max (int num1,int num2){
if(num1 > num2){
return num1;
}else{
return num2;
}
}
//打印HelloWork
public static void put(){
System.out.println("HelloWork");
}
方法的调用
当程序调用一个方法时,程序控制权转移到被调用的方法。一个名为方法将控制返回给调用者时,其执行return语句或当达到其方法结束的右大括号。
如果该方法返回一个值,调用该方法通常被视为一个值。例如:
int maxNum = max(num1,num2);
如果该方法返回void,则调用该方法必须是一个语句。例子2:
put();
System.out.print(“The max number is:”);
public class Put {
public static void main(String[] args) {
int num1 = 5;
int num2 = 3;
int maxNum = max(num1,num2);
put();
System.out.print("The max number is:");
System.out.println(maxNum);
}
//返回两个整型数的最大值
public static int max (int num1,int num2){
if(num1 > num2){
return num1;
}else{
return num2;
}
}
//打印HelloWork
public static void put(){
System.out.println("HelloWork");
}
}
程序运行结构如下:
HelloWork
The max number is:5
void关键字
上例中put()是一个void方法。它不返回任何值。调用一个void方法必须是一个语句。
通过值传递参数
当调用一个方法时,需要提供的参数,它必须以相同的顺序被指定为他们在法规范的相应参数。这就是所谓的参数顺序关联。
例子3:传递两个参数调用change方法。方法被调用后,实参的值并没有改变。
public class Put {
public static void main(String[] args) {
int num1 = 1;
int num2 = 2;
System.out.println("交换之前 num1:" + num1 + ";num2:" + num2);
// 调用change方法
change(num1, num2);
System.out.println("交换之后num1:" + num1 + ";num2:" + num2);
}
// 交换两个变量的方法
public static void change(int n1, int n2) {
System.out.println("change方法里面交换值之前n1:" + n1 + ";n2:" + n2);
// 交换 n1 与 n2的值
int temp = n1;
n1 = n2;
n2 = temp;
System.out.println("change方法里面交换值之后n1:" + n1 + " ;n2:" + n2);
}
}
程序运行结果:
交换之前 num1:1;num2:2
change方法里面交换值之前n1:1;n2:2
change方法里面交换值之后n1:2;n2:1
交换之后num1:1;num2:2
方法的重载
例子1中max函数只能用于int型的数据,如果要比较double型的数据就需要创建一个相同名字但参数不同的方法。
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
如果调用max方法时传递的是int型参数,则 int型参数的max方法就会被调用; 如果传递的是double型参数,则double类型的max方法体会被调用。
一个类的两个方法拥有相同的名字,但是有不同的参数列表,即同名不同参,这个就叫做方法重载。
例子4:
public class Put {
public static void main(String[] args) {
int num1 = 5;
int num2 = 3;
double num3 = 5.0;
double num4 = 3.0;
int maxNumInt = max(num1,num2);
double maxNumDou = max(num3,num4);
System.out.println("int类型最大值:" + maxNumInt);
System.out.println("double类型最大值:" + maxNumDou);
}
//返回两个整型数的最大值
public static int max (int num1,int num2){
if(num1 > num2){
return num1;
}else{
return num2;
}
}
public static double max(double num1, double num2) {
if (num1 > num2)
return num1;
else
return num2;
}
}
程序运行结果:
int类型最大值:5
double类型最大值:5.0
变量的作用域
局部变量在一个方法中定义的变量。局部变量的范围始于它的声明,并继续到包含该变量的块的结束。全局变量在类的整个范围之内,都有效的变量。
例子5:
public class Test {
public static void main(String[] args) {
int num1 = 5;
System.out.print("main函数num1值:" + num1);
for (int i = 0; i < 2; i++) {
System.out.println("\ri:" + i);
for (int j = 0; j < 3; j++) {
System.out.print("\tj:" + j);;
}
}
System.out.println("\rret函数返回的num2值" + ret(num1));
System.out.println("main函数num1值:" + num1);
}
public static int ret(int num1){
int num2;
num2 = num1 + 5;
return num2;
}
}
变量的作用域见下图:
程序运行结果:
main函数num1值:5
i:0
j:0 j:1 j:2
i:1
j:0 j:1 j:2
ret函数返回的num2值10
main函数num1值:5
构造方法
当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有明确的返回值。 通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。
所有的类都有构造函数,不管有没有定义,Java会自动提供一个默认的构造函数来初始化所有成员变量为零。一旦定义自己的构造函数,默认的构造函数不再使用。
例子6:
public class Test {
public static void main(String[] args) {
//调用构造方法来初始化一个对象
Student s1 = new Student("s1");
Student s2 = new Student("s2");
System.out.println("这个班级的学生有:" + s1.stuName + "、" + s2.stuName);
}
}
//构造函数
class Student{
String stuName;
public Student(String name) {
stuName = name;
}
}
程序运行结果:
这个班级的学生有:s1、s2