java面向对象的特征
1、封装 2、继承 3、多态
面向对象和面向过程的关系
面向过程是面向对象的基础, 面向对象基于面向过程实现的, 但是代码思想层面上, 面向对象时更高级的设计思想
类与对象的关系
- 类是对一类事物的描述,是抽象的。 - 对象是一类事物的实例,是具体的。 - 类是对象的模板,对象是类的实体。
成员变量的默认值
数据类型 默认值 基本类型:整数(byte,short,int,long) 0 浮点数(float,double) 0.0 字符(char) '\u0000' 布尔(boolean) false 引用类型: 数组、类、接口... null
成员变量和局部变量的区别
1.定义位置不同 成员变量: 类中方法外 局部变量:方法中 2.内存位置不同 成员变量:堆空间 局部变量:栈空间 3.生命周期不同 成员变量:随着类对象的创建而创建,随着对象的消失而消失 局部变量:随着所在方法的执行而创建,随着方法的执行完毕而消失 4.默认值不同 成员变量:有默认值 局部变量:没有默认值 变量定义的注意事项 : 定义在方法中变量, 如果没有赋值, 不能使用
6.this和super关键字
this表示本类当前对象的引用 super表示本类当前对象父类的引用实际代码中this和super的使用: 1.this : 当前类型对象的使用 可以区分成员变量与局部变量的重名问题, 带有this关键字的变量表示成员变量的使用 2.super : 当前类型对象的父类引用 1)子父类定义重名成员变量, super.成员变量表示父类成员的使用 2)子父类定义重名成员方法(子类重写), super.方法() 父类中的方法功能 3)子类构造方法第一行, 一定要调用父类构造, 为了保证父类成员优先于子类进入到内存中 super(父类构造实际参数); 当成员变量和局部变量重名, 带有this关键字的变量表示成员变量的使用,带super表示父类的变量
构造方法的特点
1)方法名必须和类名一致 2)不需要返回值 3)默认被jvm调用使用, 构造方法调用时机: 在创建对象同时, 被JVM虚拟机主动调用,并且创建一次对象, 构造方法只调用一次, 因为构造方法无法手动通过对象名调用 4).super() : 父类构造调用. 必须写在构造方法第一位置上, 直接保证父类构造优先于子类进入内存运行
标准实体类
1.私有的属性 2.公有的getter/setter方法 3.空参构造 4.实现序列化接口
静态方法中可以存在this关键字吗?
答:不可以,因为this属于对象
静态成员变量和非静态成员变量的区别
1.概念上,所属不同: 非静态变量属于对象 静态变量属于类,类变量 2.内存空间不同,存储位置不同 非静态变量属于对象,所以存储在堆内存中 静态变量属于类,存储在方法区的静态区中 3.内存时间不同,生命周期不同 非静态变量属于对象,所以生命周期和对象相同,随着对象的创建而存在,随着对象的消失而消失 静态变量属于类,所以生命周期和类相同,随着类的加载而存在,随着类的消失(内存管理)而消失 4.访问方式不同 非静态变量只能使用对象名访问 静态变量既可以使用对象访问,也可以通过类名访问: 类名.静态变量名 或者 对象名.静态变量 类名.静态方法名()
高内聚、低耦合是什么意思
1.高内聚 : 类中功能进行尽量多 2.低耦合 : 少与外类发生密切关联
为什么子类无法继承父类的构造方法
原因: 父类的构造方法需要和父类的类名一致、子类的构造方法需要和子类类名一致,父 类和子类的类名不一样。因此无法继承,名称有冲突。 父类的构造方法用于给父类的成员变量赋值,子类的构造方法用于给子类的成员变 量赋值,子类的成员变量较多,使用父类的构造方法无法将子类中所有的成员变量都进行赋值,因此不继承父类的构造方法 解决: 子类不继承父类的构造,但是可以【调用】父类的构造方法。
java支持单继承,不支持多继承,java支持多层继承
单继承:一个子类只能继承一个父类(一个孩子只能有一个亲爹) 不能多继承:一个子类不能同时继承多个父类 可以多层继承:A类可以继承B类,B类可以继承C类,A类中拥有B、C类中的所有属性和方法。
代码块分类
局部代码块 限定变量的生命周期 构造代码块 由jvm调用在构造方法之前 静态代码块 属于类,只执行一次 同步代码块(多线程)
抽象类和抽象方法的关系
抽象方法所在的类必须是抽象类 抽象类中未必一定都定义抽象方法,抽象类中未必存在抽象方法
抽象类有构造方法吗?
有 虽然本类无法创建对象,但是抽象类一定有子类,子类会访问父类的抽象方法。 是否有构造方法,不取决于是否可以创建对象,而是取决于是否可以定义成员变量。如果可以定义成员变量,那么就需要初始化成员变量,就是构造方法来完成的。
接口中只能是抽象方法吗?
在jdk1.8以前是的, 在jdk1.8以后,接口中可以定义添加默认方法、静态方法
接口中是否可以定义出构造方法?
不可以,原因 : 因为接口中不能定义出成员变量, 只有可以定义成员变量的类型, 才能够定义出构造方法
类与类、类与接口、接口与接口之间的关系
1、类与类 继承的关系,使用extends关键字 可以单继承、不可以多继承、可以多层继承 2、类与接口: 实现关系,使用implements关键字 java中有单实现和多实现 3、接口与接口: 继承关系,使用extends 可以单继承、也可以多继承、可以多层继承 多继承的格式:
创建一个成员内部类对象
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
权限修饰符从小到大权限罗列
private :私有的 限定范围是:本类中使用, 通常修饰成员变量 默认的 :啥也不写 限定范围: 本类和本包(package)中使用 protected :受保护的 限定范围: 本类和本包中使用,其他包的子类 public :公共的 限定范围:没有范围, 通常修饰类和方法
成员变量初始化顺序
默认初始化--》显示初始化---》构造初始化
代码块
静态代码块:属于类,只执行一次,最先执行 构造代码块:类中方法外,每次都在构造方法之前执行