Java笔记

五、面向对象编程

对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面对对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。

面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据。

三大特征:封装、继承、多态

六、类与对象

类、对象、方法的概念

类是对某一类事物的描述,是抽象的、概念上的定义;而对象是实际存在的属该类事物的具体个体,因而也称为实例。

对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。

类:类是一个模板,它描述一类对象的行为和状态。

方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。  方法就是c中的函数,使程序模块化


一个类可以包含以下类型变量:

局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

成员变量(实例变量):成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。

类变量(静态变量,实际就是全局变量):类变量也声明在类中,方法体之外,但必须声明为 static 类型。

空类没有任何意义,所以我们需要定义类的具体信息。对于一个类来说,一般有三种常见的成员:属性field、方法method、构造器constructor。这三种成员都可以定义零个或多个。


定义类

类是将数据和方法封装在一起的一种数据结构,定义类就是定义类的属性与方法。

类的一般结构:


类修饰符的含义:

public    将一个类声明为公共类,它可以被任何对象访问

abstract  将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例

final        将一个类声明为最终类,即非继承类,表示它不能被其他类所继承

缺省        缺省修饰符时,则表示只有在相同包中的对象才能使用这样的类

一个类可以有多个修饰符,且无先后顺序之分,但abstract和final相互对立,所以不能同时应用在一个类的定义中


成员变量(field  属性)和局部变量的区别

成员变量:

①成员变量定义在类中,在整个类中都可以被访问。

②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

③成员变量有默认初始化值。


局部变量:

①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

②局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

③局部变量没有默认初始化值

在使用变量时需要遵循的原则为:就近原则

首先在局部范围找,有就使用;接着在成员位置找



一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep() 和 name() 都是 Dog 类的方法。


成员方法///见第七章

构造器/构造方法  //可见第八章

构造器是一个特殊的方法,是在对象被创建时初始化对象的成员的方法。

类名(){ }    //默认构造方法

默认的敲不敲都可以,不敲的话编译器会自己加


main方法形式上属于一个类,实际上是独立的

构造器的4个要点

构造器通过 new关键字调用! !

构造器虽然有返回值, 但是不能定义返回值类型(不能有void、int等修饰)(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。

如果我们没有定义构造器, 则编译器会自动定义一个无参的构造函数。如果已定义,则编译器不会自动添加!

造器的方法名必须和类名一致。

构造器重载

方法与方法之间有重载,构造方法的重载:可以让用户用不同的参数来构造对象。

雷区:如果方法构造中形参与属性名相同时,需要使用this关键字区分属性与形参。this.id表示属性id  ;id表示形参id


对象的创建和使用

创建对象

创建对象需要以下三步:

声明:声明一个对象,包括对象名称和对象类型

实例化:使用关键字new来创建一个对象

初始化:使用new创建对象时,会调用构造方法初始化对象

public class Puppy{

  public Puppy(String name){

      //这个构造器仅有一个参数:name

      System.out.println("小狗的名字是 : " + name );

  }

  public static void main(String[] args){

      // 下面的语句将创建一个Puppy对象

      Puppy myPuppy = new Puppy( "tommy" );

  }

}

对象的使用

对象名.对象成员    用点...相连,通过这种引用可以访问对象的成员,如果对象成员是成员变量,则通过这种引用方式可以获取或修改类中成员变量的值。

访问实例变量和方法:

通过已创建的对象来访问成员变量和成员方法:

/* 实例化对象 */

Object referenceVariable = new Constructor();

/* 访问类中的变量 */

referenceVariable.variableName;

/* 访问类中的方法 */

referenceVariable.methodName();

但是如果是在类声明的内部使用这些成员(成员变量、成员方法)则可以直接使用成员名称,而不需要新创建的对象的名称。  在类声明外面必须新创建对象,指明是哪个对象变量。

在类内调用方法

在同一类中调用某一方法,可直接调用不需加对象名。

如果要强调的是“对象本身的成员”则可以在成员名前加  this  关键字,:“this.成员名”  this即代表调用此成员的对象。

参数的传递

方法既可以有返回值,也可以有参数

当方法不需要传递任何参数时,方法的括号内什么也不用写,当不需要返回值时,可以不写return。

以变量为参数调用方法

括号内的参数可以是数值型、字符型,甚至是对象(如:数组)。

void  setCylinder(double r,int h,double p){  ... }        //形参

void setCylinder(2.5, 5.3, 3.14)                      //实参

以数组作为参数或返回值的方法调用

只要指明传入的参数是一个数组即可

实参只用给出数组名  ,而形参需要给出数组的类型一维数组还是二维数组,整型数组还是浮点型数组

放回值也只写出数组名即可  return  array;

若方法的返回值是数组,需方法前加数组类型 如:int[  ]  方法名(int[  ]  array)

匿名对象

使用匿名对象的两种情况:

(1)一个对象只使用一次方法调用。

(2)将匿名对象作为实参传递给一个方法调用  如:

public  static  void  getSomeOne(MyClass  c){  ...    }

可以用这个语句调用这个方法:  getSomeOne(new  MyClass( ) );

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,516评论 0 3
  • 2. 创建和销毁对象 2.1 考虑用静态方法代替构造器 what why 静态方法相比构造器优点: 有名称 不必每...
    冬猫咚咚锵阅读 233评论 0 0
  • java笔记 Main.java文件中的入口类(即包含main方法)的访问权限不一定非要设定为public,不加p...
    御风逍遥阅读 620评论 1 1
  • Java 与其他语言的不同之处,是它在设计的时候就把目标专注于克服开发与维护程序的复杂性。然而很多EE特性和乱七八...
    Perebor阅读 311评论 0 1
  • JAVA 来源: sun公司,oracle收购 版本情况: 1.0 ....1.5(5.0)....8.0(1.8...
    AAnna珠阅读 562评论 0 1