Java万物皆对象,带你进入编程之旅!

Java初窥门径

  1. Java万物皆对象,带你进入编程之旅!
  2. Java运算符,操纵数据全靠它!
  3. Java控制流程,保持身材尤为重要!
  4. Java初始化和清理,控制安全是首要!
  5. Java封装是为了更好的重构!
  6. JavaOOP优雅总是会有回报!
  7. Java接口和抽象类如何选择!
  8. Java集合,日常开发掌握这些就够了!
  9. Java不要再问String为什么是不可变的!

万物皆对象

    • 前言
    • 对象操纵
    • 对象创建
      • 数据存储
      • 基本类型的存储
      • 数组的存储
    • 对象清理
    • 类的创建
    • 小试牛刀
  • 最后的最后

名字代表什么?玫瑰即使不叫玫瑰,也依旧芬芳 —莎士比亚

前言

相比 C++ ,Java 是一种更纯粹的面向对象编程语言。 Java 语言假设你只进行面向对象编程。开始学习之前,我们需要将思维置于面向对象的世界。

对象操纵

所有的编程语言都会操纵内存中的元素。有时程序员必须要有意识地直接或间接地操纵它们。在 C/C++ 中,对象的操纵是通过指针来完成的。Java 利用万物皆对象的思想和单一一致的语法方式来简化问题。虽万物皆可为对象,但我们所操纵的标识符实际上只是对对象的“引用” 。举例:我们可以用遥控器(引用)去操纵电视(对象)。只要拥有对象的“引用”,就可以操纵该“对象”。此外,没有电视,遥控器也可以单独存在。

下面来创建一个 String 引用,用于保存单词或语句。代码示例:

String s;

这里我们只是创建了一个 String 对象的引用,而非对象。直接拿来使用会出现错误:因为此时你并没有给变量 s 赋值–指向任何对象。通常更安全的做法是:创建一个引用的同时进行初始化。代码示例:

 String s = "关注公众号『码农洞见』";

对象创建

在 Java 中,我们使用new操作符来创建一个新对象。new 关键字代表:创建一个新的对象实例。所以,我们也可以这样来表示前面的代码示例:

    String s = new String(关注公众号『码农洞见』");

数据存储

那么,程序在运行时是如何存储创建的对象呢?尤其是内存是怎么分配的。有5个不同的地方可以存储数据:

  1. 寄存器(Registers)最快的存储区域,不同于C/C++ 允许开发者向编译器建议寄存器的分配,Java无法直接操作寄存器。
  2. 栈内存(Stack)存在于常规内存 RAM,整个生命周期,存储如对象引用。
  3. 堆内存(Heap)通用的内存池(也在 RAM 区域),所有 Java 对象都存在于其中。不需要知道对象必须在堆内存上停留多长时间。创建一个对象时,会自动在堆中进行内存分配。
  4. 常量存储(Constant storage)常量值通常直接放在程序代码中,因为它们永远不会改变 。
  5. 非 RAM 存储(Non-RAM storage)数据完全存在于程序之外,在程序未运行以及脱离程序控制后依然存在。

基本类型的存储

Java 使用了和 C/C++ 一样的策略不是使用 new 创建变量,而是使用一个“自动”变量。 这个变量直接存储"值",并置于栈内存中,因此更加高效。Java 确定了每种基本类型的内存占用大小。 这些大小不会像其他一些语言那样随着机器环境的变化而变化。这种不变性也是 Java 更具可移植性的一个原因。

数组的存储

Java 的设计主要目标之一是安全性,因此许多困扰 C 和 C++ 程序员的问题不会在 Java 中再现。在 Java 中,数组使用前需要被初始化,并且不能访问数组长度以外的数据。
Java万物皆对象,带你进入编程之旅!_第1张图片

对象清理

大多数程序语言都有作用域的概念。作用域决定了在该范围内定义的变量名的可见性和生存周期。在 C、 C++ 和 Java 中,作用域是由大括号 {} 的位置决定的。例如:

{
    int x = 12;
    // 仅 x 变量可用
    {
        int q = 96;
        // x 和 q 变量皆可用
    }
    // 仅 x 变量可用
    // 变量 q 不在作用域内
}

Java 变量只有在其作用域内才可用。缩进使得 Java 代码更易于阅读。由于 Java 是一种自由格式的语言,额外的空格、制表符和回车并不会影响程序的执行结果。在 Java 中,你不能执行以下操作,即使这在 C 和 C++ 中是合法的:

{
    int x = 12;
    {
        int x = 96; // Illegal
    }
}

在上例中, Java 编译器会在提示变量 x 已经被定义过了。因此,在 C/C++ 中将一个较大作用域的变量"隐藏"起来的做法,在 Java 中是不被允许的。 因为 Java 的设计者认为这样做会导致程序混乱。

Java 对象与基本类型具有不同的生命周期。当我们使用 new 关键字来创建 Java 对象时,它的生命周期将会超出作用域。因此,下面这段代码示例:

{
    String s = new String("码农洞见");
} 
// 作用域终点

上例中,引用 s 在作用域终点就结束了。但是,引用 s 指向的字符串对象依然还在占用内存。Java通过垃圾回机制释放内存摒弃了C++操作内存可能出现的诸多问题。

类的创建

大多数面向对象的语言都使用 class 关键字类来描述一种新的对象。 通常在 class 关键字的后面的紧跟类的的名称。如下代码示例:

class Hollywood {
   int i;
   String s;
}

当我们创建好一个类之后,我们可以往类里存放两种类型的元素:方法(method)和字段(field)。

字段:类的字段可以是基本类型,也可以是引用类型。如果类的字段是对某个对象的引用,那么必须要初始化该引用将其关联到一个实际的对象上。

方法:在许多语言(如 C 和 C++)中,使用术语 函数 (function) 用来命名子程序。在 Java 中,我们使用术语 方法(method)来表示“做某事的方式”。

 [返回类型] [方法名](/*参数列表*/){
     // 方法体
 }

返回类型:方法的返回类型表明了当你调用它时会返回的结果类型。参数列表则显示了可被传递到方法内部的参数类型及名称。方法名和参数列表统称为方法签名(signature of the method)。签名作为方法的唯一标识。

[对象引用].[方法名](参数1, 参数2, 参数3);

小试牛刀

最后,我们开始编写第一个完整的程序。

import java.util.*;

public class HelloFans {
    public static void main(String[] args) {
        System.out.println("粉丝好,感谢大家关注和支持码农洞见!");
    }
}

程序输出:

粉丝好,感谢大家关注和支持码农洞见!

本篇文章向你展示了简单的 Java 程序编写以及该语言相关的基本概念。通过阅读对Java语言及一些基本思想要有个总体认识。
Java万物皆对象,带你进入编程之旅!_第2张图片

最后的最后

为初学者提供学习指南,为从业者提供参考价值。我坚信码农也具有产生洞见的能力。扫描下图二维码关注,学习和交流!
Java万物皆对象,带你进入编程之旅!_第3张图片

你可能感兴趣的:(Java,java,编程语言)