Java面向对象(1)

方法都是用于操作数据的。

如果所操作的数据比较固定----需要参数

如果所操作的数据不固定-------不需要参数

 

面向对象

面向过程编程:一堆方法,调来调去;以对象为核心,围绕着对象做操作

面向接口编程:面向对象的基础之上,抽接口复用性好,可维护性好,可扩展性好,移植性好....

面向过程:实在

面向对象:抽象

 

什么是抽象数据类型

所谓抽象数据类型可以理解为:将不同类型的数据的集合组成一个整体用来描述一种新的事物;

注意:1.现实世界是由很多对象组成的

           2.现实世界是先有对象,在抽出类的。

               代码中先创建类,在创建对象

           3.同一个类的多个对象,结构相同,数据不同。

什么是类

1)类定义了一种抽象数据类型

只能包含:(1)描述对象所共有的特征:成员变量(属性-----------静的)

                  (2)对象所共有的行为:方法(行为------------动的)

2)类不但定义了抽象数据类型的组成(成员变量),同时还定义了可以对该类型实施的操作。

定义了类以后,提升了代码块的模块化以及代码的重用性。

定义类的成员变量

类的定义包括“成员变量”的定义和“方法”的定义,其中“成员变量”用于描述该类型对象共同的数据结构

对象创建后,其成员变量可以按照默认的方式初始化,初始化对象成员变量时,其默认值的规则如下:

数值类型:byte   short   int   long   float   double (默认初始值为0)

boolean:默认初始值为:false

char型:默认初始值为:/u0000

引用类型:默认初始值为null

定义类的方法

类中除了定义成员变量,还可以定义方法,用于描述对象的行为,封装对象的功能。

创建并使用对象

类定义完成后,可以使用new关键字创建对象。创建对象的过程通常称为实例化。

new运算的语法为:new 类名();

如:new JFrame()可以创建一个窗体对象。

引用类型变量

为了能够对实例化的对象进行访问控制,需要使用一个特殊的变量-----引用

-----引用类型变量可以存放该类型对象的地址信息,通常称为“指向该类的对象”;当一个引用类型变量指向该类的对象时,就可以通过这个变量对对象实施访问。

-----除8种基本类型外,用类,接口,数组等声明的变量都称为引用类型变量,简称“引用”。

如:Cell c=new Cell();

注意:凡是new出来的对象都是引用类型;

JVM中内存一般分为两块区域:分别是栈区 和 堆区

     凡是对象都放在堆里面,成员变量也放在堆里面

                  所有的引用都存放在栈区里面(引用类型里面装的都是对象的地址,基本类型装的是具体的值)

引用类型与基本类型内存的分布图:

 

引用类型变量的赋值

引用类型变量存储的是对象的地址信息。相同类型的引用类型变量之间也可以相互赋值。

引用类型变量之间的赋值不会创建新的对象,但有可能会使两个以上的引用指向同一个对象。

public class test {
    public static void main(String[] args) {
        Emp e1=new Emp();
        Emp e2=e1;
        e1.setName("张三");
        e2.setName("李四");
        System.out.println("e1:"+e1.getName());//李四
        System.out.println("e2:"+e2.getName());//李四
    }
}

注意:基本类型之间划画等号 -----在赋值

           引用类型之间画等号---------指向同一个对象

具体内存图如下:

 

 

null和NullPointerException

对于引用类型变量,可以对其赋值为null。null的含义为“空”,表示没有指向任何对象。

例如: Emp emp=null;//引用emp中的值为null,没有指向任何对象;

            emp=new Emp();//引用emp指向了一个Emp对象;

当一个引用的值为null的时候,如果通过引用访问对象成员变量或者调用方法是不合逻辑的,此时会产生NullPointerException。

例如: JFrame frame=null;

            frame.setSize(200,300);

 

方法的重载

方法的签名

1)方法的签名包含如下两个方面:方法名和参数列表

2)一个类中,不可以有两个方法的签名完全相同,即一个类中不可以有两个方法的方法名和参数列表都完全相同

3)如果一个类的两个方法只是方法名相同而参数列表不同是可以的。

public class Cashier{

     public boolean pay(double money){......}
     public boolean pay(String cardId,String cardPwd){..........}
}

 

方法重载及其意义

在Java语言中,语序多个方法的名称相同,但参数列表不同,称之为方法的重载(overload).

如上所示。

编译时根据签名绑定调用方法

编译器在编译时会根据签名来绑定调用不同的方法,我们可以把重载的方法看成是完全不同的方法,只不过恰好方法名相同而已。

 构造方法

 构造方法语法结构

构造方法是在类中定义的方法,不同的于其他的方法,构造方法的定义有如下两点规则:

----------------构造方法 名称必须与类名相同

----------------构造方法没有返回值,但也不能写void

----------------构造方法是在创建对象时被自动调用的

student   s=new student(); //1.创建了一个对象,2.调用了无参的构造方法

语法: [访问修饰符]   类名(){

  //构造方法体

     }

通过构造方法用于实现对象成员变量的初始化。

创建对象时,构造方法写在new关键字后,可以理解为:“new”创建了对象,而构造方法对该对象进行了初始化。

this关键字的使用

1)this关键字用在方法体中,用于指向调用该方法的当前对象;简单来说:那个对象调用方法,this指的就是那个对象。严格来讲在方法中需要通过this关键字指明当前对象。

2)在构造方法中,用来初始化成员变量的参数一般和成员变量取相同的名字,这样会有利于代码的可读性,但此时就必须通过this关键字来区分成员变量和参数了(不能省略this)

l

public Cell(int row,int col){
       this.row=row;
       this.col=col;  
}

 this的用法:

this.成员变量----访问成员变量

this.方法()----访问方法

this()-------调构造方法

 

public class Cell{
  int row;
  int col;
  Cell(int row,int col){
    this.row=row;
    this.col=col;
    }
  Cell(){
     this(0,0);//调用两个int型参数的构造
  }
}

 

默认的构造方法

1)任何一个类都必须含有构造方法;

2)如果程序员中没有定义,编译器在编译时会为其添加一个无参的空构造方法(称之为“默认的构造方法”)

3)当定义了构造方法,Java编译器不再添加默认的构造方法。

构造方法的重载

1)为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),方法的参数不同,称之为构造方法的重载。

2)在创建对象时,Java编译器会根据不同的参数调用不同的构造方法。

3)一个构造方法可以通过this关键字调用另外一个重载的构造方法。

 

Overload(重载)和Override(重写)的区别。

overload是重载的意思,override是覆盖的意思,也就是重写。

overload和override有共同之处,两个发方法的方法名都必须相同,如果不同,既不构成overload也不构成override。

1)override必须发生在父子之间,overload可以不在父子之间

2)override的特点:

----参数列表完全相同:个数相同,类型相同,顺序相同

----子类的返回值不能比父类的返回值范围大

----子类方法抛出的异常不能比父类方法抛出的异常范围大

----修饰符只能为public,protected,friendly,不能为private

----父子类方法不能使用static修饰

3)重载发生在同一个类或父子类之间,重写中参数列表至少满足个数不同,类型不同,顺序不同中的一个条件,不包含父子类之间的static方法

 

posted on 2017-08-21 00:25  左夕  阅读(89)  评论(0)    收藏  举报

导航