一、方法的定义
在面向对象中的方法 其实和面向过程(C)中的函数是一种东西。
方法定义分为 声明、实现 2个部分
1.其中声明
访问修饰符 可选修饰符 返回值类型 方法名 (参数列表){**********************}
方法名 : 从第二个单词开始,有字符大写,第一个单词的全小写
2.实现部分
就是{ }中的语句操作
访问修饰符就是四种public ,private,protected,默认什么都不写
可选修饰符有
static 静态的 类中只有这一个方法,所有对象共用,而且 可以直接使用类名访问
final 最终的 就像常量一样,不能被修改,通常用在继承中,防止子类修改该方法
abstract 抽象的 这个方法中没有实现过程 也是用在继承中, 最底层的子类中必须实现这个方法
native 映射 编写一个 可以访问用其他语言编写的方法
synchronized 同步的 用做多线程中 的方法同步,同时只能有一个线程使用这个方法
二、方法的调用
方法的调用有 方法调用栈,专门用来保存方法,最顶层的就是当前正在调用的方法,最底层就是最开始调用的方法。
当方法被调用时:
1.会先定义形参
2.将实参的值传递给形参。java中参数传递都是值传递
3.再执行 花括号中的方法具体实现部分
4.如果实现部分有调用其他方法,则 回到1步骤,使用其他方法
5.当4中的调用方法执行完时,返回方法的值(如果有返回值)
6.继续执行步骤4 下面的操作,直到所有的操作结束
7.返回方法的值(如果有返回值)
三、方法的重载
面向对象的封装:属性,方法。他们都有访问修饰符,
面向对象的其中一个特点是 多态,最基本的多态就是方法的重载。
方法重载的特点:它体现在方法的声明中,只有参数列表不同
1.参数类型不同
2.参数个数不同
3.参数的顺序不同
四、构造器
程序中不可能只有类,类只是一个规范,它是抽象的,不是实际客观的存在。当我们处理问题时,必须要有实际的列子,那就是对象了
构造器就是专门用来实例化对象的
1.没有返回值类型
2.是一种方法,可以被重载
3.方法名与类名相同
一旦我们定义了有参数的构造器,那么系统就不会自动加上一个无参数的构造器了,所以我们一般还要重新写一个无参数的构造器,这是一个大家约定的规范。
java中一共有4种产生对象的方法
构造器 与 new 关键字配合 就可以产生对象
五、this的用法
this. 属性/方法 可以访问或调用本对象的 相应属性和方法
this() 表示 本类的其他构造器 ,没有参数的。
this(参数1,参数2) 调用本类的 构造器 有2个参数,且类型一致
六、访问器和修改器
sun公司统一标准 :
访问器:
public 属性类型 get属性名(首字母大写)(){return 属性;}
修改器:
public void set属性名(首字母大写)(){设置属性;}
逻辑布尔的属性 值 在06年之后专门用下面的
public boolean is布尔属性(首字母大写)(){return 布尔属性;} 返回值有2个,true 或者false
电梯列子:
public class Elevator {
private int currentFloor;//当前层数
private int destinationFloor;//目标层数
private boolean up;//电梯上升为true
private boolean doorsopen;//电梯门开 为true
public Elevator(){
}
public Elevator(int currentFloor,int destinationFloor){
this.currentFloor = currentFloor;
this.destinationFloor = destinationFloor;
this.up = false;
this.doorsopen = false;
}
//获取电梯当前层数
public int getDestinationFloor(){
return this.destinationFloor;
}
//获取电梯目的层数
public int getCurrentFloor(){
return this.currentFloor;
}
//开门方法
public void openDoors(){
System.out.println("正在开门……");
this.doorsopen = true;
}
//关门方法
public void closeDoors(){
System.out.println("正在关门……");
this.doorsopen = false;
}
//上升方法
public void goingUp(){
System.out.println("正在上升…… 当前层数:"+this.currentFloor);
this.currentFloor ++;
this.up = true;
}
//下降方法
public void goingDown(){
System.out.println("正在下降…… 当前层数:"+this.currentFloor);
this.currentFloor --;
this.up = false;
}
//运动方法,到目的层数
public void goToFloor(int n){
this.destinationFloor = n;
System.out.println("目标层数:"+n);
while(this.destinationFloor != this.currentFloor){
if(this.currentFloor < this.destinationFloor){
this.goingUp();
}
else{
this.goingDown();
}
}
System.out.println(this.currentFloor+"到了!");
}
}
import java.util.Scanner;
public class ElevatorPrograme {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Elevator e1 = new Elevator(1,1);
Scanner scan = new Scanner(System.in);
do{
int choice = 0;
System.out.println("请输入你当前的层数:");
choice = scan.nextInt();
System.out.println("请等待");
e1.goToFloor(choice);
e1.openDoors();
e1.closeDoors();
System.out.println("请输入你要到达的层数:");
choice = scan.nextInt();
e1.goToFloor(choice);
e1.openDoors();
e1.closeDoors();
}while(true);
}
}