• 【Java编程思想】2.一切都是对象


    2.1 用引用操作对象

    Java 中一切都被视为对象。但是操纵对象的标识符实际上是对象的一个引用(reference)。

    String s; // 创建一个 String 的引用
    

    如果此时向 s 发送一个消息,就会返回一个“运行时错误”。因为此时 s 没有与对象关联。
    安全的做法,是创建一个引用的同事就对其进行初始化


    2.2 必须由你创建所有对象

    创建一个引用,就是与一个新的对象进行关联(通常用关键字“new”实现)。

    对象的存储:

    1. 寄存器:处理器内部,不能直接控制。
    2. 堆栈:维语通用 RAM 中,通过“堆栈指针”从 CPU 获得直接支持。
      堆栈指针向上移动,释放内存;向下移动,分配内存。
      虽然某些 Java 数据存储于堆栈(特别是引用)但是对象不在其中。
    3. 堆:一种通用的内存池(位于 RAM 区),用于存放所有 Java 对象。
      与堆栈不同,编译器不需要知道存储的数据在堆中存活的时间。在 new 一个对象时,会自动在堆中进行分配。
      但用堆进行存储分配和清理“可能”比用堆栈更费时(实际上 Java 不能直接操作堆栈存储对象)。
    4. 常量存储:常量通常直接存储在程序代码内部。嵌入式系统中常量本身会和其他部分隔开。
    5. 非 RAM 存储:不受程序控制,在程序不运行时也可以存在。
    • 流对象:对象被转化为字节流,通常被发送给龙一台机器。
    • 持久化对象:对象被存放在磁盘上。

    Java 中基本类型特殊之处:
    在创建一个基本类型的变量时,并不使用 new,而是创建一个“并非是引用”的“自动”变量,这个变量直接存储值,并存在于堆栈中。
    因为这种特殊,Java 确定了基本类型所占存储空间的大小,且大小不会随机器硬件架构变化而变化-->这就为 Java 程序带来了优秀的可移植性。

    boolean,char,byte,short,int,long,float,double,void

    基本类型中所有数值类型都有正负号。

    基本类型具有包装器类,使得可以在“堆”中创建一个非基本类型对象-->装箱

    高精度数:BigInteger 和 BigDecimal,大体上属于“包装器类”的范畴,但是二者没有对应的基本类型。
    这两种类包含的方法,提供的操作与基本类型所能执行的操作类似。

    Java 中会确保数组呗初始化,且不会在他的范围之外被访问-->这样就以少量的内存开销以及运行时的下表检查为待见,确保了安全性以及效率。

    • 当创建一个数组对象时,实际是创建了一个引用数组,且每个引用都会自动初始化为一个特定值(基本类型为0/false,其他为 null)。
    • 一旦 Java 看到 null,就表示该引用还为指向某个对象。

    2.3 永远不要销毁对象

    作用域决定了在其内定义的变量名的可见性和生命周期。Java 的作用域就定义在{}之内。

    使用 new 创建了一个 Java 对象时,他可以存活于作用域之外。
    垃圾回收器(GC)会监视 new 创建的对象,辨别不会再被引用的对象,随后释放这些对象的内存空间。-->一定程度上解决了内存泄漏问题。


    2.4 创建新的数据类型:类

    类:class 实际上定义了对象的类型/外观/行为。包含更多可能性的一种新的数据类型。

    在定义了一个类之后,我们就可以使用 new 创建这种“类型”的“对象”。

    Java 中,所需要做的全部工作就是定义类,产生类的对象,发送消息给这些对象。

    类中可以设置:

    • 字段(数据成员)-->可以使任意对象-->如果是某对象的引用,则必须初始化(字段的赋值:objectRefernce.member)。
    • 方法(成员函数)
      类中的字段是基本数据类型时,即使未进行初始化,Java 也会确保其获取一个默认值(此种方法对程序来说是不合法的,所以尽量要主动对其进行初始化)

    2.5 方法,参数和返回值

    Java 中的方法由名称,参数,返回值,方法体构成。
    方法名称和某参数是唯一标识出方法的因素.
    调用方法也可以称为“发送消息给对象”。

    在 Java 中传递对象参数时,实际传递的也是对象的引用(基本类型是例外)。

    return 关键字代表的是:

    • 已经做完,离开此方法
    • 方法的结果值要放在 return 后
    • 对 void 的返回类型,return 只是用来退出方法

    除了 void,编译器会强制返回正确的返回值


    2.6 构建一个 Java 程序

    Java 中使用倒写域名的规范,避免同名混淆;保证文件自动存活在自己的命名空间(namespace)内,统一文件内每个类都有唯一的标识符。

    Java 中使用 import 关键字,来准确告诉编译器需要的类。import 可以只是编译器导入一个类/包/类库。
    使用通配符*来到如一个包下的全部类。

    static 关键字用来满足:

    1. 只想为特定域分配单一的存储空间,而不去考虑要创建多少对象。
    2. 希望某个方法不与包含它的类的任何对象关联在一起,即使没有创建任何对象,也能调用这个方法。
    3. 这也意味着,非 static 域或方法必须与某一个特定对象关联。
    Class StaticTest {
        static int i = 47; // 即使创建 n 个 StaticTest 对象,StaticTest.i 也只有一份存储空间
    }
    

    静态参数可以直接引用,同理,静态方法也可以直接进行引用。

    综上:

    1. static 字段对每个类都只有一份存储空间。
    2. 非 static 字段对每个类都有不同的存储空间。
    3. static 会改变数据的创建方式。

    java.lang 默认导入到每个 Java 文件中(其下的所有类可以被直接使用)。

    main() 方法的参数是 String 对象的数组,其中 args 要用来存储命令行参数。


    javadoc 是 JDK 自带的提取注释的工具。

    • 独立文档标签@,且要置于注释行的最前面
    • 行内文档标签{},可以出现在注释中的任何地方

    javadoc 只能为 public/protected 成员进行文档注释

  • 相关阅读:
    POJ3687拓扑排序+贪心
    POJ3687拓扑排序+贪心
    POJ3614奶牛晒阳光DINIC或者贪心
    POJ3614奶牛晒阳光DINIC或者贪心
    POJ3070矩阵快速幂简单题
    POJ3070矩阵快速幂简单题
    POJ3040给奶牛发工资
    POJ3040给奶牛发工资
    #Leetcode# 78. Subsets
    #Leetcode# 89. Gray Code
  • 原文地址:https://www.cnblogs.com/chentnt/p/9791714.html
Copyright © 2020-2023  润新知