笔记《Thinking in Java》第2章 一切都是对象

该博客围绕Java中“一切都是对象”展开,介绍了数据存储位置,如寄存器、栈、堆等;阐述基本类型存于栈,有精度问题及包装类;说明了对象作用域规则;讲解类属性、方法属性初始化及调用方式;还提及默认导入包、注释和嵌入文档等知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二章 一切都是对象

1.数据可以存在哪
  • 寄存器。因为它在CPU内部,所以最快。但是Java无法直接控制它。
  • 栈。在RAM上,但是,CPU可以通过栈指针快速的分配存储,向下就分配新内存,向上就释放内存,所以速度很快。代价是,Java系统必须确切的知道数据在栈里的生命周期,所以灵活性有限。Java的对象引用存在这。
  • 堆。也是在RAM上,不过跟栈比,编译器不用知道数据在堆里的生命周期,所以在堆里分配存储很灵活,代价是更耗时。Java所有的对象存在这。
  • 常量存储。常量值直接放在程序代码内部,这样也是安全的。
  • 非RAM存储。常见的两种:流对象和持久化对象。前者是字节流,后者是存在磁盘上。
2.基本类型

基本类型存在栈里面,这样这个变量就直接存储“值”了,比起对象来更轻量,更快速。

基本类型大小范围最大值包装类
booleanBoolean
byte1字节-128127Byte
char2字节Unicode0Unicode65535Character
short2字节-3276832767Short
int4字节-2,147,483,6482,147,483,647Integer
long8字节约-900亿亿\9*10^18约900亿亿\9*10^18Long
float4字节Float
double8字节Double
voidVoid

浮点数与整型数转换时,注意精度丢失问题。float精度没有int高(?)。

关于浮点数精度及表示法,后续补充。

BigInteger和BigDecimal可以表示任意精度及大小的整数和定点数。

Java创建数组时,其实就是创建了一个引用数组。数组存不了基本型,而是包装类。后续详解。

3.对象作用域

java的作用域是大花括号,并且有闭包。以下程序,C++里可以,但Java不合法:

{
    int x = 12;
    {
        int x = 96;	// Illegal
    }
    
}
4.类

类属性:基本类型会被初始化。引用类型初始化为null。

方法属性:不会被初始化。如果要使用,编译器会强制要求你初始化。

	void method(int i, String str){
		int method_a;
		String method_str;
		
		System.out.println(i);
		System.out.println(str);
		
		System.out.println(method_a);	// Illegal
		System.out.println(method_str);	// Illegal
		
		System.out.println(clazz_i);
		System.out.println(clazz_a);
	}

可以通过类名直接调用类方法和字段(最佳实践),也可以通过对象调用类方法(少用)。

	static String clazz_a = "clazz_a";
	static void classMethod() {
		System.out.println("Class method invoke!");
	}

	new Test201957().classMethod();	// Class method invoke!
	System.out.println(new Test201957(1).clazz_a);	// clazz_a
5.其他

java.lang包是默认导入到程序的,无需显示导入。

6.注释和嵌入文档(了解即可)

private的javaDoc会被忽略

javaDoc也可以嵌入html来使用

@deprecated用来加删除线

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值