一、成员变量与局部变量的区别
区别情况 | 成员变量 | 局部变量 |
---|---|---|
定义位置 | 定义在类的内部 | 定义在函数或代码块里 |
作用区别 | 描述事物共有的属性 | 提供给函数或者代码,保存数据的空间 |
初始值区别 | 在没有赋值的情况下是默认值(0,null,false...) | 不赋值不能使用 |
生存周期 | 随着对象的创建而创建,对象的销毁而销毁 【内存的堆区】 |
定义变量语句的时候出现,当函数或代码块执行完销毁 【内存的栈区】 |
二、成员方法与构造方法的区别
区别 | 成员方法 | 构造方法 |
---|---|---|
返回值区别 | 必须有返回值 | 没有返回值,不需要void |
方法名区别 | 符合规范,见名知意,动宾结构 | 名字和类名必须是一致的 |
作用区别 | 对类对象的一个行为描述 | 用来初始化对象 |
调用者区别 | 是用对象来调用的(或使用类名) | 真实使用者是JVM通过new关键字来使用 |
三、构造代码块和静态代码块的区别
区别 | 构造代码块 | 静态代码块 |
---|---|---|
作用区别 | 用于对象的初始化操作,对象创建一次就会执行一次 | 作用于类的初始化操作,只执行一次 |
优先级区别 | 比静态代码块晚,比构造方法/函数早 | 最早执行,类被载入内存时执行 |
参数返回值 | 没有名字、返回值、参数 | 没有名字、返回值、参数,有static |
四、Static(静态)方法与非静态方法的区别
1.加有static的成员、属性、方法,称类成员、属性、方法
2.没有加static的成员、属性、方法,称实例成员、属性、方法
1、静态方法不需要类实例化就可以调用,反之非静态方法需要实例化后才能调用。
2、静态方法只能访问静态成员和方法,非静态方法都可以访问;(静态对静态、非静态对非静态)
3、静态方法不能标记为override,导致派生类不能重写,但是可以访问;
4、静态成员是在第一次使用时进行初始化。非静态的成员是在创建对象的时候。
5、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
6、在调用速度上,静态方法速度一定会快点,因为非静态方法需要实例化,分配内存,但静态方法不用。
1)何时用静态方法,何时用成员方法?
如果一个方法或属性对于一个实例没有意义,不依赖new出来的实例,那么它就应该是静态的。
因为方法需要重复的调用,每次都去new一次会造成内存的开销,使用静态的方法就会一直在内存中,不需要重新new一块空间初始化数据。
四、方法重写和方法重载的区别?
比较项 | 位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 |
---|---|---|---|---|---|
方法重写 | 子类 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 |
方法重载 | 同类 | 相同 | 不相同 | 无关 | 无关 |