详细讲解java中的方法(适合新手小白)
上一文我们讲解了java中的类与实例。然后今天我们继续讲解java中的方法。
在讲解方法之前我们又要回顾一下上一文中的内容了。我们说类是模板,然后实例是使用模板创建出来的特例。比如人类是一个模板,然后使用人类这个模板创建出来一个小明和一个小红,然后我们在人类内规定,人都可以跑,都可以走,都可以跳这三个方法。小明,与小红都可以使用这个方法。这就是java中方法与现实世界的映射关系。这样是不是就很好理解了呢。
方法的定义
方法是类中定义的特定逻辑代码块,分为两种 —— 属于‘对象’的实例方法(getName/setName,需要 new 对象才能调用),和属于‘类’的静态方法(用 static 修饰,如 main 方法,直接用类名调用)
我们先看一段代码。
public class Animal {private String species; //动物的种类,如猫,狗private String name; //动物的名字,如旺财,来福等private int age; //动物的年龄}
这是我们上一文中中定义的动物类,首先大家看一下,我们这个类是公开的,外部是可以访问到的。然后我们定义的类内的字段,都是用private修饰,private其它类是无法访问这个类内的字段的,那么定义private修饰的字段还有什么作用呢?并且如果外部需要访问这个类内的字段,并且使用或者说给这些字段赋值不就是访问不了了吗。就像下面这样
public class Person {private String name;private int age;public static void main(String[] args) {Animal dog = new Animal();dog.name ="wangcai";System.out.println(dog.name);}
}
我们在person类中初始化一个dog实例,然后我们要给dog的name进行赋值。但是我们Animal类中的name字段是用private修饰的。这个时候就会报错。显示name字段是private。不能直接赋值。
那么这个时候,就需要运用到了方法。我们将一个类内的字段隐藏,然后将方法公开给外部使用。这就是java面向对象编程中的封装思想。
一个类隐藏了字段,但是可以给外部暴露public修饰的方法。这样外部就可以使用类规定的方法,来使用类内的一些字段。再看下面的代码。
public class Animal {private String species; //动物的种类,如猫,狗private String name; //动物的名字,如旺财,来福等private int age;//动物的年龄public String getName(){ //定义获取动物名字的方法,访问修饰符使用publicreturn name;}public void setName(String name){ //定义设置动物名字的方法,也是publicthis.name=name;}
}
我们看到,在设置动物名的时候,不需要返回,所以使用void。我们在动物类的内部定义了两个public修饰的方法,分别是获取动物名,以及设置动物名。有了这两个方法。我们就可以使用这两个方法。如下代码所示,我们在person类中使用方法。
public class Person {private String name;private int age;public static void main(String[] args) {Animal dog = new Animal();dog.setName("wangcai"); //对dog实例的name进行设置System.out.println(dog.getName()); //打印dog的name}
}
可以看到,我们没有直接对Animal类内的字段进行使用,而是通过方法来进行间接的操作。
以上就是最简单的方法的演示。下面我们接着讲解方法的语法格式。
方法的使用语法格式
修饰符 返回值类型 方法名(参数列表) {
// 方法体
// 执行的代码
return 返回值; // 如果有返回值
}
各部分说明:
- 修饰符:public、private、protected、static等(
public
可省,static
按需加);
- 返回值类型:方法返回数据的类型,如int、String、void等(必须)
- 方法命名:符合标识符命名规则,采用小驼峰命名法(必须)
- 参数列表:传入方法的数据,可以有0个或多个参数(可选无参数时写
()
,不能省略括号)
- 方法体:实现方法功能的代码
- return语句:返回结果给调用者
“main 方法是 Java 程序的入口,它也遵循方法的语法格式,但必须是public static void main (String [] args)’
在方法定义的时候如下代码
public void setName(String name){this.name = name;}public String getName(){return name;}
这个里面的String name 是形参,不是实际的值,而当使用这个方法的时候如下
Person ming = new Person();ming.setName("Ming");
这个时候传进去的"Ming" 就是实参,实际的参数,需要注意区分好形参还是实参。实参是实际的值
方法中的参数传递
然后我们来讲解一下方法中的参数传递。我们首先来讲解基本数据类型参数传递。如下代码
public class Person {private String name;private int age;public static void main(String[] args) {int a = 10;Person ming = new Person();ming.setAge(a);System.out.println(ming.getAge());//输出ming的年龄为10a = 15;System.out.println(ming.getAge()); //输出ming的年龄为10}//以下为设置年龄和获取年龄的方法public void setAge(int age) {this.age = age;}public int getAge() {return age;}
}
可以看到,基本数据类型在我们介绍的时候,其中传递的值是变量的副本,当变量改变时,并不会改变我们第一次给实例设置年龄的值。
下面我们再来看一下引用数据类型的参数传递。
public class Person {private String name;private int age;public static void main(String[] args) {String n= "小明";Person ming = new Person();ming.setName(n);System.out.println(ming.getName()); //输出小明n= "xiaoming";System.out.println(ming.getName());//输出小明}//以下为设置name方法和获取name方法public void setName(String name){this.name = name;}public String getName(){return name;}}
上面这个例子可能会有人会疑问,为什么还是输出小明。其实这里我们之前在讲解引用数据类型的时候,就已经讲解过了。首先String引用数据类型,创建之后就不会再改变了,当重新给n进行赋值时,并不是在原本的地址上面进行赋值,而是在内存中新开了一块地址来存储"xiaoming",所以,当我们打印输出n的时候,输出结果会改变,但是并不影响之前的传给name的地址,因为地址还在那,对应的小明的值也在那。这样是不是很好理解呢。
以上就是本期对方法的讲解。
声明:本文无任何商用目的,纯粹的分享学习交流,欢迎大家指正文中出错以及不足的地方,相互交流学习,共同进步。