类和对象
最简单的类: class A{};//没有任何属性和行为
对象: A obj=new A();
类是定义,是规范,是“死”的东西。类似于水果这个概念,实际上并不存在。
对象是实例,是类的一个实现,是一个具体的东西。
A obj1=new A(); A obj2=new A();
以上有两个对象,它们的类型都是A,但是这是两个不同的对象,在内存中有不同的存放地址。因此,没有两个对象是完全一样的。
- A obj=new A();
- obj可以看做内存中一个对象(包括若干个数据的句柄)。
- 在C/C++中obj称为指针,在Java中称为Reference(引用)。
- 对象赋值是Reference赋值,而基本类型是直接值拷贝。
- 产生一个对象,A obj=new A();
-%99是用new关键字,还有%1是用克隆和反射生成。
- new出对象后,内部属性值默认是?
short 0; int 0; long 0;
boolen false;
char '\u0000';(备注:其实就是一个空字符)
byte 0;
float 0.0f;
double 0.0d;
- 函数内部的局部变量,编译器不会给默认值,需要初始化后才可以使用;类的成员变量,编译器会给默认值,可直接使用。
构造函数
如何在变量产生时就给成员变量赋值呢?
答案就在构造函数内
public class A{
int id;
public A(int id2)
{
id=id2;
}
}
A obj=new A(10);
Java构造函数的名称必须和类名相同,且没有返回值。
Java有构造函数,但是没有析构函数。
每个变量都是有生命周期的,它只能存储在离它最近的一对{}中。
Java具有自动回收机制,当变量退出其生命周期后,JVM会自动回收所分配的对象的内存。所以不需要析构函数来释放内存。
信息隐藏和this
信息隐藏
面向对象有一个法则---信息隐藏
-
类的成员属性,是私有的private。
-
类的方法是公有的public,通过方法修改成员属性的值。
this
-
this负责指向本类中的成员变量。
-
this负责指向本类中的成员方法
this.add(5,3);//调用本类的add方法,this可忽略。
- this可代替本类的构造函数。
this(5);//调用本类的一个形参的构造函数。