您的位置:首页 > 其它

类的成员变量、成员方法、权限修饰符、局部变量等

2017-09-11 13:07 274 查看
类是封装对象的属性和行为的载体,在Java语言中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在。

1、成员变量;

在Java中对象的属性也称为成员变量,为了了解成员变量,首先定义一个图书类,成员变量对应类对象的属性,在BOOK类中设置了3个成员变量,分别为Id、name和catagory,分别对应于图书编号、图书名称和图书类别3个图书属性。

例1;在项目中创建Book类,在该类中定义并使用成员变量;

public class Book{
private String name;//定义一个String型的成员变量
public String getName(){//定义一个getName()方法
int id =0;    //局部变量
setName("Java");   //调用类中其他方法
return id+this.name;   //设置方法返回值
}
private void setName(String name){//定义一个setName()方法
this.name=name;//将参数值赋予类中的成员变量
}
public Book getBook(){
return this;//返回Book类引用
}
}


2、成员方法;

在Java语言中使用成员方法对应于类对象的行为,以Bok类为例,它包含getName()和setName()两个方法,这两个成员方法分别为获取图书名称和设置图书名称的方法。

定义成员方法的语法格式如下:

权限修饰符   返回值类型   方法名(参数类型 参数名)

{
...//方法体
return 返回值;
}


一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值得选择,如果方法需要返回值,可以在主方法中使用return关键字,使用这个关键字后,方法的执行将被终止。

成员方法的返回值可以是计算结果,也可以是其他想要的数值和对象,返回值类型要与方法返回的值类型一致。

在成员方法中可以调用其他成员方法和类成员变量,如在例1中的getName()方法中就调用了setName()方法将图书名称赋予一个值。同时在成员方法中可以定义一个变量,这个变量为局部变量。

3、权限修饰符

Java语言中的修饰符权限:

访问包位置修饰
privateprotectedpublic
本类可见可见可见
同包其他类或子类不可见可见可见
其他包的类或子类不可见不可见可见
注意

当声明时不使用public、protected和private修饰符设置类的权限,则这个类预设为包 存取范围,既只有一个包中的类可以调用这个类的成员变量或成员方法;

例1;在项目中的com.lzw包下创建AnyClass类,该类使用默认的访问权限。

package com.lzw;
class AnyClass{
public void doString(){
...//方法体
}
}


在上述代码中,由于类的修饰符为默认修饰符,即只有一个包内的其他类和子类可以对该类进行访问,而AnyClass类中的doString()方法却又被设置public访问权限,即使这样,doString()方法的访问权限依然与AnyClass类的访问权限相同,因为Java语言规定,类的权限设定会约束类成员的权限设定所以上述例1的代码等同于例2的代码;

例2;

package com.lzw;
class AnyClass{
void doString(){
...//方法体;
}
}


4、局部变量

在成员方法内定义一个变量,那么这个变量被称为局部变量。实际上方法中的形参也可作为一个局部变量,如在定义setName(String name)方法时,Stringname这形参就被看作是局部变量。

局部变量是在方法被执行时创建,在方法执行结束时被销毁,局部变量在使用时,必须进行赋值操作或被初始化,否则会出现编译错误。

5、局部变量的有效范围

可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止,例3描述了局部变量的作用范围。

public void doString(String name){
int id=0;
for(int i = 0;i<10;i++){
System.out.println(name+String.valueOf(i));
}
}

局部变量id的作用范围为整个方法;
局部变量i的作用范围是在这个循环体内;


在相互不嵌套的作用域中可以同时声明两个名称和类型相同的局部变量,如例4所示:

public void doString(String name){
int id =0;
for(int i=10;i<10;i++)
{
System.out.println(name+String。valueOf(i));
}
for(int i=0;i<3;i++)
{
System.out.println(i);
}
}
在互不嵌套的区域可以定义相同名称和类型的局部变量


6、this关键字;

例5;在项目创建一个类文件,该类中定义了setName(),并将方法的参数值赋予类中的成员变量。

private void setName(String name)
{
this.name =name;//将参数值赋予类中的成员变量;
}


在Java语言中规定使用this关键字来代表本类对象的引用,this关键字被隐式地用于引用对象的成员变量和方法,如在上述代码中,this.name指的就是Book类中的name成员变量,而this.name=name语句中的第二个name则指的是形参name。实质上setName()方法实现的功能就是将形参name的值赋予成员变量name;

在Java语言中最常规的调用成员变量和成员方法的方式是使用“对象.成员变量”或“对象.成员方法”进行调用。

this关键字和对象都可以调用成员变量和成员方法,this引用的就是本类的一个对象,在局部变量或方法参数覆盖了成员变量时,如上面代码的情况,就要添加this关键字明确引用的是类成员还是局部变量或方法参数。

如果省略this关键字直接写成name=name,那只是把参数name赋值给参数变量本省而已,成员变量name的值没有改变,因为参数name在方法的作用域中覆盖了成员变量name;

其实,this除了调用成员变量或成员方法之外,还可以作为方法的返回值。

例6;在项目中创建一个类文件,在该类中定义Book类型的方法,并通过this关键字进行返回。

public Book getBook(){
return this;//返回Book类引用
}


在getBook()方法中,方法的返回值为Book类,所以方法体中使用return this这种形式将Book类的对象
9bd3
进行返回。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: