Java学习四—方法
一、基础概念
1.1什么是方法
Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段。
Java方法是语句的集合,它们在一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
1.2方法的优点
-
- 使程序变得更简短而清晰。
-
- 有利于程序维护。
-
- 可以提高程序开发的效率。
-
- 提高了代码的重用性。
1.3方法的命名规则
- 1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。
- 2.下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test_,例如 testPop_emptyStack。
1.4方法分类
- 根据方法有没有参数,可分为:
- 1.无参方法
- 2.有参方法
- 根据有没有返回值,可分为:
- 1.无返回值方法
- 2.有返回值方法
示例:
public class Demo{
// 1. 最简单的无参方法
void sum1(){
System.out.println("加法操作");
}
// 2. 拥有修饰符的无参方法
public static void sum2(){
System.out.println("加法操作");
}
// 3. 拥有参数的方法
public static void sum3(int a,int b){
System.out.println("两数相加结果"+a+b);
}
// 4.拥有返回值的方法
public static int sum4(int a,int b){
return a+b;
}
// 5.声明一个无参数带返回值
public static int sum5(){
int x=20;
int y=28;
int z=x+y;
return z;
}
}
二、方法的申明
2.1语法
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
方法包含一个方法头和一个方法体。下面是一个方法的所有部分:
- 修饰符: 修饰符,这是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
Java访问修饰符包括private,default,protected和public。含义分别表示私有的,默认的,受保护的和公有的访问修饰符。这些访问修饰符既可以修饰类中的属性,又可以修饰类中的方法,而public和default还可以修饰类。在同一个java文件里,公有类有且仅有一个,并且该文件命名为类名.java。
- 返回值类型 : 方法可能会返回值。returnValueType 是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType 是关键字void。
- 方法名: 是方法的实际名称。方法名和参数表共同构成方法签名。
- 参数类型: 参数像是一个占位符。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
- 方法体: 方法体包含具体的语句,定义该方法的功能。
2.2示例
public int add(int num1, int num2) {
int sum = num1 + num2;
return sum;
}
在上面的示例中,我们定义了一个名为add
的方法,它接受两个整数参数num1
和num2
,将它们相加并返回结果。
public static int age(int birthday){...}
参数可以有多个:
static float interest(float principal, int year){...}
注意: 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。
三、方法的调用
3.1简介
Java 支持两种调用方法的方式,根据方法是否返回值来选择。
当程序调用一个方法时,程序的控制权交给了被调用的方法。当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序。
当方法返回一个值的时候,方法调用通常被当做一个值。例如:
int larger = max(30, 40);
如果方法返回值是void,方法调用一定是一条语句。例如,方法println返回void。下面的调用是个语句:
System.out.println("欢迎访问菜鸟教程!");
3.2示例
下面的例子演示了如何定义一个方法,以及如何调用它:
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[] 表明参数是字符串数组。
3.3方法的参数
方法可以接受零个或多个参数,这些参数是方法在执行时所需的输入数据。参数在方法定义中声明,必须指定参数的数据类型和参数名。
参数的传递
参数的传递是指在方法调用时将实际值传递给方法的参数。实际值也称为实际参数,而方法定义中的参数称为形式参数。实际参数的值将被复制到对应的形式参数中,方法将使用这些值进行操作。
让我们看一个带有参数的方法定义和调用示例:
public void greet(String name) {
System.out.println("Hello, " + name + "!");
}
public static void main(String[] args) {
Greeter greeter = new Greeter();
// 调用带有参数的方法
greeter.greet("Alice");
greeter.greet("Bob");
}
在上面的示例中,greet
方法接受一个字符串参数name
,并在方法体中使用它来打印问候语。
四、方法重载
4.1简介
同一个类中,方法名字相同,参数列表不同,则是方法重载。
注意:
参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同
方法的重载与方法的修饰符和返回值没有任何关系
4.2示例
public class Demo {
public static void main(String[] args) {
show();
show(10);
show("10");
show("10",10);
}
public static void show() {
System.out.println("无参无返回值的show");
}
public static void show(int a) {
System.out.println("int的show");
}
public static void show(String a) {
System.out.println("String的show");
}
public static void show(String a,int b) {
System.out.println("String int的show");
}
}
结果:
无参无返回值的show
int的show
String的show
String int的show
五、构造方法
构造方法是一个比较特殊的方法,通过构造方法可以完成对象的创建,以及实例变量的初始化。换句话说,构造方法就是用来创建对象,同时给对象的属性赋值。
构造方法是一种特殊的方法,与一般的方法不同是:
1.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。
2.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。
3、不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。
5.1语法格式
new 构造方法名(实际参数列表);
5.2示例
public class ConstructorTest01{
public static void main(String[] args){
//创建Student类型的对象
Student s1 = new Student();
//输出“引用”
//只要输出结果不是null,说明这个对象一定是创建完成了
System.out.println(s1);
//调用Student类的无参数构造方法
new Student();//结果:无参数的构造方法执行了!
}
}
class Student{
//学号
int no;
//姓名
String name;
//年龄
int age;
//当Student这个类当中并没有定义任何构造方法
//但是我们创建对象的时候成功了,这里就是系统提供的缺省构造器
//将无参数的构造方法(缺省构造器)写出来
public Student(){
System.out.println("无参数的构造方法执行了!");
}
}