用引用操纵对象
操作的标识符实际上是对象的一个“引用”,没有一个对象与之相关联,引用也可存在
String s;
在这里,只是创建了一个引用,但是没有创建一个与之相关联的对象,因此,不能直接使用,正确的做法是在创建一个引用的同时便进行初始化
String s="abcd";
必须由你创建所有对象
- 对象存储的位置
- 寄存器,寄存器位于处理器内部,是速度最快的存储区域,但是容量较小,寄存器是根据需求进行分配,你不能直接控制
- 堆栈,位于通用RAM中,在进行内存控制时,会控制指针的上下移动来分配内存,但是在创建程序时,java系统必须知道存储在堆栈内所有项目的确切周期,以便于上下移动堆栈指针,限制了程序的灵活性
- 堆,一种通用的内存池,编译器不需要知道存储的数据在堆里存活了多长时间,因此,在堆里分配存储有很大的灵活性,只需要new一个对象即可
- 常量存储,常量值通常直接存放在程序代码内部,因为它们永远不会被改变
- 非RAM存储,数据独立于或程序之外,可以不受程序的任何控制,在程序没有运行时也可以存在
- 特例:基本类型
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
---|---|---|---|---|
boolean | – | – | – | Boolean |
char | 16-bit | Unicode o | Unicode 2**16-1 | Character |
byte | 8-bit | -128 | +127 | Byte |
short | 16-bit | -2**15 | +2**15-1 | Short |
int | 32-bit | -2**31 | +2**31-1 | Integer |
long | 64-bit | -2**63 | +2**64-1 | Long |
float | 32-bit | IEEE754 | IEEE754 | Float |
double | 64-bit | IEEE754 | IEEE754 | Double |
void | – | – | – | Void |
- 基本类型,不使用new来创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,并置于堆栈中,因此更加高效
- 数组
Java会确保数组被初始化,而且不能在它的范围之外被访问,当创建一个数组时,实际上就是创建了一个引用数组,并被设置为null,表示还没有被指定一个对象,如果直接运行,会报错,如果创建一个基本类型的数组,则编译器会将该数组所占用的内存全部清零
永远不要销毁对象
- 对象的作用域
{
String s=new String("a string");
}
在以上代码中,在作用域结束之后,对象依然存在,但是引用s却在作用域结束之后消失了,因此我们无法在作用域之外来访问这个对象,Java有一个垃圾回收器,会自动释放这些已经无法访问的对象,避免内存泄露的问题
创建新的数据类型:类
- 基本默认值
在类的成员变量之后,即是没有进行初始化,Java也会确保它获得一个默认值,但是这个初始化的方法不适用于“局部变量”(非某个类的字段),因为,在不初始化情况下,你可以并不知道它会是什么
基本类型 | 默认值 |
---|---|
boolean | false |
char | ‘\uoooo’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
- 方法、参数和返回值
- 方法的定义如下:
returnType methodName(/*argument list*/){
/*Method body*/
}
- 参数列表
参数列表指定要传递给方法什么样的信息,这些信息采用的都是对象形式,因此,在参数列表中必须指定每个所传递对象的类型以及名字,这里的传递实际上也是引用,并且引用的类型必须正确
- return可以用来让方法返回一个值,也可以作为退出方法来使用
构建第一个Java程序
- 名称可见性
为了避免名称的重复,java设计者希望程序员反过来使用自己的internet域名,这样,可以给一个类库生成不会与其他名称混淆的名字,比如:cn.siqulab.utility.foibles,用句点来表示目录的划分
- 运用其他构件
如果想在程序当中使用预定义好的类,可以使用import
语句来导入一个类库,大多数时候,我们使用与编译器附在一起的java标准类库力的构件。有了这些构件,就不用写一长串的反转域名
import java.util.ArrayList;
如果想要导入util中的几个,但是又不想一个个声明,那么可以使用通配符
import java.util.*;
- static关键字
如果有时只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少个对象,甚至根本就不创建任何对象。另一种情形是,想要没有创建对象,也可以调用这个方法,就可以使用static关键字
class StaticTest{
static int i=47;
}
StaticTest st1=new StaticTest();
StaticTest st2=new StaticTest();
虽然创建了两个对象,但是st1.i与st2.i都指向同一个存储空间
引用static变量有两种方法,创建对象之后进行访问与利用类直接访问
你的第一个java程序
import java util.*;
public class hello{
public static void main(String[] args){
System.out.println("hello");
System.out.println(new Date());
}
}
- 使用
import
导入额外的类,java.lang
这个类会被默认导入java的所有类当中,因此所有,它的类都可以直接使用 - System类有许多属性,out是一个PrintStream对象,因为是静态的,所以不需要创建任何东西,out对象便已经存在了
暂无评论内容