1.Java的基础类型
- 基本数据类型
基本数据类型 | 默认值 | 包装类 |
---|---|---|
boolean | false | Boolean |
int | 0 | Integer |
char | 0 | Character |
byte | 0 | Byte |
long | 0 | Long |
short | 0 | Short |
string | null | String |
float | 0 | Float |
double | 0.0 | Double |
2.引用数据类型
数组、类、接口、枚举等。
3.思维导图
![](https://i-blog.csdnimg.cn/direct/729121b20e18478883cf684dbf10e1bd.png)
4.异常
受检异常和非受检异常
-
编译时期异常(即checked异常、受检异常):在代码编译阶段,编译器就能明确警示当前代码可能发生(不是一定发生)xx异常,并督促程序员提前编写处理它的代码。如果程序员不听话,没有编写对应的异常处理代码,则编译器就会发威,直接判定编译失败,从而程序无法执行。通常,这类异常的发生不是由程序员的代码引起的,或者不是靠加简单判断就可以避免的,例如:FileNotFoundException(文件找不到异常)。
-
运行时期异常(即runtime异常、unchecked非受检异常):即在代码编译阶段,编译器完全不做任何检查,无论该异常是否会发生,编译器都不给出任何提示。只有等代码运行起来并确实发生了xx异常,它才能被发现。通常,这类异常是由程序员的代码编写不当引起的,只要稍加判断,或者细心检查就可以避免的。例如:ArrayIndexOutOfBoundsException数组下标越界异常,ClassCastException类型转换异常。
5.封装、继承、多态
1. 封装的思想
隐藏对象内部的复杂性,只对外公开简单和可控的访问方式,从而提高系统的可扩展性、可维护性。通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
面向对象的开发原则要遵循“高内聚、低耦合”,而“高内聚,低耦合”的体现之一:
-
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
-
低耦合:仅对外暴露少量的方法用于使用
2. 继承
继承描述的是事物之间的所属关系,多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只需要和抽取出来的类构成某种关系.
继承的好处
-
提高代码的复用性。
-
提高代码的扩展性。
-
表示类与类之间的关系
继承的特点
1.子类会继承父类所有的实例变量和实例方法
从类的定义来看,类是一类具有相同特性的事物的抽象描述。父类是所有子类共同特征的抽象描述。而实例变量和实例方法就是事物的特征,那么父类中声明的实例变量和实例方法代表子类事物也有这个特征。
-
当子类对象被创建时,在堆中给对象申请内存时,就要看子类和父类都声明了什么实例变量,这些实例变量都要分配内存。
-
当子类对象调用方法时,编译器会先在子类模板中看该类是否有这个方法,如果没找到,会看它的父类甚至父类的父类是否声明了这个方法,遵循从下往上找的顺序,找到了就停止,一直到根父类都没有找到,就会报编译错误。
所以继承意味着子类的对象除了看子类的类模板还要看父类的类模板。
2.Java只支持单继承,不支持多重继承
public class A{} class B extends A{} //一个类只能有一个父类,不可以有多个直接父类。 class C extends B{} //ok class C extends A,B... //error
3.Java支持多层继承(继承体系)
class A{} class B extends A{} class C extends B{}
顶层父类是Object类。所有的类默认继承Object,作为父类。
4.一个父类可以同时拥有多个子类
class A{} class B extends A{} class D extends A{} class E extends A{}
3.多态
多态是继封装、继承之后,面向对象的第三大特性。
生活中,比如求面积的功能,圆、矩形、三角形实现起来是不一样的。跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。那么此时就会出现各种子类的类型。
向上转型与向下转型
首先,一个对象在new的时候创建是哪个类型的对象,它从头至尾都不会变。即这个对象的运行时类型,本质的类型用于不会变。但是,把这个对象赋值给不同类型的变量时,这些变量的编译时类型却不同。
这个和基本数据类型的转换是不同的。基本数据类型是把数据值copy了一份,相当于有两种数据类型的值。而对象的赋值不会产生两个对象。
1、为什么要类型转换呢?
因为多态,就一定会有把子类对象赋值给父类变量的时候,这个时候,在编译期间,就会出现类型转换的现象。
但是,使用父类变量接收了子类对象之后,我们就不能调用子类拥有,而父类没有的方法了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做类型转换,使得编译通过。
-
向上转型:当左边的变量的类型(父类) > 右边对象/变量的类型(子类),我们就称为向上转型
-
此时,编译时按照左边变量的类型处理,就只能调用父类中有的变量和方法,不能调用子类特有的变量和方法了
-
但是,运行时,仍然是对象本身的类型,所以执行的方法是子类重写的方法体。
-
此时,一定是安全的,而且也是自动完成的
-
-
向下转型:当左边的变量的类型(子类)<右边对象/变量的编译时类型(父类),我们就称为向下转型
-
此时,编译时按照左边变量的类型处理,就可以调用子类特有的变量和方法了
-
但是,运行时,仍然是对象本身的类型
-
不是所有通过编译的向下转型都是正确的,可能会发生ClassCastException,为了安全,可以通过isInstanceof关键字进行判断
-
2、如何向上转型与向下转型
向上转型:自动完成
向下转型:(子类类型)父类变量
6.总结感受
岂不闻光阴如快马加鞭,岁月如落花流水,常常感叹逝者如斯夫,不舍昼夜,人生苦短,能与人言者不过二三,不如意之事常八九。人生的围城不在外而在心中,万事万物因心而动,心态不同,看到的风景就不同,对于秋天有人高歌我言秋日成春潮,也有人说无边落木萧萧下,心既是万物,心老则万物枯萎,心平能愈三千疾,心静可通万事理。
人与人之间的路是不同的,走在自己想走的人生路上,哪怕风雨再大,哪怕路途荆棘丛生,也不会后悔。不负年少,不负人间一游!
------------------------------------------------------------------------------------------致枯燥乏味的自己