面向对像编程初步

       面对对象编程具有多方面的吸引力,实现了更快和更廉价的开发与维护过程。对于分析与设计人员,通过面向对象分析和设计技术建立模型的过程变得更加简单,能够生成清晰、易于维护的设计方案;对于程序员来说,面向对象模型显得有条理、浅显易懂。此外,面向对象工具以及类库的巨大威力使编程成为一项更使人愉悦的任务。如果说它有缺点,那就是掌握它需付出一定的代价,因为思考对象的时候,需要采用形象思维,而不是程序化、过程化的思维。与程序设计相比,对象的设计过程更具挑战性——特别是在尝试创建可重复使用(可再生)的对象时尤为如此。

Java是面向对象的程序设计语言,提供了定义类、定义变量、方法等最基本的功能。

 

一、类和对象

     类是面向对象的重要内容,与前面的数据类型一样,类是一种自定义的数据类型,可以使用类定义变量,这种变量称为引用数据类型变量,它们将会引用到类的对象,对象由类负责创建。

     类用于描述客观世界里某一类对象的共同特征,是某一批对象的抽象,可以将它理解成某种概念;而对象则是类的具体存在,如果说类是建筑图纸,那么对象是按照建筑图纸盖成的某个大楼。

1.类的定义

 Java语言里定义类的简单语法格式如下:

       [修饰符]  class  类名{
                  零个或多个构造方法定义……
                  零个或多个变量……
                  零个或多个方法……
      }
       在上面的语法格式中,修饰符可以是 public  final ,或者完全省略这两个修饰符;类名只要是一个合法的标识符即可,这只满足 Java 的语法要求;如果从程序的可读性方面来看, Java 类名必须是由一个或多个有意义的单词组合而成,每个单词首字母大写,其他字母全部小写,单词与单词之间不要使用任何分隔符。

        对一个类定义而言,可以包含三种最常见的成员,即构造方法、变量和方法,三种成员可以定义零个或多个,如果三种成员都指定义零个,就定义了一个空类,这没有太大的实际意义。

        变量用于定义该类或该类的实例(对象)所包括的数据;方法则用于定义该类或该类的实例(对象)的行为特征或功能实现;构造方法用于构造该类的实例,Java语言通过new关键字来调用构造方法返回该类的实例。

      构造方法是一个类创建对象的根本途径,如果一个类没有构造方法,那么该类通常将无法创建实例。因此,Java语言提供了一个功能;如果程序员没有为一个类编写构造方法,则系统会为该类提供一个默认的构造方法。一旦程序员为一个类提供了构造方法,系统将不再为该类提供构造方法。

 

(1)定义变量的语法格式

[修饰符]  变量类型  变量名 [=默认值];
变量定义的语法格式说明如下:

        修饰符:修饰符可以省略,也可以是publicprotectedprivatestaticfinal,其中publicprotectedprivate三个最多只能出现其中之一,可以与staticfinal组合起来修饰变量。

       变量类型:可以是Java语言允许的任何数据类型,包括基本数据类型和现在介绍的引用数据类型(类)。

       变量名:变量名只要是一个合法的标识符即可,但如果从程序可读性角度来看,变量名应该由一个或多个有意义的单词组合而成,第一个单词首字母小写,后面每个单词首字母大写,其他字母全部小写,单词与单词之间不需要使用任何分隔符。

       默认值:定义变量还可以定义一个可选的默认值。


变量是一种比较传统,也比较符合汉语习惯的说法。在Java的官方说法里,变量被称为final,因此有的地方也把变量翻译为字段。

 

(2)定义方法的语法格式

   [修饰符]  方法返回值类型  方法名[(形参列表)]{
      //有零条或多条语句组成的方法体   
    }
方法定义的语句格式说明如下:

       修饰符:修饰符可以省略,也可以是publicprotectedprivatestaticfinalabstract,其中publicprotectedprivate三个最多只能出现其中之一;abstractfinal最多只能出现其中之一,它们可以与static组合起来修饰方法。

       方法返回值类型:返回值类型可以是Java语言允许的任何数据类型,包括基本数据类型和引用数据类型;如果声明了方法返回值类型,则方法体内必须有一条有效的return语句,该语句返回一个变量或一个表达式的值,这个变量或者表达式的类型必须与返回值类型匹配。除此之外,如果一个方法没有返回值,则必须使用void来声明。

       方法名:方法名的命名规则与变量名的命名规则基本相同,但通常建议方法名以英文中的动词开头。

       形参列表:用于定义该方法可以接受的参数,形参列表有零组或多组“参数类型 形参名”组合而成,多组参数之间以英文逗号隔开,形参类型和形参名之间以英文空格隔开。一旦在定义方法时指定了形参列表,则必须使用void来声明。

      方法里有多条可执行语句之间有严格的执行顺序,排在方法体前面的语句总先执行,排在方法体后面的语句最后执行。Static是一个特殊的关键字,可用于修饰方法、变量等成员。Static修饰的成员表明它是属于这个类公有的,而不是属于该类的单个实例,因此通常把static修饰的变量和方法也称为类变量、类方法。由于static直译就是静态的意思,因此也把static修饰的变量和方法称为静态变量和静态方法,把不适用static修饰的变量和方法称为非静态变量和非静态方法。静态成员不能直接访问非静态成员。

 

(3)构造方法的语法格式

  构造方法可以认为是一种特殊的方法,其定义语法格式与定义方法的语法格式很像,具体格式如下:

[修饰符]  构造方法名([形参列表]){
        //由零条或多条可执行性语句组成的执行体
}
构造方法的语法格式说明:

  修饰符:修饰符可以省略,也可以是publicprotectedprivate其中之一。

  构造方法名:构造方法必须和类名相同。

  形参列表:和定义方法形参列表的格式完全相同。

        构造方法不能声明返回值类型,也不能使用void关键字声明构造方法没有返回值。如果为构造方法声明了返回值类型,或使用void关键字声明构造方法没有返回值,编译时不会出错,但java会把这个所谓的构造方法当成普通方法来处理。

例如:  定义一个car

public class Car{
     //下面定义一个变量
     public String name;
     public String color;
 
     //下面定义一个构造方法;
   public Car(String name,String color){
     name=name;
     color=color;
   }
 
//下面定义一个run方法
   public void run (String speed){
     System.out.println(speed);
   }
}
       其中,类 Car 中包括两个公有的 String 类型的变量 name color 构造方法带两个形参 name color ,用于给 Car 类中定义的变量 name color 赋值,此外 Car 类中还定义一个 run() 方法,输出该汽车的速度。


 2.对象的使用

创建对象的根本途径是构造方法,通过new关键字来调用某个类的构造方法即可创建这个类的实例

 //定义一个Car变量c
car c;
//通过new关键字调用Car类的构造方法,返回一个Car实例,将该实例赋值给变量c
c=new Car(“QQ”,”黄色”);
 
如果访问权限允许,类里定义的方法和变量都可以通过类或实例来调用。类或实例访问方法或变量的方法的格式为:

   类名.变量名 或 类名.方法名([参数列表])
   对象名.变量名 或 对象名.方法名([形参列表])

       在这种方式中,类或对象是主调者,用于访问该类或该对象的指定变量或方法。Static 修饰的方法和变量,既可通过类来调用,也可通过对象来调用;没有使用static修饰的普通方法和变量,则只能通过对象来调用。

   

3.This的使用

Java提供了一个this关键字作为自身的引用,其作用就是在类的自身方法中引用该类对象自身。

例:this的使用

 public class Car{
   //下面定义了三个变量
       public String name ;
       public String color ;
       public int oil;
       public Car(String namel ,int getoil){
              this.name=namel;
              this.oil=getoil;
       }
  //下面定义了一个run方法
       public void run(int speed){
             this.oil=speed;
             System.out.println(speed);
       }
}
Car 类中的构造方法和 run() 方法中都使用了 this 关键字,代表 Car 类的实例本身。


         在不引起歧义的情况下,this关键字是可以省略的。那么什么时候this是不可以省略的呢?在java程序种,变量分为类变量(在类中定义的成员变量)、方法变量(在方法中定义的变量)和局部变量(在复合语句中定义的变量),在一个类里面,类变量是不能重名的,但方法变量和局部变量似可以和类变量重名的,这时候可以使用this、来限定和区分是否是类变量。

例:使用this来限定和区分是否类变量

 public class Car{
   //下面定义了三个类变量
             public String name ;
             public String color ;
             public int oil;
             public Car(String namel,int oil){
     //类变量和方法变量同名
                         this.name=name;          //this.name表示类变量,name表示方法变量
                         this.oil=oil;                      //this.oil表示类变量,oil表示方法变量
             }
  //下面定义了一个run方法
            public void run(int speed){
                     this.oil=speed;            //speed和oil都是方法变量 
                     System.out.println(speed);
           }
}
       除了用在方法里访问变量外,方法间的互相引用也可以使用 this 关键字。就像在现实世界里,对象的一个方法依赖于另一个方法的情形那样常见。例如,吃饭方法依赖于拿筷子方法,写程序方法依赖于敲键盘方法,这种依赖都是同一个对象两个方法之间的依赖。

public void hightRun(int speed){
     int hightSpeed=2*speed;
     this.run(hightSpeed);
}
       方法 highrun ()意味着高速跑,即等于执行了 run 方法的 2 倍,这个是可以省略的。

      大部分时候,一个方法访问本类的其他方法时this、是可以省略的,这与前面所介绍的类定义里各成员之间可以互相调用的结论完全一致。但对于static、修饰的方法而言,则必须使用类名来直接调用。由于static代表的是类共享的东西,如在car中定义方法是static、类型的,那么该方法时car类公有的东西,既不属于奔驰也不属于夏利,如果使用this关键字,则这个关键字就无法指向合适的对象所以static修饰的方法中不能使用this引用。由于static修饰的方法不能使用this引用所以static修饰的方法不能访问不适用static修饰的普通成员,这与前面之处的静态成员不能直接访问非静态成员的结论也完全一致。

       除此之外,this引用也可以用于构造方法中作为默认引用,由于构造方法是直接使用new关键字来调用,所以在构造方法中调用另外的构造方法是不能直接写构造方法名称的,即this在构造方法中引用的是该构造方法进行初始化的对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值