1.程序的抽象过程
任何对编程语言都会提供一种抽象的机制。不同的语言的抽象的层次不一样,比如汇编语言就是对底层机器语言的轻微的抽象,C语言就是对汇编语言的抽象(FORTRAN,BASIC等命令式语言)。这些面向过程的语言虽然在汇编语言的基础上进行了良好的抽象,但是仍然依靠于具体的计算机的结构实现。
而另外一种方式是只针对待解决的问题建模。将问题空间中的元素及其在解空间中的表示称为“对象”。这种思想的实质是:程序可以通过添加新类型的对象使得自身适用于某个特定的问题。因此面向对象编程(Object-oriented Programming,OOP)允许我们根据问题来描述问题,脱离了具体的解决方案的计算过程。每一个对象都想一个微型的计算机,具有状态,操作,用户可以要求对象执行这些操作。
2.一切都是对象
虽然java语言是基于C++的,但是相比C++,java是一种更加纯粹的面向对象的程序设计语言。
Java作为一种面向对象语言。支持以下基本概念:
类
对象
多态
继承
封装
抽象
实例
方法
消息解析
在此研究对象和类的概念:
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类:类是一个模板,它描述一类对象的行为和状态。
java中的对象:
让我们深入了解什么是对象。在我们周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。比如一条狗,它的具有的状态有:名字、品种、颜色,具有的行为有:叫、摇尾巴和跑等。
对比现实对象和java编程中的对象,它们之间十分相似。编程对象也有状态和行为。编程对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
java中的类:
java中的类可以看成是创建Java对象的模板。
通过下面一个简单的类来理解下Java中类的定义:
语法如下:
class 类名称{
属性(变量);
行为(方法);
}
具体的一个范例:
class Person {
String name ;
int age ;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
一个类中可以包含以下类型变量:
局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类中可以包含多个方法 :
在上面的例子中:tell()是类Person的方法。
构造方法:
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Person{
}
这个构造方法不进行任何操作,java编译器提供的默认构造方法就是这样。
public Person(String name){
this.name = name;//这个构造器将参数赋值给对象的name局部变量
}
创建对象:
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字new来创建一个对象。
初始化:使用new创建对象时,会调用构造方法初始化对象。
下面是一个创建对象的例子:
public class Person {
String name ;
int age ;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}
public static void main(String []args){
//下面的语句将创建一个Person对象
Person person = new Person("张三" );//调用自己编写的构造器
person.tell;
}
}
编译并运行上面的程序,会打印出下面的结果:
姓名:张三,年龄:0
年龄因为未初始化,所以java默认赋值为0;
3.java中对象操作声明:
1.用应用操作对象
每一种编程语言都有自己的操作内存中元素的方式。java中内存中一切元素都被视为对象,因此采用单一的语法来操作内存中的对象。虽然我们是对对象进行操作,但是实际操作的标识符是对内存中对象的一个“reference”(引用,这个像C语言中的指针操作)。引用与对象的关系就像电视机与遥控器的关系,电视机是一个对象,但是我们不是直接在电视前面去操纵电视机(虽然这样也可以,但是不符合实际),而是使用遥控器来操纵电视机,只要我们拥有了电视机对应的遥控器(也就是对象的引用),我们就能够控制对象,保持与对象的连接。
2.必须由我们来创建每一个对象
一旦我们创建了一个引用,我们就需要一个新的对象与这个引用配对。通常我们使用一条像
Person person=new Person()
的语句来创建一个对象,将新创建的对象与引用person相关联。(当然java中的基本数据类型是一个特例,这些基本数据类型都有其对应的包装类来对于java的对象机制,暂且不表)
以下是java中的基本数据类型:
3.永远不需要销毁对象
虽然我们知道在程序中都有作用域,但是java中,虽然我们知道一个引用在作用域终点之后就消失了,我们再也不能通过这个引用去访问这个对象,但是这个引用还是存在。如果你需要,这个对象可以一直存在直到程序结束。但是java程序运行的过程中并不会因为不停的创建新的对象而导致内存溢出。
这一次都是java语言的垃圾回收机制的功劳。java有一个垃圾回收器,用来监视程序使用new关键词创造的所有的对象,并区分那些不会被引用的对象进行回收,释放这些内存空间,以便供其他的对象使用。
所以在java中我们不需要像C语言那样申请空间之后还需要显式的释放空间,这一切都被java虚拟机自动的完成。