JAVASE知识梳理(一)
目录
1.JAVA的特点
1.1平台无关性
1.2面向对象和面向过程
2.面向对象语言的特点
2.1封装
2.1.1包
2.1.2访问权限修饰符
2.2继承
2.3多态
3.类和对象
3.1类的结构
3.2对象
4.方法重载和方法重写
5.无参构造方法和super()
6.数据转换和向上向下转型
7.接口和抽象类
8.继承和实现
9.大致思维图
1.JAVA的特点
java语言特点有开源、简单高效,最重要的是平台无关性和面向对象。
1.1平台无关性
程序员编写的源代码文件会被编译成标准字节码文件,再由JVM去解释执行翻译成机器码。JVM是平台相关的,不同的操作系统对应不同的JVM,通过JVM屏蔽了底层的差异,实现了java语言的“一次编译,到处运行”。
1.2面向对象和面向过程
面向过程的核心是过程,将一个问题逐步分解成一个个子问题,再去通过函数逐一去解决这些子问题,最后按照一定的顺序去调用这些函数就解决了整个问题。
面向对象的核心是类,将一个问题中参与的对象提取出来进行分类,在各自定义的类里面完成相应的功能和细节,提高了代码的扩展性和复用性。
需要注意的是,面向对象在实现具体细节的时候也会用到面向过程的思想,两者不是完全无关的。
2.面向对象语言的特点
注意和java语言的特点进行区分。java语言的特点是面向对象,而面向对象语言的特点是封装、继承、多态。
2.1封装
封装实际就是通过访问权限修饰符隐藏类内部的实现细节,再通过方法去控制外部对这些信息的访问和操作。最经典的一个例子就是私有属性搭配公有化方法。
可以提高数据的安全性,对于一些敏感的数据起到保护作用,有利于代码的维护。
封装需要储备的知识点有:包、访问权限修饰符。
2.1.1包
包相当于一个文件夹,是一种用于组织和管理类和接口的命名空间机制。与包相关的关键字有package和import。
import用于导入外包类,package用于声明当前类所属的包名。
包名.类名就可以区分不同包下的相同类名
2.1.2访问权限修饰符
权限由大到小分别是public,protected,默认(即不添加),private。其中类的访问权限修饰符只能是public和默认。其余两个只能修饰类中的属性和方法。
public可被任意包任意类访问;protected可被同包类或者不同包下的该类的子类访问;默认只能被同包类访问;private只能被本类访问。
为什么不能用protected和private去修饰类呢?
首先private不能修饰类很好理解,假如一个类是私有的,这个类无法被任何代码访问,那就毫无意义。protected和默认权限相比,就是可以通过不同包下的子类去访问。而其他类要继承该类就得先能访问到,如果一个类用protected去修饰,那么不同包的类无法访问它,也就无法继承它,所以用默认权限足矣。
2.2继承
继承是指在已有的类中派生出新的类,新的类不仅拥有原先的属性和行为,还可以扩展新的功能。
继承相关的关键字有:extends,super。 extends用来建立父子类的关系,super可以访问父类成员。
单继承特性:即一个子类只能直接继承一个父类。
传递性:即一个类可以继承,也可以被继承。子类不仅拥有父类的属性和行为,还间接拥有父类所继承的类的属性和行为。
代码扩展性:子类仲可以自己扩展新功能并不影响其他类。
2.3多态
多态是指同一事务在不同时刻表现出不同的状态。多态的前提条件是类有继承和方法重写。然后通过父类引用子类对象实现。
多态相关的关键字:instanceof用来判断对象是否属于某个类。
3.类和对象
类是一种抽象的模版,是共有的属性和行为的集合。不能被直接使用,可以实例化出具体的对象。
3.1类的结构
类的结构有:成员变量,成员方法,构造方法,内部类,代码块。
其中成员变量就是事物的属性;成员方法就是事物的行为,即可以做什么;构造方法就是在初始化对象,对对象中的成员变量进行赋值,构造方法不需要返回值也不用加void;代码块即一段没有名称的代码;内部类就是在类中声明的类。
可能会用到关键字static,this,其中static可以实现直接通过类名去调用成员。static不能修饰构造方法,被static修饰的成员是静态的,在类加载的时候加载,并且所有对象共享一份,且静态成员无法访问非静态成员。代码块就只有静态代码块和实例代码块,两者区别就是静态代码块在类加载时执行,而实例代码块在每次创建对象时都会执行,且优先于构造方法执行。
类加载发生在第一次使用一个类的时候,比如首次创建这个类的对象,首次访问该类的静态成员。
关键字this可以解决成员变量和局部变量同名、方法之间互相依赖(即在一个方法中调用当前类中的另一个方法)的问题,this表示当前对象,即哪个对象在执行这段代码,this就是这个对象。
显然static不能与对象依赖有关的建立联系,如static不能修饰构造方法,或者在static修饰的成员里使用this。原因就是类加载在创建对象之前,与对象依赖有关的发生在创建对象之后,两者加载顺序矛盾。
3.2对象
对象引用:即声明一个类型的变量,再通过new+该类的构造方法,开辟一片内存空间创建一个对象,将对象的地址赋给变量,通过变量名去访问这片空间。
创建对象时会将类的非静态成员变量复制一份给对象,方法不会被复制,对象通过存储的类元数据指针去间接访问方法。
4.方法重载和方法重写
编译器通过方法名和方法参数来确定调用哪个方法。当方法同名时便根据参数的不同来区分方法,此为方法重载。其中参数的不同可以分为三种:数量不同,类型不同,顺序不同。
而方法重写是在继承里面体现的,当父类的方法无法满足子类的需求时可以进行方法重写。父类的构造方法不能重写。因为重写要求方法体结构体一样,这和构造方法的规范冲突。与方法重写有关的标签是@override,用来声明随后的方法是重写的,可以检测出不符合重写的规范的错误。关键字abstract,可以定义抽象类和抽象方法,在子类中对抽象方法进行重写,否则子类也为抽象类。
5.无参构造方法和super()
两者都是默认隐式存在的,但一个属于本类,一个属于子类中访问父类。当类中定义有参构造方法后,就要将无参构造方法显示定义出来,否则无法使用。 super()是在子类的构造方法里首先访问父类的无参构造方法,必须在子类构造方法里的第一行。
6.数据转换和向上向下转型
多态中的向上向下转型和基本数据类型的转换逻辑基本一致。 向上转型对应默认转换,向下转型对应强制转换。
7.接口和抽象类
接口和抽象类都是抽象的,且都不能实例化对象。但是接口是彻底的抽象,主要强调必须做什么,是一种行为规范。抽象类是类族的公共基类,仍具有普通类的其他功能,例如构造方法,定义具体的方法等都可以。
8.继承和实现
类和类、接口和接口之间可以继承。但是类和类之间只能单继承,而接口和接口之间可以多继承。
类和接口之间的关系为实现。一个类可以直接实现多个接口。