1.所有类都来源于object超类。
2.对象状态的改变必须通过调用方法实现,否则就破坏了封装性。对象的状态为每个对象所保存的描述当前特征的信(可以理解为类的属性)
3,类的每一个实例的标识都不相同,状态同样不同。即使两个拥有相同的状态的对象都不相同
4,一个对象变量并没有实际包含一个对象,仅仅引用一个对象,在java中,任何对象变量的值都是对存储在另一个地方的一个对象的引用,new操作符的返回地址也是一个引用
4.1 首先当使用new 操作符时,会对一个类初始化一个对象(生成一个内存地址),此时当一个对象变量等于new 初始化的对象时就会把这个对象的内存地址返回给对象变量,即引用。
4.2 当使用对象变量a给另一个对象变量b赋值时,就会把对象变量a引用对象赋值给b,此时a,b引用的是同一块内存地址,所以此时采用`==`比较a,b时会返回true,但不代表a和b的对象一样,即`==`比较的仅仅是内存地址,a和b所引用的对象时两个不同的对象(标识符不同)。
5,java的对象存储在堆中,且java的对象变量与c++的指针类似
Date birthday //java
等同于
Date* birthday //c++
6,类的构造器总是伴随着new
操作符一起使用
Employ number01("jobn",1000);//c++中允许
Employ number01("jobn",1000);//java中不允许,编译不通过
7,java中所有方法必须在类的内部定义,但并非是内联的方式,在c++中在类内部定义的方法会自动的称为内联的方法。
8,类的方法可以访问类的所有私有域(私有属性)但是类的对象不能访问类的私有域。
class Employee {
private string name;
public boolean equals(Employee other){
return name.equals(other.name);
}
}
Employee harry;
Emplay boss;
//下面的语句是合法语句
if(harry.equals(boss){
...
}
//下面的语句是非法语句
boss.name;
原因在于harry.equals(boss)是类的方法,类的方法可以访问本类中所有的私有域。
9,final 域,可以将某个属性声明为final,则此属性即为final域,对于这样的域必须在构造对象时初始化,并且这些域之后不可改变,即这些域没有set方法。同样可以将某个对象声明为final,final Employee emplyee
此时表明emlpyee这个对象不可以再引用其他的Employee对象。
10,静态方法可以访问静态自身类中的静态域
11,方法参数:java程序设计语言总是采用按值调用,即方法得到的所有参数值的一个拷贝,此时方法不能修改传递给它的任何参数变量的内容。对象的引用作为参数可以对参数进行改变。
//使用对象的引用可以改变参数的值
public void set(Employ e){
x.raiseSalary(200);
}