方法(函数)
方法方法与函数的区别
函数:可以实现一定功能的代码块
方法:存放在类里面可以实现一定功能的单独的
代码块
在Java、C++、C#为例子的语言中 函数必须在方法里面,所以在Java中所提到的函数都可以是方法
在Python、lua 、VB这些语言中,函数可以在类外面定义,所以函数是函数 方法是方法
ps:有些时候 方法叫做类方法
既然方法可以实现一个功能 ,我们可以将其理解成一个工具,如何定义一个特定功能的方法,是一个简单的事情:
public class Test{
// 定义了一个叫做Test的类
public static void SayHello(){
// 这里定义了一个方法,下面的代码是方法的代码块
System.out.println("我在说话");
}
public static void main(String[] args){
SayHello(); // 使用方法
}
}
其中语法就是 |
[权限修饰符] [静态修饰符] 返回值 方法名称(参数类型 参数名称){代码块;}
亮少QQ:2328031994 |
至于什么是权限修饰符 什么是静态修饰符 我们之后可以细讲 现在你可以省略他们(但是入口方法的不要省略)
public class Test{
void SayHello(){
// 这样的写法也可以
}
}
Q&A Time
Q:但是我们这样就无法在入口使用方法了,怎么解决呢?A:main 是被 static 修饰的方法 所以他是静态的方法 静态的方法中不可以使用非静态的类成员(类成员就是方法与属性的统筹)Q:如何解决?A:给Speak()方法进行static的修饰即可:
Q:那么非静态的方法一般是怎样被调用的呢?
非静态的方法可以调用非静态的方法
参数
有些时候我们需要给方法传入一个参数,用来控制代码的逻辑,比如我在写Galgame的时候(就是简单的对话游戏:像是草猫 之类的),我写了一个方法,这个方法实现了显示某个人物的语言信息,类似于这样:
public class GameMain{
static void Speak(){
String name = "旁白";
String speakInfo = "欢迎光顾本游戏,我是负责吐槽的旁白君";
Image touXiang = PANGBAI; // 旁白的头像图片
.... // 窗口设置的信息省略
}
}
图中,所圈出的信息可能随着游戏的进展发生不同的人物的不同的对白,这些是我们可以人为控制的,所以我们可以使用参数来对这些需要变动的量 进行调整
其中人物的名称我们可以知道是String 类型的 对话的信息也是String类型的 人物的头像我们姑且他是Image自定义的类型的,这三个变量是需要改动的,所以我们要传入三个参数
public class GameWindow{
...
public static void Speak(String name,String speakInfo ,Image touXiang){
.... // 窗口设置的信息省略
}
public static void main(String[] args){
Speak("旁白","这个是可以自定义的",PANGBAI); }}
这样我们就可以简单的实现旁白的自定义对话了
思考
既然如此,我们可不可以使用二维数组将我们对话的剧本信息呢?就像是这样{{“商人”,“那跟在你旁边的人是谁?”},{“玩家”,“那是我的应急食物”},{“派蒙”,“我才不是呢”}}的数组,然后使用下标,遍历这个数组 然后每次遍历之后得到的元素作为参数传入Speak方法中 , 不就实现了连贯的对话?
说着有趣了起来,打开编辑器,让我们来尝试着写写,但是我们暂时没有学习窗口,我们就试试简单地 console(控制台) 的打印:
public class game {
static void speak(String name,String info){
System.out.println(name+":");
System.out.println(" "+ info);
}
public static void main(String[] args) {
String[][] speakArray = {
{"商人","那跟在你旁边的人是谁?"},
{"玩家","那是我的应急食物"},
{"派蒙","我才不是应急食物呢"}
};
// 一个简答的迷你小剧本
for (String[] littleArray:speakArray){
speak(littleArray[0],littleArray[1]);
}
}
}
运行结果就是这样:
说一下关于方法的作用域
我在方法外部创建了一个值 A ,然后我将 A 这个值作为了参数传入了方法B 中 ,方法B 对传入的参数进行了修改,但是即使如此,A的值还是不会发生任何的改变。额,说的比抽象类还抽象…那么我们先来一段代码,你看看这个代码做个评价?
public class game {
static void changeValue(int a){
// 3 、 啊 c 被作为 参数 将 值 给了 a 变量 a = 234567; // 4 、 a 的值发生了改变 } public static void main(String[] args) { int c = 2; // 1 、 我定义了一个c,他的值是2 changeValue(c); // 2 、 让c变量去changeValue在磨练下自己 System.out.print(c); // 5、 打印 c }}
粉色底
楷体
黑体
微软雅黑
华文彩云
宋体
fantasy
size= 5
size= 10