面向对象三大特征:
1):封装
封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露该对象的功能。
2):继承
继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员。
3):多态
多态是可以直接把子类对象赋给父类变量,但是运行时依然表现子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征。
什么是抽象:从特定的角度出发,从已经存在的一些事物中抽取我们所关注的特性,行为,从而形成一个新的事物的思维过程,是一种从复杂到简洁的思维方式。
对象是类的实例,类是对象的模版
什么是对象:
对象是人们要进行研究任何事物,一切事物都可以认为是对象
对象具有状态和行为:
对象具有状态,比如姓名,年龄,性别等
对象具有操作,比如吃饭,睡觉,写代码等
什么是类:
具有相同特性(状态)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例就是对象,类实际上就是一种数据类型。
类具有特性,对象的状态,用成员变量来描述,封装数据。
类具有功能,对象的行为,用方法来描述。
定义类的注意事项:
1):如果类使用类public修饰符,必须保证当前文件名称和当前类名相同。
2):类名使用名称表示,类表示某一类事物,首字母大些,如果包含多个单词,用驼峰表示法。
3):在面向对象的过程中,定义类的时候,专门为描述一个对象提供一个类,不需要main方法。
根据类来创建对象的语法:
类名 变量 = new 类名();
对象的比较操作:
==号:对于基本数据类型来说,比较的是值
对于引用类型数据来说,比较的是在内存中的地址值。
每次使用new关键字,都表示在堆值中开辟一块存储空间,不同的存储空间,地址不同。
对象的声明周期:
对象的出生:每次使用new关键字的时候,就会在内存开辟新的空间,此时对象开始存在
对象的结束:当堆中的对象没有被任何变量所引用,此时该对象就成了垃圾,就等着GC来回收该对象,当被回收的时候,对象就被销毁,释放更多的内存空间。
匿名对象:没有名称的对象,创建对象之后没有赋给某一个变量。new Servant();//匿名对象,只是在堆中开辟一块新的内存空间,但是没有把该空间地址赋给任何变量。因为没有名称,匿名对象仅仅只能使用一次。一般的把匿名对象作为方法的实参传递。
构造器(构造方法):如果我们没有显示提供构造器,编译器在编译源文件的时候,会创建一个缺省的构造器;如果我们显示定义了一个构造器,则编译器不再创建缺省构造器。所以一个类至少存在一个构造器。
构造器的作用:
1):创建对象,但是必须和new一起使用。
2):完成对象的初始化操作。
构造器的特点:
1):构造器的名称和当前所在类的名称相同。
2):禁止定义返回类型,void也不能用,返回类型和所在类名相同,所以不用写。
3):不需要使用return语句。虽然构造器是有返回值的,返回的是当前创建对象的引用。
编译器创建的默认构造器的特点:
1):符合构造器的特点
2):无参数的
3):无方法体的
4):如果类A没有使用修饰符,则编译器创建的构造器也没有修饰符;若使用了,则也有修饰符。
static修饰符表示静态的,可修饰字段,方法,内部类,其修饰的成员属于类,也就是说static修饰的资源属于类级别,而不是对象级别。
static的真正作用:用来区别字段,方法,内部类,初始化代码块是属于对象还是类本身。
static修饰符的特点:
1):static修饰的成员(字段/方法),随着所在类的加载而加载,当jvm将字节码加载进去的时候,static修饰的成员已经在内存中存在了。
2):优先于对象的存在。对象是我们手动通过new关键字创建出来的。
3):static修饰的成员被该类型的所有对象所共享。根据该类创建出来的任何对象,都可以访问static成员。但是访问的时候表面上是通过对象访问,其本质依然使用的是类名访问的,和对象没有任何关系。
4):因为static修饰的成员直接属于类不属于对象,所以可以直接使用类名访问static成员。