不过这里用到了Java的一个特有的特性:字符串可以用以引号括起来的 文字进行初始化。通常情况下,你必须用一种更为通用的方法对对象进行 初始化 你必须创建所有的对象 创建完 reference之后,你就得往上面连新的对象了。大体上,你得用 new关键词来作这件事。关键词new的意思是,“给我创建一个新的 那种类型的对象。”所以在上述例程中,你可以用: String s new String("asdf " 它不仅表示“给我创建一个新的 String”,而且还用字符串参数告诉它 “如何”制作这个 String。 当然, String并不是唯一的类。Java还带了很多现成的类。更重要的是 你还可以创建你自己的类。实际上,Java编程基本上就是在创建类,而 这正是本书要教给你的 数据存在哪里 对程序运行时各部分是如何展开的—特别是内存是如何分配的,作一个 直观的描述还是很有必要的。数据可以存储在以下六个地方: 1.寄存器( registers)。这是反映最快的存储,因为它所处位置不同:在处理 器里。不过寄存器的数量非常有限,所以它是由编译器分配的。你非但 不能直接控制寄存器,甚至连它存在的证据也找不到 栈( stack)。位于“常规内存区( general random- access memory area)”里, 处理器可以通过栈指针( stack pointer)对它进行直接访问。栈指针向下移 就创建了新的存储空间,向上移就释放内存空间。这是仅次于寄存器的 最快、最有效率的分配内存的方法。由于Jaa编译器必须生成能控制栈 指针上移和下移的代码,所以程序编译的时候,那些将被存储在栈中的 数据的大小和生命周期必须是已知的。这使得程序的灵活性收到了限 制,所以尽管Java把某些数据——特别是对象的 reference存放在栈里, 但对象本身并没有放在栈里。 3.堆(heap)。这是一段“多用途的内存池”( general- purpose pool of memory,也在内存里面),所有Java对象都保存在这里。同栈不同,堆 的优点是,分配空间的时候,编译器无需知道该分配多少空间,或者这 些数据会在堆里呆多长时间。因此使用堆的空间会比较灵活。只要你想 创建对象,用new就行了,程序执行的时候自会在堆里分配空间。当然 第3页共26页shhgs@wgqqh.com 3 ✁ ✂ 26 ✁ X^ Ëg, Java (3×1m(1#cÝEE/9Q(
%&f^·¡'(3(µ¥¥%& f^ ~ reference u¡J¶k(¥,ÂJ¡ new ³Q1 ³ new (¹Í¬~3×( Y(¥ÏDEFJâ*¡ÝE String s = new String("asdf"); AXWXͬ~3×( StringÏàcO#A ÍÄÏ1 × String String X3(Java d,Ví(%( ¡ÝE~¡ý þ(ñ`JJava áâG JF~à T %¬¡( ¥âF&Ä(1{Ä(13× Ò (¡m'%(OPÝE{¢FE£×rµ 1. (registers) ¤¥b¦({¢æADB§¨XFB¢ fËX^©{f(Oª¯·m«DEA,áf(¡¯ X;ÒUN©{fJKkA{F(¬P[Xg 2. (stack)§)Í·®{¯ (general random-access memory area)ÏË B¢fÝE^°Z[(stack pointer)¥A%&ÒU±²°Z[³ ~,({¢´4J³µk{´4 ¨)©{f( b¦¶ bmØ·({(µ,) Java áf'(0;N° Z[J³³(¸DEâFá(MY̹{¢F°*( OP(º0»¼@'(ô½( çâF(¾¿#Àg,« DEÁ Java P2ÌOP1¥( reference {kF°Ë ¥ pmkF°Ë 3. (heap) 3ÃÍVÄ({ÅÏ(general-purpose pool of memory[F{˶)Dm Java ¥Æ|{F Ë°XÆ (ÇC´4(MáfÜî½twVÈ´4Y ÌOPºFÆËÉVÊ4æòçÆ(´4º8C¾¿ó%¡| ~¥ new &,âFË&(MýºFÆË´4