Java 中的所有代码都必须写在类里。 Java 的标识符实际上只是对对象的“引用”。

对象创建

new 关键字创建一个新的对象实例。

数据存储

  1. 寄存器(Registers)最快的存储区域,位于 CPU 内部。
  2. 栈内存(Stack)存在于常规内存 RAM。
  3. 堆内存(Heap)这是一种通用的内存池(也在 RAM 区域),所有 Java 对象都存 在于其中。
  4. 常量存储(Constant storage)常量值通常直接放在程序代码中,因为它们永远不 会改变。
  5. 非 RAM 存储(Non-RAM storage)数据完全存在于程序之外,在程序未运行以 及脱离程序控制后依然存在。

基本类型的存储

Java 的基本类型不是使用 new 创建变量,而是用一个“自动”变量直接存储“值”放在栈内存。

基本类型的占用的内存不会随机器环境而变化,因此更具可移植性。 ![[Pasted image 20220823105719.png]] 所有的数值类型都是有正/负符号的。如果要在堆内存表示基本类型,需要用包装类。

高精度数值

BigInteger, BigDecimal 属于包装类型,没有对应基本类型。

数组存储

在 Java 中,数组使用前需要被初始化,并且不能访问数组长度以外的数据。

代码注释

//单行注释
/*
多行注释
*/

对象清理

作用域

一对大括号之内是一个作用域,决定了在该范围内定义的变量名的可见性和生存周期。

Java 是一种自由格式的语言,额外的空格、制表符和回车并不会影响程序的执行结果。

对象作用域

{ 
String s = new String("a string"); 
}

上例中,引用 s 在作用域终点就结束了。无法在之后用引用 s 访问这个对象。但是,它指向的字符串对象依然还在占用内存。

Java 的垃圾收集器会检查所有 new 出来的对象并判断哪些不再可达,继而释放那些被占用的内存。

类的创建

class ATypeName { 
// 这里是类的内部 
}
ATypeName a = new ATypeName();

字段

类里可以存放方法(method)和字段(field)。 类的字段可以是基本类型,也可以是引用类型。

用点号(.)访问对象内部的字段。

如果类的成员变量(字段)是基本类型,那么在类初始化时,这些类型将会被赋予一个初始值。 ![[Pasted image 20220823112349.png]]

注意,方法中定义的基本类型数据没有默认值。

方法

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

方法名和参数列表统称为方法签名(signature of the method)。签名作为方法的唯一标识。

向方法传递参数,实际上是在传递对象引用,而不是复制体。

程序编写

命名可见性

Java 采取了一种新的方法避免不同模块中的命名冲突:为一个类库生成一个明确的名称, Java 创建者希望我们反向使用自己的网络域名,因为域名通常是唯一的。

如 com.mindviewinc.utility.foibles,点号代表子目录。

使用其他组件

用 import 关键字导入包(类库),可以用通配符 *导入多个类

static 关键字

对于普通的非静态字段和方法, 我们必须要先创建一个对象并使用该对象来访问字段或方法,因为非静态字段和方法必须与特定对象关联。

static 关键字, 意味着该字段或方法不依赖于任何特定的对象实例。即使我们从未创建过该类的对象,也可以调用其静态方法或访问其静态字段。

class StaticTest { 
    static int i = 47; 
}
//两个对象共享变量i
StaticTest st1 = new StaticTest(); 
StaticTest st2 = new StaticTest();

//通过类名访问
StaticTest.i++;

使用类名直接引用静态变量是首选方法,因为它强调了变量的静态属性。

类似的逻辑也适用于静态方法。

编写第一个完整程序

import java.util.*; //使用java.util.Date类

public class HelloDate { 
	//程序运行的入口
	public static void main(String[] args) {
		System.out.println("Hello, it's: "); //输出
		System.out.println(new Date()); 
		} 
	}

Java源文件的名称必须和其中一个类名相同,每个独立程序应该包含一个main()方法。 public static void main(String[] args) { }

编码风格

Java编程语言编码规范要求类名的首字母大写,如果是由多个单词构成的,则每个单词的首字母都应大写(即驼峰命名法)。

对绝大多数其他方法,字段(成员变量) 和对象引用名也采用驼峰命名的方式,但是它们的首字母不需要大写。

Java 和 C/C++ 同属 “自由格式” 的编程语言,但通常我们会在 Java 控制流程语句中采用首部缩进的规范,以便代码更具可读性。