一、类和对象的概念
- 类
>>具有相同属性和行为的一类实体
- 对象
>>实物存在的实体。通常会将对象划分为两个部分,即静态部分和动态部分。静态部分指的是不能动的部分,被称为属性,任何对象都会具备其自身的属性;动态部分指的是对象的行为
- 类实质上就是封装对象属性和行为的载体,而对象是类实例化出的一个实例
二、面向对象的三大特性
- 封装
>>将对象的属性和行为进行包装,隐藏其实现细节,称为封装
>>采用封装的思想保证了类内部数据结构的完整性,应用该类的用户不能轻易的直接操作此数据结构,只能执行类允许公开的数据。避免外部操作对内部数据的影响,提高了程序的可维护性
- 继承
>>一个对象直接使用另一个对象的属性和方法,并可以在另一个对象的基础上扩充自己的属性和方法,成为继承。继承者称为子类,被继承者称为父类
>>子类的实例都是父类的实例,但不能说父类的实例是子类的实例
>>继承关系可以使用树形关系来表示,父类与子类存在一种层次关系。一个类处于继承体系中,他既可以是其他类的父类,为其他类提供属性和行为,也可以是其他类的子类,继承父类的属性和方法
- 多态
>>将父类对象应用于子类的特征就是多态
三、类
- 成员变量
>>Java中对象的属性也称为成员变量
- 成员属性
>>Java中对象的行为成为成员方法
- 权限修饰符
>>Java中权限修饰符主要包括private、public和protected
>>private:该成员变量或方法只能在本类中被使用,在子类中是不可见的,并且对其他包的类也是不可见的
>>public:除了在本类使用这些数据之外,还可以在子类和其他包的类中使用
>>protected:只有本包内的该类的子类或其他类可以访问此类中的成员变量和成员方法,其他包的类和子类不能访问
- 局部变量
>>成员方法内的变量,被称为局部变量。局部变量在方法被执行时创建,在方法之行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误
>>局部变量的作用域从变量的声明开始到该变量的结束为止
>>在互不嵌套的作用域中可以同时声明两个名称和类型相同的局部变量
- this关键字
>>在Java语言中规定使用this关键字来代表本类对象的引用,this关键字被隐式的用于引用对象的成员变量和方法
>>this除了可以调用成员变量或成员方法外,还可以作为方法的返回值
>>普通方法中,this总是指向调用该方法的对象
>>构造方法中,this总是指向正要初始化的对象
>>this不能用于static方法
>>可以用this在一个构造方法中调用其他构造方法,且必须位于这个构造方法的第一行
- 类的构造方法
>>构造方法是一个与类名相同的方法,对象的创建就是通过构造方法完成的。每当实例化一个对象是,类都会自动调用构造方法
>>构造方法特点如下
>>>构造方法没有返回值
>>>构造方法的名称要与本类相同
1 public book(){ //public:构造方法修饰符 book:构造方法名称 ///没有void!!
2 ...//构造方法体
3 }
- 静态变量、常量和方法
>>被声明为static的变量、常量和方法被称为静态成员
>>静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员
>>静态数据与静态方法的作用通常是为了提供共享数据或方法,如数学计算公式等
>>静态成员同样需要遵循着public、private和protected修饰符的约束
>>静态变量中不能使用非静态的变量和方法
- 类的主方法
>>主方法是类的入口点,定义了程序从何处开始;主方法提供对程序流向的控制,Java编译器通过主方法来执行程序
>>主方法的特点如下
>>>主方法是静态的,所以如要直接在主方法中调用其他方法,则该方法必须也是静态的
>>>主方法没有返回值
>>>主方法的形参为数组。其中args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数
>>主方法的语法如下
public static void main(String[] args){
//方法体
}
四、对象
- 对象的创建
>>在Java语言中通过new操作符来创建对象,可以在Java语言中使用new操作符调用构造方法创建对象
>>对象被创建出来时,就是一个对象的引用。这个引用在内存中为对象分配了存储空间,也可以在构造方法中初始化成员变量
>>每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当生命周期结束时,对象就变成垃圾,被Java虚拟机自带的垃圾回收机制处理,不能再使用
- 访问对象的属性和行为
>>使用“对象.类成员”来获取对象的属性和行为
- 对象的引用和比较
>>对象的引用:类名 对象引用名称
>>引用于对象相关联的语法:类名 对象引用名称=创建对象操作符(new) 构造方法
>>对象的比较:“==”和equals()
- 对象的销毁
>>每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址将会被回收
>>垃圾回收机制回收的两类对象
>>>对象引用超过其作用范围,这个对象将会被视为垃圾
>>>将对象赋值为null
>>垃圾回收机制只能回收由new操作符创建的对象
>>如果存在不是由new操作符创建的对象,可使用Java提供的finalize()方法,这个方法是Object类的方法,被声明为protected,用户可以在自己的类中定义这个方法。如果用户在类中定义了finalize()方法,在垃圾回收时会首先调用该方法,下一次垃圾回收动作发生时,才能真正回收被对象占用的内存
>>需要强调的是,垃圾回收或finalize()方法不保证一定会发生,如Java虚拟机内存损耗殆尽时,是不会执行垃圾回收的
>>由于垃圾回收不受人控制,具体的执行时间也不确定,所以finalize()方法也就无法执行。为此Java提供了System.gc()方法强制启动垃圾回收器来告知垃圾回收器进行清理