Java大汇总(上)

115 阅读4分钟

面向对象三大特性

继承:一般类只能单继承,内部类实现多继承,接口可以多继承

封装:访问权限控制public > protected > 包 > private 内部类也是一种封装

多态:编译时多态,体现在向上转型和向下转型,通过引用类型判断调用哪个方法(静态分派)。 运行时多态,体现在同名函数通过不同参数实现多种方法(动态分派)。

基本数据类型

  1. 基本类型位数,自动装箱,常量池。

  2. 例如byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256,也就是2的八次方。 32位和64位机器的int是4个字节也就是32位,char是1个字节就是8位,float是4个字节,double是8个字节,long是8个字节。

  3. 基本数据类型的包装类只在数字范围-128到127中用到常量池,会自动拆箱装箱,其余数字范围的包装类则会新建实例。

String及包装类

  1. String类型是final类型,在堆中分配空间后内存地址不可变。

  2. 底层是final修饰的char[]数组,数组的内存地址同样不可变。 3. StringBuffer和StringBuilder底层是可变的char[]数组,继承父类AbstractStringBuilder的各种成员和方法,实际上的操作都是由父类方法来完成的。

final关键字

  1. final修饰基本数据类型保证不可变

  2. final修饰引用保证引用不能指向别的对象,否则会报错。

  3. final修饰类,类的实例分配空间后地址不可变,子类不能重写所有父类方法。因此在cglib动态代理中,不能为一个类的final修饰的函数做代理,因为cglib要将被代理的类设置为父类,然后再生成字节码。 final修饰方法,子类不能重写该方法。

抽象类和接口

  1. 抽象类可以有方法实现。抽象类可以有非final成员变量。抽象方法要用abstract修饰。抽象类可以有构造方法,但是只能由子类进行实例化。

  2. 接口可以用extends加多个接口实现多继承。接口只能有public final类型的成员变量。接口只能有抽象方法,不能有方法体、接口不能实例化,但是可以作为引用类型。

代码块和加载顺序

假设该类是第一次进行实例化。那么有如下加载顺序,静态总是比非静态优先,从早到晚的顺序是:

  1. 静态代码块 和 静态成员变量的顺序根据代码位置前后来决定。

  2. 代码块和成员变量的顺序也根据代码位置来决定

  3. 最后才调用构造方法构造方法

包、内部类、外部类

  1. Java项目一般从src目录开始有com...A.java这样的目录结构。这就是包结构。所以一般编译后的结构是跟包结构一模一样的,这样的结构保证了import时能找到正确的class引用包访问权限就是指同包下的类可见。 import 一般加上全路径,并且使用.*时只包含当前目录的所有类文件,不包括子目录。

  2. 外部类只有public和default两种修饰,要么全局可访问,要么包内可访问。

  3. 内部类可以有全部访问权限,因为它的概念就是一个成员变量,所以访问权限设置与一般的成员变量相同。 非静态内部类是外部类的一个成员变量,只跟外部类的实例有关。 静态内部类是独立于外部类存在的一个类,与外部类实例无关,可以通过外部类.内部类直接获取Class类型。

为方便大家学习,可以跟着 适合0基础学习Java的视频教学 这个视频来学习Java哦。