0013 Java基础之一切都是对象

来源:互联网 发布:java培训班有证吗 编辑:程序博客网 时间:2024/06/03 03:39

Java 和 C++ 都是混合/杂合型语言,但是 Java是一种更加“纯粹”的面向对象程序设计语言。C++ 就是 C 的一个超集,在使用上包括许多C 语言的某些特性,使得C++ 在某些方面显得过于复杂。

Java 只进行面向对象的程序设计,面向对象的思想是基本功,可以使你具备一种编程能力, Java 的单根继承结构使得Java 在学习和使用起来都比较简单和方便。下面我们来具体谈谈对象的性质:

一:用引用操纵对象

每种编程语言都有自己的操纵内存中元素的方式,有时候根据数据的类型你是直接操纵元素,还是选择间接(C 中用指针实现)来操纵对象实现。在Java 中一切得到了简化,一切都被视为对象,可采用单一固定的语法。而操纵标识符实际上是对象上的一个“引用”。拥有一个引用,并不一定需要有一个对象与之关联,如果想操纵一个词或句子,则可以创建一个 String 引用:

      String s;

但是这里创建的只是引用,并不是一个对象,此时向 s 发送一个消息,就会返回一个运行时错误,因此一种安全的做法就是创建一个引用的同时进行初始化。

      String s="hello world !";

二:由你创建所有的对象

我们一旦创建了一个引用,就希望它能够与一个新的对象相关联。通常用 new 操作符来达到这一目的,new 关键字的意思就是创建一个新对象:

      String s = new String("hello world !");

除了 String 类型,Java 提供了大量过剩的现成类型,new 出来的对象在内存中是怎么分配的呢?下面我们了解一下 Java 内存中的存储机制:

1:寄存器,这是最快的存储区,因为她位于处理器的内部,但是寄存器的数量有限,只能按需分配,我们不能直接控制。

2:栈空间,位于通用 RAM 中,通过堆栈指针可以从处理器那里获得直接的支持,通过指针的移动来分配和释放内存,这是一种快速分配存储的方法,仅次于寄存器。

3:堆空间,一种通用的内存池,用于存放所有的 Java 对象。

4:常量存储,常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。

5:非 RAM 存储,如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时就可以存在,最常见的就是流对象和持久化对象。

三:永远不需要销毁对象

变量都有生命周期这样一个概念,生命周期往往出了自己的作用域范围就消失了。Java 对象不具备和基本类型一样的生命周期,当用 new 创建一个 Java 对象时,它可以存活于作用域之外:

      String s = new String("a new string");

引用 s 在作用域终点就消失了,然而 s 指向的对象仍然继续占据着内存空间。在 Java 中,有个垃圾回收机制,永远不会产生内存泄露的问题,由 new 创建的对象只要你还需要使用就会一直保留下去,否则垃圾回收机制会自动帮你回收。垃圾回收机制就像是一个监视器用来监视所有 new 出来的对象,一旦不再需要,就让它们自行消失,释放内存空间。

四:类

如果一切都是对象,那么 Java 用什么来包装这些对象的外观与行为呢?这边引入的是一个类,关键字 class:

      Class aTypeName{/*…*/}

这样就引入了一种新的类型,我们可以用 new 来创建这种类型的对象:

      aTypeName a = new aTypeName();

我们一旦定义了一个类,就可以在类中设置两种元素:字段和方法。字段可以是任何类型的对象,可以通过其引用与其进行通信,也可以是基本数据类型的一种,如果字段是对某个对象的引用,那么必须初始化改引用,以便使其与一个实际的对象相关联:

class DateOnly{

int i;

double d;

boolean b;

}

而方法可以理解为“做某种事情的一种执行方式”,我们可以定义任意类型的方法(参数,返回值等等):

class DateOnly{

int i;

double d;

boolean b;

DateOnly(int i,double d,boolean b){

this.i = i;

this.d = d;

this.b = b;

}

}


0 0
原创粉丝点击