java 对象导论

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虚拟机自动的完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352