1.类声明:
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]
{……}
其中,修饰符public,abstract,final 说明了类的属性,className为类名,superclassName为类的父类的名字,interfaceNameList为类所实现的接口列表。
2.类体
类体定义如下:
class className
{[public | protected | private ] [static]
[final] [transient] [volatile] type
variableName; //成员变量
[public | protected | private ] [static]
[final | abstract] [native] [synchronized]
returnType methodName([paramList]) [throws exceptionList]
{statements} //成员方法
}
3.成员变量
成员变量的声明方式如下:
[public | protected | private ] [static]
[final] [transient] [volatile] type
variableName; //成员变量
其中,
static: 静态变量(类变量);相对于实例变量
final: 常量
transient: 暂时性变量,用于对象存档
volatile: 贡献变量,用于并发线程的共享
4.成员方法
方法的实现包括两部分内容:方法声明和方法体。
[public | protected | private ] [static]
[final | abstract] [native] [synchronized]
returnType methodName([paramList])
[throws exceptionList] //方法声明
{statements} //方法体
方法声明中的限定词的含义:
static: 类方法,可通过类名直接调用
abstract: 抽象方法,没有方法体
final: 方法不能被重写
native: 集成其它语言的代码
synchronized: 控制多个并发线程的访问
◇ 方法声明
方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。
对于简单数据类型来说,java实现的是值传递,方法接收参数的值,但不能改变这些参数的值。如果要改变参数的值,则用引用数据类型,因为引用数据类型传递给方法的是数据在内存中的地址,方法中对数据的操作可以改变数据的值。
例3-1说明了简单数据类型与引用数据的区别。
【例3-1】
import java.io.*;
public class PassTest{
float ptValue;
public static void main(String args[]) {
int val;
PassTest pt=new PassTest();
val=11;
System.out.println("Original Int Value is:"+val);
pt.changeInt(val); //值参数
System.out.println("Int Value after Change is:" +val); /*值参数
值的修改,没有影响值参数的值*/
pt.ptValue=101f;
System.out.println("Original ptValue is:"+pt.ptValue);
pt.changeObjValue(pt); //引用类型的参数
System.out.println("ptValue after Change is:"+pt.ptValue);/* 引用参数值的修改,改变了引用参数的值*/
}
public void changeInt(int value){
value=55; //在方法内部对值参数进行了修改
}
public void changeObjValue(PassTest ref){
ref.ptValue=99f; //在方法内部对引用参数进行了修改
}
}
运行结果 c:/>java PassTest Original Int Value is : 11 Int Value after Change is: 11 Original ptValue is: 101.0 ptValue after Change is : 99.0 |
◇ 方法体
方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。
例3-2 说明了局部变量z和类成员变量z的作用域是不同的。
【例3-2】
import java.io.*;
class Variable{
int x=0,y=0,z=0; //类的成员变量
void init(int x,int y) {
this.x=x; this.y=y;
int z=5; //局部变量
System.out.println("** in init**");
System.out.println("x="+x+" y="+y+" z="+z);
}
}
public class VariableTest{
public static void main(String args[]){
Variable v=new Variable();
System.out.println("**before init**");
System.out.println("x="+v.x+" y="+ v.y+" z="+v.z);
v.init(20,30);
System.out.println("**after init**");
System.out.println("x="+v.x+ " y="+ v.y+" z="+v.z);
}
}
运行结果
c:/>java VariableTest **before init** x=0 y=0 z=0 ** in init ** x=20 y=30 z=5 **after init** x=20 y=30 z=0 |
上例中我们用到了this,这是因为init()方法的参数名与类的成员变量x,y的名字相同,而参数名会隐藏成员变量,所以在方法中,为了区别参数和类的成员变量,我们必须使用this。this-----用在一个方法中引用当前对象,它的值是调用该方法的对象。返回值须与返回类型一致,或者完全相同,或是其子类。当返回类型是接口时,返回值必须实现该接口。
5.方法重载
方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。
参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。
【例3-3】
import java.io.*;
class MethodOverloading{
void receive(int i) {
System.out.println("Receive one int data");
System.out.println("i="+i);
}
void receive(int x, int y) {
System.out.println("Receive two int datas");
System.out.println("x="+x+" y="+y);
}
}
public class MethodOverloadingTest{
public static void main(String args[]) {
MethodOverloading mo=new MethodOverloading();
mo.receive(1);
mo.receive(2,3);
}
}
运行结果(编译器会根据参数的个数和类型来决定当前所使用的方法)
c:/>java MethodOverloadingTest Receive one int data i=1 Receive two int datas x=2 y=3 |
6. 构造方法
◇ 构造方法是一个特殊的方法。Java 中的每个类都有构造方法,用来初始化该类的一个对象。
◇ 构造方法具有和类名相同的名称,而且不返回任何数据类型。
◇ 重载经常用于构造方法。
◇ 构造方法只能由new运算符调用
【例3-4】
class Point{
int x,y;
Point(){
x=0; y=0;
}
Point(int x, int y){
this.x=x;
this.y=y;
}
}
 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2