重载和重写的区别
方法的重载条件:
- 方法名称相同
- 返回值可以一样,可以不一样
- 参数列表不同【参数数据类型、参数个数、顺序】
方法的重写条件:
- 方法名称相同
- 返回值相同,如果返回值是父子关系,也可以认为是重写的
- 参数列表相同【 参数数据类型、参数个数、顺序】
- 父类被static、private修饰的方法、构造方法都不能被重写
相同点:方法名称一定不能修改
this 和 super 的区别
相同点:
- 都是Java中的关键字
- 只能在类的非静态方法中使用,用来访问非静态成员方法和成员变量
- 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
不同点:
this
是当前对象的引用,当前对象即调用实例方法的对象,super
相当于是子类对象中从父类继承下来部分成员的引用
2.在非静态成员方法中,this
用来访问本类的方法和属性,super
用来访问父类继承下来的方法和属性- 在构造方法中:
this(...)
用于调用本类构造方法,super(...)
用于调用父类构造方法,两种调用不能同时在构造方法中出现 - 构造方法中一定会存在
super(...)
的调用,用户没有写编译器也会增加,但是this(...)
用户不写则没有
Java的基本数据类型和引用数据类型
基本数据类型:
- 整数型:byte、short、long、int
- 浮点型:float、double
- 字符型:char
- 布尔型:boolean
没有讨论在32位下还是64位下
不管是多少位操作系统下,都是这个字节数
引用数据类型:
- String
- 数组
- 类
- 接口
- …
static关键字
- 被
static
修饰的成员变量
- 被
static
修饰的成员变量属于类的变量,储存在方法区中,随类的加载而被加载,不再属于对象,不再依赖于对象。 - 静态成员变量不属于某个对象,是类的属性,是多个对象共享的,即使创建多个对象也不会新增第二个静态成员变量。
- 在其类外使用时需要用类名进行访问,但也可以用当前对象的引用进行访问,但是这种方法不合理。
- 生命周期伴随类的一生:随类的加载而创建,随类的卸载而销毁。(当用类名进行访问类的属性时,类就会被加载,进而这些静态成员变量就会被创建)
- 方法中不能定义和使用静态成员变量,在方法当中定义的变量是局部变量,而静态的变量属于类变量。随着类的加载而被创建,而局部变量是调用该方法的时候,才创建的。所以,此时两种变量的性质是冲突的。Java当中不允许定义局部的静态变量
- 被
static
修饰的成员方法
- 静态成员方法不属于某个具体的对象,属于类的方法。
- 要用类名的方式调用,也可以用当前对象的引用进行调用,但是这样调用不合理
- 静态成员方法里面不能任何访问非静态的成员变量或成员方法,也不能出现
this
参数,因为这些都是依赖于对象的,而静态成员方法属于类的方法,不依赖于对象