Java面向对象(一)

来源:互联网 发布:淘宝大学网店运营视频 编辑:程序博客网 时间:2024/05/24 20:08

一 类和对象

          类是用于描述客观世界里某一类对象的共同特征,是人们从现实世界中抽象而来的概念。而对象是现实世界里真正存在的实体,是类的一个实例。比如:我们说的“学生”是一个抽象概念,它是指具有学生特征的一类人的总称,而我们说的某班的“张三”同学,是指存在于“学生”类里的一个实体,是真实存在的。

          面向对象是一种优秀的程序设计思想,它的基本思想是使用类、对象、继承、封装等基本概念来进行程序设计。它是从现实世界中客观存在的事物(对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把他们抽象的表示为系统中的类,作为系统的基本构成单元,这使得系统可以直接映射客观世界,并保持客观世界中事物及其相互关系的本来面貌。

       1、 面向对象的基本特征

           面向对象具有三个基本特征:封装、继承和多态。

           封装是指将对象的实现细节隐藏起来,然后通过一些公用方法暴露该对象的功能;

           继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法。注意,Java中不支持多重继承。

           多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在运行时可能表现出不同的行为特征。

       2、 类的定义

          在Java中,类可以看成是自定义的一种数据类型,用类来定义的类型称为复合数据类型或者引用类型。类定义如下:

          [类修饰符] class  自定义类名{

               零个或多个构造方法

               零个或多个成员(属性)

               零个或多个行为(方法)

               其它

         } 

         类修饰符有public、final、abstract,默认,当然也可以省略这些修饰符

         public:表示类为公用的,该修饰符修饰的类名一定要与该类所在的文件同名,同时一个Java源文件中,只能有一个public修饰的类。

         final:表示当前类为最终类,即不能拥有子类。

         abstract:表示该类为抽象类,不能实例化对象。

      3、 成员变量的定义

          定义格式如下:

            [修饰符]  属性类型  属性名 [默认值]

          修饰符有public、protected、private、static、final

          属性类型:可以为简单类型或者复合类型

          属性名:自定义的合法的标识符

          默认值:对于定义的属性可以赋予默认值,若不给赋初值,对于不同的类型系统会对其自动初始化,其中int\short\byte=0;long=0l;double=0.0;float=0.0f;boolean=false;char=\u0000

      4、 成员方法的定义

          [修饰符] 方法返回类型  方法名称(形参列表){

                  方法体

          }

         修饰符:可以省略,也可以是public、protected、private、static、final,详见Java中的包

         方法返回类型:可以是Java中的任何类型,用void表示该方法没有返回值。

         方法名称:自定义的合法的Java标识符

         形参列表:用于定义方法可以接受的参数。

二 对象的实例化和使用

        类只是一个抽象模板,类中的成员和方法我们都无法使用,要想使用类中的成员和方法,就必须实例化对象。实例化对象的过程就是根据Java类的结构在JVM内存中开辟空间,并初始化相应的数据。

       1、 对象的创建方法

             类名  实例名=new 类名(参数)

            例如: Student stu = new Student();

            类名:我们自己定义的类名,也可以是Java类库本身已有的类的名称。

            实例名: 自己定义的对象名称

            参数:为实例化对象提供初始数据。

            当实例化对象后,就可以通过对象名.方法名(或成员名)来调用其方法和成员。

       2、 对象实例化过程

            对象实例化过程就是按照类的模板在JVM堆中开辟内存,并做一些简单的初始化,然后将堆中内存的首地址赋给栈中的对象名。

三 Java中的变量

       1、 成员变量

            在类体里声明的变量为成员变量,也称为类的成员或属性。

            类的成员变量不能直接使用,一定要实例化类的对象,通过对象才可以使用成员变量。静态变量可以通过类名直接调用。

            成员变量的作用域为整个类体。

        2、 局部变量

            声明在方法体内部的变量称为局部变量。

            局部变量前没有修饰符,作用域在整个方法体内有效。

            局部变量一定要赋初值才可以使用,局部变量只有在使用时才开辟空间。

       3、 静态变量(类变量)

            用static关键字修饰的变量为静态变量,不需要实例化对象,可以直接通过 类名.变量名  来调用。

            同一个类的各个对象之间共享静态变量的同一块内存。

            static修饰的方法和static修饰的属性类似,都可以用类名去调用。

            静态的方法不能调用非静态的 成员变量。

           补充:Java程序的执行过程

              首先将字节码文件加入内存;虚拟机检测字节码文件;系统为每个字节码文件生成class对象;初始化字节码文件的静态[变量、方法、代码块];程序入口(如main方法)。

              javap 字节码文件      反编译字节码文件

四 Java中的方法

      1、 构造方法

            构造方法是Java中特殊的方法,用来为对象初始化数据;构造方法的方法名同所在类名相同。

            构造方法没有任何的返回类型,当然也不能返回void,只能通过new或this去调用。

            如果自定义类中没有任何人为声明的构造方法,系统会默认为当前类增加一个不带任何参数的空构造方法。当有自己声明的带参构造方法(没有声明无参的构造)时,不能使用无参构造方法。

            注意:this关键字代表当前对象,用this变量可以解决类成员变量和局部变量同名的冲突,this变量还可以在当前构造方法里调用所在类的其它构造方法,但一定要把this写在构造方法除注释以外的第一行。

      2、 方法重载

            重载是指在同一个类中允许有重名的方法存在,但方法的参数必须不同,参数不同是指参数的个数不同 或参数的类型不同或参数的顺序不同,重载经常用于构造方法。

            不能用方法的返回类型来决定方法的重载,可以百度“方法签名”。

     3、 方法传参

            在Java中方法的参数传递为值传递。

            给方法传值,其实就是将实参值的副本(内存中实参的一份复制)传入方法内,而参数本身不受到 影响。

            简单数据类型和复合数据类型都传递一份实参栈值的副本。注意:交换两个数的方法中 ,方法参数为基本类型时交换不了实参的值,但参数为引用类型时可以交换

     4、 可变的形参长度

            JDK1.5之后,Java允许方法形参长度可变,允许为方法指定数量不确定的形参,多个参数的值会被当做数组传入。

            一个方法中,只能有一个可变长度的形参,可变长度的形参要写在最后一个参数。例如:

      //可变长度形参示例      public static void method(int i,String ... emails){        for(String str:emails)          System.out.println(str);      }     //可变长形参与重载     public static void method1(String str){        System.out.println(str);     }     public static void method1(String ... str){       for(String s:str)          System.out.println(s);     }     public static void main(String[] args){      //可变长形参示例      method(8,"abc","efg");     //可变长形参和重载      method1("one");      method1("one","two");    }

     5、 main方法

          main方法只提供JVM运行程序的入口方法,main方法里有一个String的字符串数组,用来接受命令行输入的参数。

0 0
原创粉丝点击