Java初窥门径
名字代表什么?玫瑰即使不叫玫瑰,也依旧芬芳 —莎士比亚
相比 C++ ,Java 是一种更纯粹的面向对象编程语言。 Java 语言假设你只进行面向对象编程。开始学习之前,我们需要将思维置于面向对象的世界。
所有的编程语言都会操纵内存中的元素。有时程序员必须要有意识地直接或间接地操纵它们。在 C/C++ 中,对象的操纵是通过指针来完成的。Java 利用万物皆对象的思想和单一一致的语法方式来简化问题。虽万物皆可为对象,但我们所操纵的标识符实际上只是对对象的“引用” 。举例:我们可以用遥控器(引用)去操纵电视(对象)。只要拥有对象的“引用”,就可以操纵该“对象”。此外,没有电视,遥控器也可以单独存在。
下面来创建一个 String 引用,用于保存单词或语句。代码示例:
String s;
这里我们只是创建了一个 String 对象的引用,而非对象。直接拿来使用会出现错误:因为此时你并没有给变量 s 赋值–指向任何对象。通常更安全的做法是:创建一个引用的同时进行初始化。代码示例:
String s = "关注公众号『码农洞见』";
在 Java 中,我们使用new操作符来创建一个新对象。new 关键字代表:创建一个新的对象实例。所以,我们也可以这样来表示前面的代码示例:
String s = new String(关注公众号『码农洞见』");
那么,程序在运行时是如何存储创建的对象呢?尤其是内存是怎么分配的。有5个不同的地方可以存储数据:
Java 使用了和 C/C++ 一样的策略不是使用 new 创建变量,而是使用一个“自动”变量。 这个变量直接存储"值",并置于栈内存中,因此更加高效。Java 确定了每种基本类型的内存占用大小。 这些大小不会像其他一些语言那样随着机器环境的变化而变化。这种不变性也是 Java 更具可移植性的一个原因。
Java 的设计主要目标之一是安全性,因此许多困扰 C 和 C++ 程序员的问题不会在 Java 中再现。在 Java 中,数组使用前需要被初始化,并且不能访问数组长度以外的数据。
大多数程序语言都有作用域的概念。作用域决定了在该范围内定义的变量名的可见性和生存周期。在 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语言及一些基本思想要有个总体认识。