原创 转帖:面向对象技术基础(非常好的2)

2007-10-23 11:17 3117 6 6 分类: 软件与OS
面向对象技术基础(非常好的2)

2007-10-12 23:48


方法体
  方法体是对方法的实现,它包括局部变量的声明以及所有合法的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);
    
}
  
}

  上例中我们用到了this,这是因为init()方法的参数名与类的成员变量x,y的名字相同,而参数名会隐藏成员变量,所以在方法中,为了区别参数和类的成员变量,我们必须使用thisthis-----用在一个方法中引用当前对象,它的值是调用该方法的对象。返回值须与返回类型一致,或者完全相同,或是其子类。当返回类型是接口时,返回值必须实现该接口。


 5.方法重载
 
  方法重载是指多个方法享有相同的名字,但是这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。返回类型不能用来区分重载的方法。

  参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如intlong

【例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);

    } 

  }
 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;
    
}
  }


322 对象
  类实例化可生成对象,对象通过消息传递来进行交互。消息传递即激活指定的某个对象的方法以改变其状态或让它产生一定的行为。一个对象的生命周期包括三个阶段:生成、使用和消除。

  1. 对象的生成  2. 对象的使用  3. 对象的清除


1. 对象的生成

  对象的生成包括声明、实例化和初始化。
  格式为:
  type objectName="new" type([paramlist]);

  声明type objectName
  声明并不为对象分配内存空间,而只是分配一个引用空间;对象的引用类似于指针,是32位的地址空间,它的值指向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址,而对于对象所在的实际的内存地址是不可操作的,这就保证了安全性。


实例化:运算符new为对象分配内存空间,它调用对象的构造方法,返回引用;一个类的不同对象分别占据不同的内存空间。
  生成:执行构造方法,进行初始化;根据参数不同调用相应的构造方法。

 2. 对象的使用

  通过运算符"."可以实现对变量的访问和方法的调用。变量和方法可以通过设定访问权限来限制其它对象对它的访问。

  调用对象的变量
  格式:objectReference.variable
  objectReference是一个已生成的对象,也可以是能生成对象的表达式
  例: p.x= 10;
     tx=new Point( ).x;

  调用对象的方法
  格式:objectReference.methodName([paramlist]);
  例如:p.move(30,20);
     new Point( ).move(30,20);

 3. 对象的清除

  当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。
  System.gc( );  
  当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。



323 面向对象特性

  java语言中有三个典型的面向对象的特性:封装性、继承性和多态性,下面将详细阐述。
  1 封装性
  2 继承性
  3 多态性
  4 其它



 1 封装性


java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。




  类体定义的一般格式:
  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} //成员方法
  }


◇ java类中的限定词
  java语言中有四种不同的限定词,提供了四种不同的访问权限。
  1 private
  类中限定为private的成员,只能被这个类本身访问。
  如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
  2 default
  类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。
  3 protected
  类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
  4 public
  类中限定为public的成员,可以被所有的类访问。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条