1.对象的存储空间
1)Java对象:Java对象是通过new关键字创建的一个类实体,这个对象不是像类定义那样是个概念性的东西,而是具体的可以操控的实体。
2)静态数据:静态数据是指由static关键字修饰的数据,这类数据存储在内存中的固定位置。例如:static float rate=0.523
static关键字也可以修饰类和方法,但这些static类和方法存放的地点与静态数据不同
3)常量数据:常量数据是在整个程序中永远不会改变的数据。在Java中常量一般用全部大写的单词表示。常量数据在整个生存期间都不会发生变化,类可以直接调用,不必再使用对象引用调用。
2.存储空间:内存和外存
(1)堆栈:存在于RAM中,通过堆栈指针的移动来操作内存。如果堆栈指针向上移动就释放内存,如果堆栈指针向下移动就分配内存。如果有数据需要存放在堆栈中,编译器必须知道数据的大小和生命周期。Java的对象引用就存放在堆栈中
(2)堆:堆是一种通用内存,存在于RAM中,与堆栈不同的是,它不需要知道堆为其分配了多少空间,也不需要知道堆中数据的生命周期。只要用关键字new生成的对象都存储在堆中,编译器不用考虑细节,堆自动完成空间分配。堆为对象的创建提供了极大的灵活性。Java对象存放在堆中
(3)静态存储空间:静态存储空间是指一段固定的存储区域,在整个程序执行期间该区域不能被其它数据占用。在Java中用关键字static修饰的类型数据存储在静态存储空间中,而用static修饰的对象则存储在堆中
(4)常量存储空间:常量存储空间是存储Java常量的地方。常量存储在程序代码内部,永远不会改变。常量存储空间一般在ROM中分配
(5)磁盘存储空间:相对于内存(RAM或ROM),磁盘存储空间定义为外存。外存的访问速度比内存慢。但是它可以存储在程序执行期外的对象。在程序需要时调用这些对象
如果一段程序或代码在程序执行期间暂时不需要,就没必要占用内存空间,此时可以把它们存储在外存。Java的流对象和持久化对象就存储在外存中。在系统需要时可以按照常规的对象调用方法调用
3.关键字static
static是静态的意思,表示该数据或对象在内存中只有一份
(1)static关键字修饰内置数据
static关键字修饰内置数据的格式是在数据声明前放置关键字static。例如:static float rate=1.2f;
该数据在软件系统运行期间只有一份,但是该数据可以被其它对象或自己修改,修改后访问的是更新了的数据因为内存中该数据的空间是唯一的。可以用类直接调用也可以用
对象引用来调用
(2)static关键字修饰方法
一般在调用对象的方法时首先需要新建一个对象,产生该对象的实例,再通过对象引用来调用属性数据或调用方法。然而使用static修饰的方法可以直接被该类调用,也可以用对象引用来调用。注意static的位置是放在方法的访问权限修饰符和返回数据类型之间。
例如:private static void staticFoo(){}
4.this关键字
this只能用在方法中,就是指向当前对象
5.访问权限
Java使用了3个关键字来设置类内部数据或方法的访问权限,即public、private和protected
public 表示其后的数据或方法对任何用户都是可见的;
private表示只有该类的创建者或者该类的内部方法可以使用,而其他任何人都无法访问
protected关键字作用和private一样,不过子类可以访问父类的protected成员。
默认的访问权限是指类可以访问在同一个包中的其他类的数据或方法,而包外的类是无法访问包内的具有“包访问权限”的成员
在设计类的时候,尽量把类的属性全部用private关键字修饰,而修改和读取该属性变量最好是用具有public属性的setMethod()和getMethod()方法,这样在访问这些属性时就可
以通过消息传递的方式,统一的使用对外接口实现对对象内部数据的访问
6.继承
在子类中通过覆盖实现方法的访问权限一定为public,即子类中覆盖的方法的访问权限不能低于父类中的该方法,否则编译时会抛出异常。如果父类中的方法是public的,而子类中的方法是private的,编译时会抛出异常
7.super关键字
super关键字就是表示父类的意思,类似一个指针指向父类的对象。利用super关键字调用的方法就是子类所继承的父类的方法。
8.多态。包含重写(子类中的重写)和重载(构造函数的重载)
在多态的使用中,private方法不能被重载。如果重载了private方法,编译器会提示出错
9.抽象类和抽象函数
如果一个类包含抽象方法,该类就是抽象类,但抽象类不一定必须有抽象方法。抽象方法是一个不完整的的方法,没有声明方法体,通过关键字abstract声明抽象方法。例如:
abstract void methodname();
只要有一个方法是抽象方法,该类就是抽象类。抽象类可以被子类继承。但是子类必须实现抽象类的所有抽象方法,否则子类也是抽象类,抽象类不能产生对象,即不能通过
new关键字创建对象
10接口
接口是更纯粹的抽象类,它所有的方法都没有提供任何的实现,只是给出方法的声明。它声明的方法只有返回类型、方法名和方法参数,但是没有函数体。这些方法必须声明
为public的,即使不声明为public的,接口中方法的默认访问属性也是public的。
接口中定义的属性默认都是static和final的,