Think in java笔记(一)
Introduction to Objects & Everything is an Objects
1.万物皆对象
2.upcast是安全的
3.downcast不是绝对安全的,SE5之前,由于容器类只能容纳Object,所以当你将一个对象引用丢进容器,这个对象就upcast成Object,丢失了原有的信息。
4.但是SE5允许利用generics(泛型)可以安全地downcast S例如ArrayList<Shape> shapes = new ArrayList<Shape>()
5.java采用在一个内存池里(堆)动态创建对象,即动态分配内存的方式。
6.String s; 仅仅创造了一个String的引用,而非对象
String s = "asdf";
7.五个存放数据的地方,寄存器位于CPU速度最快,但数量有限;堆栈位于RAM,指针向下移创建对象,向上移释放对象,速度仅次于寄存器,引用存放于此,而非对象,而且java必须知道对象的生命周期;堆,通用的存放位置,通常new出来的对象就存放在这里,程序运行时才会分配空间,但是代价是慢,堆不存在堆栈的限制;常量存储区顾名思义,储存常量的ROM;最后是外部存储区,例如流对象和持久化对象。
8.基本类型储存在堆栈中,变量直接操作数值,不像new出一个对象一样将引用存储在堆里。
9.包装类可以让你在堆new出一个非基本类型的对象,就像通常new对象一样。
char c = "x"; // 在堆栈里,属于基本类型
Character ch = new Character(c); //包装类,在堆里
10.创建一个有多个对象的array,相当于创建了对象的引用,引用会被初始化为null,即没有指向任何对象,注意,未初始化的引用是禁止使用的。
11.{String s = new String("a string");} 引用s在括号末端就没作用了,但是String对象还在占据内存,此时java的垃圾回收器就起作用了。
12.类的定义大体都类似,但是java只能对类的数据成员初始化(假设你没有进行初始化),对局部变量需要手动初始化。方法需要明确返回类型,同时接受返回值时的变量也要声明为同类型的,(python自动处理)。如果不想要返回对象,那么可以使用void,return的唯一作用就变成了退出程序。
ReturnType methodName (/* Argument List */) { /* Method body*/ }
13.static关键字,无需创建类的对象也可以call的方法或者数据成员,使用static。
class StaticTest { static int i = 47; //static field } StaticTest t1 = new StaticTest(); StaticTest t2 = new StaticTest(); //t1& t2 share the same i StaticTest.i++; //ONLY works with static field