Java类和对象—变量的作用域+成员(局部变量)+成员方法
前言
上一期我更新到Java中的类 + 对象 + 封装,本期更新的内容也算是属于类的相关知识。其中包括成员变量、成员方法和局部变量。一起来看看。 let’s Look;
(本文如有任何错误观点还请路过的大佬不吝赐教,感激不尽!!!)
一、变量的作用域
- 成员变量:类的方法可以直接使用该类定义成员变量。如果其他类的方法要访问它,收先要做的就是创建该类的独享,然后通过操作符“.”来引用。
- 局部变量:他的作用域仅仅在定义该变量的方法内,因此只有在这个方法中能够使用。
注意:
- 作用域不同。局部变量的作用域仅限于定义他的方法,在该方法外无法访问。成员变量的作用域在整个类的内部都是可见的,所有成员方法都可以使用,如果访问权限允许,还可以在类外部使用成员变量。
- 初始值不同。对于成员变量,如果在定义类中没有给它赋初始值,Java会给它一个默认值,基本数据类型的值为0,引用数据类型的值为null。但是Java不会给局部变量赋初始值。因此局部变量必须要定义赋值后再使用。
- 在同一个方法中,不允许有同名的局部变量,在不同的方法中可以有同名的局部变量。
- 局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
二、成员变量
在Java语言中,对象的属性我们也称为成员变量。为了了解成员变量的相关问题我决定写一段代码来见证一下。
首先,定义一个学生,成员变量对应于类对象的属性,在学生类中设置三个成员变量,分别为id、name、classroom,分别代表学号、姓名、班级3个属性。
展示!!!展示!!!展示!!!
代码示例:
public class SchoolStudent {
private String name; //定义一个String类型的成员变量
public String getName(){ //定义一个getName方法
int id = 001; //局部变量
setName("Java"); //调用类中的其他方法
return id + this.name; //设置方法返回值
}
private void setName(String java) { //定义一个setName()方法
this.name = name; //将参数值赋予类中的成员变量
}
public SchoolStudent getSchoolStudent(){
return this; //返回SchoolStudent类引用
}
}
根据以上代码可知,在Java语言中使用class关键字来定义类,该类中有三个成员变量,成员变量的数据类型可以设置为Java中合法的数据类型,成员变量就是普通的变量,可以为它设置初始值,也可以不设置初始值。如果不设置初始值,则会有默认值。private用来定义一个私有成员。
三、成员方法
Java语言中使用成员方法对应于类对象的行为。以上文中的SchoolStudent类为例,该类中包含getName()和setName()两个方法,这两个成员方法分别为获取学生姓名和设置学生姓名的方法。
语法:
权限修饰符 返回值类型 方法名(参数类型 参数名){
方法体
return 返回值;
}
一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,如果方法需要返回值可以在方法体中使用return关键字,这个关键字一旦被使用,方法的执行将被终止。
成员方法的返回值可以是计算结果,也可以是其他想要的数值和对象,返回值类型与方法返回的值类型一致。
在成员方法中可以调用其他成员方法和类成员变量。在上述代码中的getName()方法中就调用了setName方法将图书名称赋予一个值。同时在成员方法中可以定义一个变量,这个变量就是局部变量。
注意:
- Java中的成员方法无返回值,可以使用void关键字表示。
- 类成员变量可以和成员方法也可以统称为类成员
- 如果一个方法中含有与成员变量同名的局部变量,则方法中对这个变量的访问以局部变量进行。例如,变量id在getName()方法中值为0,而不是成员变量中id的值。
四、局部变量
3.1局部变量
如果在成员方法内定义一个变量,那么这个变量就被称为局部变量。
例如上述代码SchoolStudent类中,getName()方法中定义的id就是一个局部变量,实际上方法中的形参也可作为一个局部变量。如在定义setName(String name)方法时,String name这个形参就可以看做是局部变量。
局部变量就是在方法执行时被创建,方法执行结束时被销毁。局部变量在使用的时候必须进行赋值操作或被初始化,否则就会编译出现错误。
创建一个类文件,在该类文件定义getName()方法并进行调用。
展示!!!展示!!!展示!!!
代码示例:
public String getName(){ //定义一个getName方法
int id = 001; //局部变量
setName("Java"); //调用类中的其他方法
return id + this.name; //设置方法返回值
}
如果将id这个局部变量的初始值去掉,编译器将会出现错误。
3.2局部变量的有限范围(作用域)
可以将局部变量的有效范围称为变量的作用域,局部变量的作用域从该变量被声明开始到该变量的结束为止。
安排一张图解释一下。
在相互不嵌套的作用域中可以同时声明两个名称和类型相同的局部变量:
代码示例:
public void doString(){
int id = 0;
for (int i = 0; i < 5; i++) {
System.out.println(name+String.valueOf(i));
}
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
}
在相互嵌套的区域中绝对不允许这样声明。(为避免误导,再此不展示错误的代码)
注意:
- 在作用域外使用局部变量是一个常见的错误,因为在作用范围外没有声明局部变量的代码。
关注我,持续更新!!!