Java day08

abstract关键字

abstract修饰的类叫做抽象类,修饰的方法叫做抽象方法。

抽象方法

抽象方法不提供方法体。

抽象类

抽象类不能实例化,必须通过子类继承以后,使用向上造型进行实例化。
子类继承以后需要重写所有的抽象方法,除非子类也是抽象类。

  1. 抽象类中可以写构造方法码?可以。
    虽然抽象类不能实例化,但是在底层JVM会使用C语言创建一个虚拟的对象给子类使用。
  2. 抽象类中可以定义普通方法吗?可以。
  3. 抽象类能被final修饰吗?不能
    因为抽象类必须被重写。
  4. 抽象类能被private修饰吗?不能
    因为抽象类必须被重写。
  5. 抽象方法能被private修饰吗?不能
  6. 抽象方法可以被static修饰吗?不能
    因为抽象类必须被重写。
  7. 抽象方法可以被final修饰吗?不能
    因为抽象类必须被继承。
  8. 抽象方法可以重载吗?可以
    如果抽象方法使用的是默认权限修饰符,那么要求父子类同包。
    抽象方法只能存在于抽象类中
    如果一个类存在抽象类,那么这个类一定是抽象类。

final关键字

final可以修饰变量、类、方法。
final修饰的变量称之为常量,定义之后不能修改。
final修饰的是引用数据类型时要保证地址不改变。
总结:对于基本数据类型来说,实际值不能改变,对于引用数据类型而言,地址值不能改变。
Java中,常量一般全部大写表示。
final修饰的成员变量要求在对象创建之前完成赋值。
final修饰成员变量的三种方法:

  1. 直接赋值
final int i = 10;
  1. 在代码块中赋值
{
	i = 10;
}
  1. 在构造方法中赋值
public A(){
	i = 10;
}

final修饰的方法称之为最终方法,不能被重写 /隐藏。可以被继承,可以重载。
final修饰的类称之为最终类不能被继承。

interface接口

在接口的定义的变量默认使用public static final 数据类型 变量名 = 值;
接口就是功能的集合。接口在编译之后会产生.class文件,但是接口不属于类。
接口只描述所应该具备的方法,并没有具体实现。
在JDK1.8之前,接口中所有的方法都是抽象方法,从JDK1.8开始接口中也可以有实体方法
接口不可以直接实例化
接口中的抽象方法,一定是被public abstract修饰的。所以可以省略public abstract
接口中无法定义普通成员变量,必须使用的时候只能用public static final修饰(常量)
接口的使用:向上造型
类和接口之间用的是implements关键字来产生联系的。接口的实现类如果只实现了部分方法,那么实现类需要变成抽象类,然后再找子类实现抽象方法
接口不能有构造方法 interfaces cannot have constructor
在Java中,类和接口之间是多实现,用,隔开
在Java中,接口和接口之间是多继承,用,隔开

面试题:为什么编译期间,任何一个接口都可以强转?

在Java中,因为接口之间是多继承以及类和接口之间是多实现
所以形成的是一个网状结构
在网状结构中,不容易确定两个节点之间的关系
所以为了提高编译效率
Java在编译期间放弃检查
也就意味着,在编译期间,任何一个接口都可以被强转

package包

声明包用的是package–>一个java文件中只能有一个package语句,而且这个package必须放在整个java文件的有效代码的首行
导入包使用的是import

内部类

分为:局部(方法)内部类、成员内部类、静态内部类、匿名内部类。
使用成员内部类格式 外部类.内部类 变量名 = new 外部类().new 内部类();
使用静态内部类格式 外部类.内部类 变量名 = new 外部类.内部类();
在其他类的方法中调用内部类的静态方法格式 外部类.内部类.静态方法名(参数);

匿名内部类 -->没有名字的内部类 ()后面的{}代表匿名内部类

A a = new A(){
      public void m(){
      }
};

匿名内部类本质上就是实现了对应的接口或者继承了对应的父类
这也就意味着任何一个接口都可以存在匿名内部类形式,任何一个可以被继承的类也可以存在匿名内部类的形式
final修饰的类不能使用匿名内部类,因为无法被继承

静态内部类 -->使用static修饰的内部类

不能使用外部类的非静态变量和非静态方法
可以使用外部类的静态变量和静态方法
可以定义一切的属性和方法

成员内部类

可以使用外部类的一切属性和方法
可以定义非静态变量和非静态方法
不可以定义静态变量和静态方法
可以定义静态常量
成员内部类可以使用一切修饰类的修饰符

方法内部类/局部内部类

可以使用外部类中的一切属性和方法
如果内部类和外部类具有同名的变量,那么采用就近原则
可以定义非静态变量和非静态方法
不可以定义静态变量和静态方法
局部内部类只能被abstract/final的其中一个修饰

垃圾回收

CG回收过程

在这里插入图片描述

堆内存划分

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值