zoukankan      html  css  js  c++  java
  • 第二章 万事万皆对象(Java语言基础)

    一、对象引用(Reference)

    二、新建对象

    1. 既存型别
    2. 自定义型别

    三、存储

    1. 寄存器:速度最快,位于处理器内部。但寄存器个数有限,由编译器根据本身的需求适当的分配使用,(对一个程序员来说)基本是一个感觉不到的存在。
    2. Stack(栈):位于一般的RAM(random-access memory,随机访问内存)中。处理器经由其指针提供直接的支持,分配新内存时指针后后移,释放内存时,指针前移。效率仅次于寄存器。Java编译器负责产生"控制指针移动"的程序代码,所以它必须能够完全掌握它所编译的程序中"存在stack里所有数据的实际大小和存活时间"。如此便限制了程序的弹性,也因此,我们只能将对象的reference存储于stack内,但却不能将一般的Java对象也置于其上。
    3. Heap(堆):Heap是一种通用性质的内存存储空间(存在RAM中),用来放置所有的Java对象,使用关键词new,便会自Heap分配空间。Heap分配的空间具有高度的弹性。但是从Heap分配空间比从stack分配所花费的时间多了不少。
    4. 静态存储空间(Static storage):存在于RAM里,该空间存放着"程序执行期间"一直存在的数据。使用关键词static,可以将某个对象内的特定成员设为静态,但Java对象本身绝无肯能置于静态存储空间中。
    5. 常量存储空间(Constant storage):常量值常会被直接置于程序代码里,也可以放到唯读内存(read-only memory,ROM)中。
    6. Non-RAM存储空间:若数据完全存活于程序之外,那么即使程序不执行,数据也能够继续存在,脱离程序的控制。streamed objects(串流化对象)和persistent objects(持久化对象)便是主要的两个例子。它们能够将对象转换为可存储与其他媒介的形式,并在必要时将所存储的数据还原成可存储与RAM中的一般对象。

    四、基本型别(基本数据类型)

    1. 不使用new分配空间,产生一种变量(automatic),不是reference形式,此类变量直接存放数据值,并置于stack
    2. 每种基本型别都有其对应的外覆型别(包装类),用来操作由基本型别产生的对象,或用在Heap内产生代表该基本型别的非原始对象

    五、高精度数值

    1. java.math.BigInteger:支持任意精度的整数
    2. java.math.BigDecimal:提供任意精度的定点数

    六、Java中的数组

    1. Java语言的数组其实就是一块内存而已。Java保证数组一定会被初始化,而且程序员对数组的访问无法逾越范围(代价:每个数组得额外多出一点空间,并且得在执行时期对数组索引值进行检查)
    2. 当你产生某个存储对象的数组时,真实产生的其实是个存储references的数组。此数组建立后,其中每一个references皆会被自动设为某个特殊值。该值以关键字null表示。当Java看到null值时,便将这个referebnces视为"不指向任何对象"。使用任何reference之前,必须将某个对象指派给它,若某个reference的值为null,便会在执行期发生错误。数组也可以存储基本型别,编译器一样保证初始化动作的必然进行:这次它会将数组所占的内存全部清为零。

    七、作用域(scope)

    八、对象的生存周期

    1. 使用new来产生一个Java对象,即便离开了作用域(生存空间),该对象依然存在。
    {
      String s=new String(" a string");
    }/*end of scope*/

      2. s这个reference将在作用域之外消失,但是,s先前所指的那个String对象,仍然会继续占用内存。

      3. 不过Java有所谓的"垃圾回收器(garbage collector)"机制,它会逐一检视所有通过new所产生的对象,并在这些对象不再被引用时,"垃圾回收器"便释放这些对象的内存。因此你

        不必关心内存回收问题,只要关心对象的产生就好。所有对象,在你不需要的时候就会自动消失。

    九、建立新的数据型别(class)

    1. 使用class关键字定义类
    2. 使用new关键字产生此类对象

    十、数据成员(fields)和函数(methods)

    1. 数据成员可以是任何类型的对象,只要你通过reference来和它沟通就行。数据成员也可以是基本型别(不具备reference者)
    2. 每一个对象都持有用来存储数据成的空间;不同的对象彼此之间并不共享数据成员
    3. 基本成员(boolean,int...等基本型别)的缺省值

    十一、方法,参数,返回值

    十二、static关键字

    1. 无论产生了多少个对象,或不存在任何对象的情形下,那些特定数据的存储空间都只有一份(例:Java中的mian方法)
    2. 某个函数不要和class object绑在一起
    3. 可以通过对象来调用静态变量/方法
    4. 可以通过类名来调用静态变量/方法
    class StaticTest{
      static int i=0;  
     public static void main(Stringp[] args){
        StaticTest st_1=new StaticTest();
        StaticTest st_2=new StaticTest(); System.out.println(st_1.i==st_2.i);  //true
        System.out.println(st_1.i==StaticTest.i);    //true
      } }

    十三、编译与执行

    十四、注解及内嵌式文档

    十五、javadoc

    1. Netbeans可以自动构建和官方文档相似的javadoc

    十六、编码风格

    All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
  • 相关阅读:
    迭代器和生成器
    案例:复制大文件
    案例:使用seek倒查获取日志文件的最后一行
    Leetcode165. Compare Version Numbers比较版本号
    Leetcode137. Single Number II只出现一次的数字2
    Leetcode129. Sum Root to Leaf Numbers求根到叶子节点数字之和
    Leetcode116. Populating Next Right Pointers in Each Node填充同一层的兄弟节点
    Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表
    Leetcode113. Path Sum II路径总和2
    C++stl中vector的几种常用构造方法
  • 原文地址:https://www.cnblogs.com/realsoul/p/5640308.html
Copyright © 2011-2022 走看看