在Java 面向对象概述中已经讲过了类的概念,类是封装对象的属性和行为的载体,而在Java语言中,对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。这里三者之间的关系可以简单概括为:类对象的属性是成员变量,类对象的行为是成员方法,而在成员方法中定义变量就叫局部变量。
1.成员变量
在Java中对象的属性称为成员变量。为了了解成员变量,在下面的代码中首先定义一个图书类,成员变量对应于类对象的属性,在Book类中设置3个成员变量,分别为id,name和category,分别对应于图书编号,图书名称和图书类别3个图书属性。
public class Book{
private String name; //定义一个String类型的成员变量
public String getName(){ //定义一个getName()方法
int id=0; //局部变量
setName=("java"); //调用类中其他方法
return id+this.name; //设置方法返回值
}
public void setName(String name){ //定义一个setName()方法
this.name=name; //将参数赋值于类中的成员变量
}
public Book getBook(){
return this; //返回Book类引用
}
}
成员变量可以设置初始值,也可以不设置,如果不设置初始值,则会有默认值。
2.成员方法
在Java语言中使用成员方法对应于类对象的行为。以上面代码中Book类为例,它包含getName()和setName()两个方法。
一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量。同时成员方法有返回值和不返回任何值的选择,如果需要返回值,可以在方法体中使用return关键字,返回值可以是计算结果,也可以是其他想要的数值和对象,无返回值可以使用void关键字表示。
在成员方法中可以调用其他成员方法和类成员变量,例如上述代码中getName()方法中就调用了setName()方法将图书名称赋予一个值。
注:关于权限修饰符
如果一个类的成员变量或成员方法被修饰为private,则只能在本类中使用,在子类中不可使用,并且在其他包的类中是不可见的。如果被修饰为public,则在子类和其他包的类中可以使用。
3.局部变量
在成员方法中定义一个变量则被称为局部变量,例如上述代码中,getName()方法的id即为局部变量。局部变量在方法被执行时创建,在方法执行结束时销毁。并且局部变量在使用时必须进行赋值操作或被初始化,否则出现编译错误。
局部变量的有效范围从该变量的声明开始到该变量的结束为止,并且在相互不嵌套的作用域中可以同时声明两个相同的局部变量。
关于成员变量和局部变量的区别:
成员变量:作为类的成员而存在,直接存在于类中。所有类的成员变 量可以通过this来引用。
局部变量:作为方法或语句块的成员而存在,存在于方法的参数列表和方法定义中。
1.成员变量可以被 public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及 static修饰;两者都可以定义成final型。
2.成员变量存储在堆,局部变量存储在栈。局部变量的作用域仅限于定义它的方法,在该方法的外部无法访问它。成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它。如果访问权限允许, 还可以在类的外部使用成员变量。
3.局部变量的生存周期与方法的执行期相同。 当方法执行到定义局部变量的语句时,局部变量被创建;执行到它所在的作用域的最后一条语句时,局部变量被销毁。类的成员变量,如果是实例成员变量,它和对 象的生存期相同。而静态成员变量的生存期是整个程序运行期。
4.成员变量有默认值,基本类型的默认值为 0,复合类型的默认值为null。(被final修饰且没有static的必须显式赋值),局部变量不会自动赋值,所以局 部变量在定义后先要赋初值,然后才能使用。
5.局部变量可以和成员变量同名,且在使用时,局部变量具有更高的优先级。
好了,今天的内容就讲到这里,感谢大家的阅读!