用引用操作对象
尽管一切都看做对象,但操纵的标识符实际上是对象的一个“应用”(reference)。 应用就像遥控器,对象就是电视,只要握住遥控器就能控制电视。 拥有一个引用,并不一定需要有一个对象于他关联,用String 举例(这里暂时不考虑String常量池等,只是简单打个比方)
String s; //只是创建了一个引用, 此时向s发送消息,就会返回一个运行时错误,因为s没有与任何事物相关联
String s = "asdf" //安全的做法是在创建一个引用的同事做初始化。这里用到了Java语言的一个特性,字符串可以用带引号的文本初始化。通常必须对对象采用一种更通用的初始化方法。
必须由你创建所有对象
一旦创建了一个引用,就希望它能于一个新的对象关联。通常通过new操作符来实现,new关键字意思是“给我一个新对象”
String s = new String("asdf");
通常有5个不同的区域可以存储数据,分别是 1.寄存器 2.堆栈 3.堆 4.常量存储 5.非RAM存储。
Java中的对象在被存储在堆当中。 堆是一种通用的内存储(也位于RAM区),编译器不需要知道存储在堆里的数据存活多久,当需要一个对象时,只需要用new写出一行简单代码,执行这行代码的时候,会自动在堆里进行存储分配。下面的特例类型则被存储于堆栈中。
特例:基本类型
Java当中有一些基本类型,这些类型是特别小的简单的变量,因此没必要当对象存储在堆当中,他们不用new来创建,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”并置于堆栈中,因此更加高效。
boolean 类型没有明确大小,仅定义为true或false。
基本类型具有的包装器类,是的可以在堆中创建相对应的非基本对象,用来表示基本类型。
如果要高精度计算,可以使用Java提供的2个高精度计算类 BigInteger 和 BigDecimal。
永远不需要销毁对象
先来了解一下作用域(scope)的概念,作用域决定了在其内定义的变量名的可见性和生命周期,用“{}”决定作用域的位置。
Java中new出的对象,可以存活在作用域外, 例如
{
String s = new String ("aa");
}//end of scope
在作用域外,我们无法触碰到引用s,但是对象仍然存在,并且会保持下去。
Java有一个垃圾回收器,用来监视new创建的所有对象,并且会辨别哪些不再会被引用的对象,随后释放这些对象的内存空间。
创建新的数据类型:类
当基本类型是成员变量时,Java会确保其拥有默认值 (只有在基本类型是成员变量时拥有),确保这些变量得到初始化。
方法,参数和返回值
方法名和参数列表(合起来称为方法签名)唯一的标识出某个方法。
Java中的方法只能作为类的补一份来创建,方法只能通过对象才能调用(static方法是针对类的调用)
调方法的行为被称为“发送消息给对象”, 例如
int x = a.f();
消息是f(),对象是a,面向对象的程序设计通常简单地归纳为“向对象发送消息”。
构建一个Java程序
为了避免名字冲突,Java通过几个关键字引入了名字空间的概念,使用反向Internet域名。
static关键字:当声明一个事物是static时,就意味着这个域或者方法不会与包含它的那个类的任何对象实例关联在一起。static作为字段时只有切共用一份存储空间,而非static字段则是每个对象有一个存储空间。static方法可以创建或使用当前类的对象,所以static方法尝尝被拿来做"牧羊人",负责看护同类型的实例群。
第一个Java程序
Java需要你import导入额外的类,除了一个类:java.lang. java.lang将会被自动导入到每个Java文件中。
Java类的名字必须和文件名字相同。
Java需使用驼峰命名。