一、java对象的认识
java是基于C++的,但是相比之下,java是一种更加纯粹的面向对象的程序设计语言,我们知道每一种编程语言都有自己的操作内存中元素的方式。比如C和C++可以使用指针间接操作,也可以直接操作。但是程序员必须要知道自己所操作的元素是什么类型。但是这一切对于java都得到了简化。java将一切都视为对象。
一、需要说明的是,真正操作对象的其实是对象的引用,这就好比遥控器(引用)去操作电视机(对象)一样。当我们想更换电视节目时,只需要使用遥控器来控制即可。
二、没有电视机,遥控器也可以存在,但是人不能使用。举个例子。
我们创建一个String s;但是没有初始化,这里的s只是引用,没有对象与之相关联。此时向s发送一个消息,就会返回一个运行时错误。这是因为只有了遥控器s,但是没有电视机(对象)。最好的做法是在创建一个引用的时候,就对其进行初始话。
String s = "asdf";
二、对象的结构
1、数据的存储
位置 | 存储对象 | 优缺点 |
寄存器 | 根据需求分配 |
1、不能直接控制 2、数量极其有限 |
栈 | 基本类型 | 1、java系统必须知道存储在栈的所有对象的确切的生命周期 |
堆 | 存放所有的java对象 |
1、不需要知道存储在堆里的数据的生命周期 2、存储分配和清理需要更多地时间 |
常量存储 | 常量值 | |
非RAM存储 |
1、流对象 2、持久化对象 | 1、把对象转化成可以存储在其他媒介上的事物 |
2、基本类型
需要说明的是,每一种基本类型不会随着机器硬件架构的变化而变化,这种存储方式是java具有可移植性的原因之一。
3、数组
注意:1、java确保数组会被初始化,而且不能在定义数组的范围之外被访问,这种范围检查是以数组上少量的内存开销以及运行时的下表检查为代价的。
2、当创建一个数组对象时,相当于创建了一个引用的数组,并且默认初始化为null。如果试图在运行时,使用一个null的数组,就会报错。
三、对象的作用域
1、作用域
int x=30;
int f(){
int x=1;//这种方式在C和C++是可以的,但是在java中是非法的
}
2、对象的作用域
现在创建一个对象
{
String s= new String("asdf");
}//范围之外
我们看到这个对象,事实上当我们用new创建一个对象时,在范围之外,这个对象在内存中依然保留着。和C++不同·,C++必须要确保这个对象不使用时,将其销毁并且回收内存。这样对java也带来了这样一个问题,当我们的对象越来越多时,不会回完全将内存填满,阻塞我们的程序呢?其实完全不用担心,java有一套垃圾回收机制,会自动的帮我么清理。
四、类
java中使用关键字class来定义一个类,在java中,你所做的全部工作就是定义类,产生对象,并给对象发送消息。
class fdd{
int x;
A a;//A是另外一个类
int add(int a,int b){
return a+b;
}
}
注意:1、类中字段的类型任意。
2、方法的有return返回值。
3、若类的字段是基本数据类型时,java会默认将其初始化。但是局部变量不适用,只适用于作为类的成员变量来使用时才默认将其初始化。