类和对象

最简单的类: 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);//调用本类的一个形参的构造函数。