类&对象

类是一种数据类型,该数据类型的值是对象(object);

所有相同类型的对象抽象出一个高层的概念:类;

抽象是指同类事物共有的属性和方法;

类与对象:共性与个性

Considering a bicycle.By attributin state(current speed,current pedal cadence,and current gear)and providing methods for changing that state,the object remains in control of how the outside world is allowed to use it.For example,if the bicycle only has 6 gears,a method to change gears could reject any value that is less than 1 or greater than 6.

Different kinds of objects often have a ceratain amount in common with each other.

You may use a simple name for a field within its own class.Code that is reference of expression followed by the dot(.) operator,followed by a simple filed name.

How do you know whether to make a class,a subclass,an abstract classes,or an interface?

1 Make a class that doesn't extend anything(other than object)when your new class doesn't pass the IS-A test for any other type.

2 Make a subclasses(in other words,extends a class)only when you need to make a more specific version of a class and need to override or add new behaviors.

3 Use an abstract class when you want to define a template for a group of subclasses and you have at least some inplementation code that all subclasses could use.Make the class abstract when you want to grarantee that nobody can make objects of that type.

4 use an interface when you want to define a role that other classes are in the inheritance tree.

为了节省内存,通常将常量声明为静态的;

面向对象的思维

1 需要哪些类,哪些对象;

2 每个类应该定义哪些属性和方法;

3 类之间的关系:关联、继承、聚合、实现、多态;

引用:一小块内存指向一大块内存;

面向对象编程:程序由一组协同工作的对象组成,抽象类是类的模板,类是对象的模板;

在面向对象的语言中,利用继承,可以先创建一个共有属性的一般类,根据一般类再创建具有特殊属性的新类;

抽象层次:

接口→抽象类→父类→子类→对象;

类是由许多保存数据值的字段以及在这些字段上进行操作的method所组成的命令集合。类是Java支持的五种引用类型之一,每一个类都定义了一种新的数据类型,该数据类型的值称为对象,类可自定义,也可以引入数千个预定义的某个类供使用。

人们将对象的静态特征为属性,用数据来描述,在Java中,称为变量,人们将对象的动态特征抽象为行为,用一组代码来表示,完成对数据的操作,在Java中称为方法,一个对象由一组属性和一组对属性进行操作的方法构成;

类被认为是一种抽象数据类型

类的多态:方法重载、成员覆盖;

Java中使用引用来取代C++中的指针;

类是由许多保存数据值的字段以及在这些数据值上进行操作的method所组成的命名集合。

Class methods cannot access instance variables or instance method directly.

The static modifier,in combination with the final modifier,is also used to define constants.

The final modifier indicates that the value of this field cannot change.

类的成员可以有public,protected,private这样的访问修饰符,这些修饰符说明了该类以及其子灰的透明度与可访问程序。

static

static,有一些成员是所有对象所共有的,如果把这样的成员保存在每一个对象上,当创建一个类的多个对象时,在堆栈中就会出现很多相同的内容,显然很浪费资源。另外,如果要修改这些资源,必须对每一个对象都修改,这样做效果会很多。类变量比实例变量在内存中早存在,晚释放;

static方法,当程序的字节码文件加载到内存时,同时为类方法分配了入口地址,当程序结束运行时,类方法的入口地址才被取消。类方法只能调用该类的类方法及类变量操作,这是因为在类创建对象之前,实例方法没有被分配入口地址,实例变量也没有分配内存单元,this不可以出现在类方法中;

Sometimes,you want to have variables that are common to all objects.This is accomplished with the static modifier.Fileds that have the static modifier in their delclaration are called static fields or class variables.They are associated with the class,rather than any object.Every instance of the class shares a class variable,which is in one fixed location in memory.

方法参数的数据类型可区分成基本数据类型与参照类型两种,如果参数是基本数据类型,那么所传递过来的就必须是单一值,所以称为传值(pass by value),如果参数是参照类型,那么所传递过来的就必须是内存地址,所以称为传址(pass by reference)。

在java语言中,代码重用主要表现为可以使用现成类库中的类来定义新类,定义新类主要有两种方法:组合和继承;

类似于基本数据类型变量的转换,一个类的对象在一定条件下也可以转换成继承链中的另一个类的对象,子类的对象也是父类的对象;

类方法只能对类变更进行操作(不能操作实例变量;一个类中的方法可以互相调用,但类方法只能调用该类的类方法,不能调用实例方法);

任何一个关键字都是很关键的,都有特定的用途或含义;

fianl类的成员方法是final的;

封装encapsulation,有时称为数据隐藏,从形式上看,封装不过是将数据与行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。实现封装有关键在于绝对不能让类中的方法直接地访问其他类的字段。程序仅通过对象的方法与对象数据进行交互。封装给予了对象“墨盒”特征,这是提高重用性和可靠性的关键。这意味着一个类可以全面地改变存储数据的方式,只要仍旧使用同样的方法操作数据,其他对象就不会知道或介意所发生的变化。

封装就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。类中的数据和方法都可以定义为public和private,public部分数据是类和外界通信的接口,而private部分的数据和方法是不能被类以外的其他程序访问的。

类的每个对象保存着描述当前特征的信息。这就是对象的状态。对象的状态可以通过调用方法实现。

类的层次可以从最基本的类开始,创建一系列的子类来逐步特殊化。同时通过继承实现代码重用,减少程序的复杂性。

Java语言中每个类均有三个量:

null,表示变量的值为"空",用于表示对象或数组还没有(或取消)相应的实例引用;

this,表示对类的实例访问,也表示了对象对该实例引用访问;this表示了对象对自身的访问;

1 在类中可以来指向成员变量,以示区别于非成员变量;(非成员变量(局部变量)与成员变量同名时)

2 在类的构造器中,可以使用this()形式对另一个构造器的调用;

3 在类的创建中,需要表示对自身的实例访问时,要用this表示;

super

子类对超类的同名成员变量和方法,分别实行隐藏和覆盖。但是,有时需要在子类中访问这些被隐藏和覆盖的部分,Java提供的super就可以实现这种访问。

1 访问被隐藏的超类成员变量:super.varName;

2 访问超类中被覆盖的方法:super.methodName;

3 调用超类的构造方法;super([paramList]);

对象

对象作为方法参数

对象作为返回类型

对象是可变的

box.x=box.x+50;

An object is eligible for garbage collection when there are no more references to that object,you can explicitly drop an object reference by setting the variable to the special value null.

垃圾对象:无法被访问到的,失去引用的对象;程序中不再使用的对象引用。

对象实例是对象变量来存取的,一旦没有任何对象变量引用到该对象,则该对象实例就无法被重复利用,而变成所谓的垃圾。

对象可以通过外部接口同外部联系;

Once you've created an object,you may need to use the values of one of its fields,or invoke one of its methods to perform an action.

当想使用类中的属性和方法时,必须先让其产生一个实例;当用类创建一个对象时,类中的成员变量被分配内存,这些内存单元称为该对象的实体,而对象中存放着指向该实体的引用(即指针地址),这样保证了该对象可以操作该实体。

对象的赋值与克隆

Programmer p1=new Programmer();

Programmer p2=p1;//对象赋值,p2、p1指向了同一个对象的引用;

Programmer p2=p1.clone();//对象克隆;

对象对成员(变量和方法)的访问,使用"."运算符

1 对变量的访问

objectReference.variable

objectReference是对象名或为类的一个实例;

可以用new创建实例后直接访问:new Point().x=100;

2 调用对象方法

ObjectReference.methodName([ParameterList]);

可以用new创建实例后直接调用:new Point().move(20,30);

对象序列化Object Serialization是Java一种有趣的特性。它面向那些实现了Serializable接口的对象,可将它们转换成一系列的字节,并可在以后完全恢复回原来的样子。这一过程亦可通过网络进行。这意味着序列化机制能自动补偿操作系统间的差异。换句话说,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,铕在那里准确无误地重新“装配”。不必关心数据在不同机器上如何表示,也不必关心字节的顺序或者其他任何细节。

对象 存储信息的方式(Java)

如果让你以表格的方式记录书籍信息,则以对象的方式来记录信息只不过是把表格放在内存中

梵谷书店的书籍(类别)
列名(属性) 书名 定价 作者
一本书(对象) 《世界是平的》 350 Friedman
一本书(对象) 《钢铁是怎样练成的》 190 尼.奥斯特洛夫其


class Book{ 类别(标题)-书
  String name; 属性(列名)-书名
  Double price; 属性-定价
  String author 属性-作者
}
Book book1=new Book();
book1 name="《世界是平的》";
book1.price=350;
book1.author="friedman";

将属性值存入内存
book1 《世界是平的》    350 Friedman