面向对象、类

一、类和对象的关系 类是对象的抽象,不占用内存,表示群体概念,它是一组具有相同属性和方法的对象的集合; 对象是类的具体实例,用来描述客观事物的一个实体,由一组

一、类和对象的关系

类是对象的抽象,不占用内存,表示群体概念,它是一组具有相同属性和方法的对象的集合;

对象是类的具体实例,用来描述客观事物的一个实体,由一组属性和方法构成,表示个体概念,具有唯一性和独立性,占用存储空间。

二、面向对象和面向过程

两者都是软件开发思想,先有面向过程,后有面向对象。在大型项目中,针对面向过程的不足推出了面向对象开发思想。

①编程思路不同: 面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。

②封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。

③面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。

三、方法重写与重载的关系

方法重载:同一个类中,方法名相同,参数列表不同,与修饰符、返回值、抛出异常都无关。

方法重写:存在继承关系的两个类中,方法名相同,参数列表相同,修饰符不能严于父类,返回值、抛出的异常要么和父类相同、要么是其(父类)子类。

四、类的构造方法

构造方法:专门用于构造对象,通常和new搭配使用。构造方法在形式上没有返回值(实质上返回this),方法名和类名一致构造方法分为有参构造和无参构造

1、若在类中没有显示的定义无参构造方法,jvm默认给该类分配一个无参构造。无参构造方法用于在构造对象时给对象赋值默认初始值。

2、若类提供了有参构造,jvm不在给该类分配无参构造。因此,我们需要为类提供无参构造。

五、this和super

1、this是对象内部指代自身的引用,本身是一个地址

  ①this可以调用成员变量,通常用于解决成员变量和局部变量同名冲突

  ② this可以调用成员方法

  ③ this可以在构造方法中调用重载的构造方法,且必须是构造方法的第一条语句。

2、super 表示父类。它只是一个简单的关键字,用于引用父类。super没有内存地址。其包含引用。

  ①super可以调用直接父类的成员变量(注意权限修饰符,比如不能访问private成员)

  ②super可以调用直接父类的成员方法(注意权限修饰符,比如不能访问private成员)

  ③super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句

六、static关键字(修饰变量、方法、代码块和内部类)

1、static属性属于这个类所有,即由该类创建的所有对象共享同一个static属性。对象名.属性名和类名.属性名(推荐)来访问。

  static变量和非static变量的区别(都是成员变量,不是局部变量)

  ①不管有多少个对象,static变量只有1份。对于每个对象,非static变量都会有单独的一份

  ②静态变量存在方法区中, 实例变量存在堆内存中

  ③静态变量:对象名.属性名和类名.属性名(推荐)来访问,实例变量: 对象名.变量名访问

  ④静态变量:当jvm加载字节码时在方法区分配空间,实例变量:创建对象的时候在堆区分配空间。

2、static方法也可以通过对象名.方法名和类名.方法名(推荐)两种方式来访问。

  ①静态方法不能访问实例变量、this、实例方法(静态成员比实例成员先分配空间)

  ②实例方法可以访问静态变量或者静态方法

3、static代码块。当jvm加载字节码时执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。

4、static内部类:属于整个外部类,而不是属于外部类的每个对象。不能访问外部类的非静态成员(变量或者方法),可以访问外部类的静态成员

七、代码块 

代码块{ } java中可以分为普通代码块、构造代码块、静态代码块同步代码块。

1、普通代码块就是作用域块。作用域嵌套和作用域链。

2、构造代码块在类的内部,构造方法的外部定义。通过{ }定义。构造代码块先于构造方法执行;构造代码块构造一个对象,执行一次。

3、静态代码块在类的内部,方法的外部定义。通过static{ }定义。

   静态代码块在类加载时只执行一次; 静态代码块先于构造代码块、构造方法执行;静态代码块不能访问实例成员。