abstract(抽象)
概念
abstract的本质
- 强制子类重写方法
- 使用技巧:作为父类,可以定义一个抽象的方法,提前调用,让子类去实现 ```java //掉落的抽象方法 public abstract void lost();
public void kill(Father target){ //击败了某个对手 System.out.printIn(“击败了”+target.name); target.lost(); } ```
- 抽象方法的特别用法(不创建子类)
static(静态方法)
概念
static的基本原理
- Java程序一运行就会自动加载static静态区中所有的内容
- 只需要知道静态区的方法或者属性的地址就可以直接调用
- 静态区所有的内容都是永远存在的,不容易删除,这样会导致很多的内存被浪费
- 为了更加方便,可以直接在静态代码块中编写代码
- 由于static是在静态代码区的,那么关于堆里面的一些引用是无法使用的
- 所有静态代码块不能调用堆中的变量
- 可以使用局部变量
- 可以使用静态修饰的变量
static修饰变量
- 可以修饰成员变量(不可以修饰局部变量)
- 被修饰的成员变量是存储在静态区的内存中
- 在程序被加载的时候就会存在,不容易被删除
- 当前类创建的其他所有的变量,都会共享这个static变量
- 被static修饰的成员变量,称为全局变量(全局变量概念:可以通过类名、变量名在任一的类中使用)
static修饰内部类
- 在类中定义的类称为内部类
- 内部类可以直接使用外部类的成员变量
- 问题存在:内部类默认的情况下会保存外部类的一个this指针(引用),使得内部类可以不用传引用就可以调用外部类的成员变量
- JVM垃圾回收器:回收内存的其中一个条件就是当前内存没有其他指向
- 内部类默认有一个this指针指向外部类,从而导致内存泄漏
- 解决方案:可以使用static修饰内部类,防止内存泄漏,在使用static之后,这样就不会自动传递外部类默认的引用了,如果一定要使用外部类的成员变量,可以手动传递外部类的引用,通过软引用SoftReference进行保存
软引用保存的内存,会在这个内存长期不被使用的时候会由JVM垃圾回收器自动释放
final(最终)
概念
final修饰的类或者是变量是可以再次继承或者修改的
- 可修饰的内容:
- 类(最终类)
- 方法(最终方法)
- 变量(最终变量)
-
final修饰变量
final修饰变量只能被赋值一次
- 作用
- 防止变量被修改
- 注意:常量幻数问题
错误写法
正确
定义常量:使用final会被优化所占内存更少,尽量不要去保存对象,作用:防止代码中出现幻数
运用常量
final修饰方法
- 修饰一般方法
- 修饰构造方法
final修饰类
被final修饰的类不可以被继承