1.数据类型转换
1.1 从小到大
byte(1字节) , short(2字节) , char(2字节) ------ int(4字节) ----- long(8字节) ----- float(4字节) ----- double(8字节)
1.2 从大到小(强制转换)
目标数据类型 变量名 = (目标数据类型) 被转换的数据
赋值运算符 += 隐含了自动强制转换
面试题:
short s = 1
s += 1;
2.Java程序初始化的顺序
父类静态变量 > 父类静态代码块 > 子类静态变量 > 子类静态代码块 > 父类非静态变量 > 父类非静态代码块 > 父类构造函数 > 子类非静态变量 > 子类非静态代码块 > 子类构造函数
3.面向对象技术
主要特征:
- 抽象
- 继承
- 封装
- 多态
抽象类
如果一个类中有抽象方法,该类必须是抽象类
特点:
- 必须有关键字abstract修饰
- 抽象类中不一定有抽象方法
- 抽象类不能实例化
- 抽象类的子类是具体类,这个子类必须重写抽象类中的所有抽象方法
抽象类的实例化其实是靠具体的子类实现的,是多态的方式 例如Animal cat = new Cat();
小小问答题:
-
抽象类有构造方法,不能实例化,构造方法有什么用?
用于子类访问父类数据的初始化
-
一个类如果没有抽象方法,却定义为抽象类,为什么?
为了不创建对象
继承
使用关键字extends
- 子类只能继承父类的非私有成员变量和方法
- 子类和父类的成员变量同名或者成员方法具有相同的方法名,参数个数和类型时,子类会覆盖父类的不会继承
- 子类最多只能有一个父类,可使用多个接口达到多继承的目的
多态
多态表示当同一个操作作用在不同对象时,会有不同的语义
多态的实现机制:
- 方法的重载
同一类中出现方法名相同,参数列表不同的现象 - 方法的覆盖(重写)
在子类中出现与父类相同的方法声明现象
重载和覆盖有什么区别
重载(overload) | 覆盖(override) |
---|---|
重载是同一个类中方法之间的关系(水平关系) | 覆盖是子类和父类之间的关系(垂直关系) |
重载要求参数列表不同 | 覆盖要求参数列表相同 |
重载是根据调用时实参表和形参表选择方法体 | 覆盖是根据对象的类型(对象对应存储空间类型)来决定 |
多态中的转型
-
向上转型(从子到父)
Fu f = new Zi();
提高程序的扩展性
-
向下转型(从父到子)
Zi z = (Zi) f; // 要求f必须能转换为Zi
把父类的引用强制转换为子类的引用
多态的好处:
- 提高代码的维护性
- 提高代码的扩展性
4.instanceof有什么作用
是一个二元运算符,作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口,抽象类,父类)的实例
用法:如果object是class的一个实例就返回true
result = object instanceof class
5.字符串创建与存储机制
-
只有用到new总会生成新的对象
- 对于
String s1 = new String("abc")
和String s2 = new String("abc")
引用的是同一常量池的对象
- 对于
-
JVM中存在一个字符串池,其中保存很多String对象并可以被共享使用
-
对于
String s1 ="abc"
和String s2 ="abc"
引用的是同一常量池的对象 -
当创建一个字符常量时,会先在常量池中查看是否已经有相同的字符串被定义,判断依据是String类的equals(Object obj)方法的返回值
- 若已经定义直接获取对其应用,不需要创建对象
- 若没有定义,首先创建对象,然后把它加入到字符串池中,再将引用返回
-
-
String是不可变类,一旦创建好了就不能被修改
笔试题:new String(“abc”) 创建了几个对象
答:一个或者两个,如果常量池原来有"abc",只创建一个对象;若没有就创建两个对象
6.static关键字
特点:
- 随着类的加载而加载
- 优先于对象存在
- 被类的所以对象共享
- 可以通过类名调用
注意事项:
-
在静态方法中没有this对象
静态是随着类的加载而加载,this随着对象的创建而存在,静态比对象先存在
-
静态只能访问静态
静态变量与成员变量的区别:
区别 | 静态变量 | 成员变量 |
---|---|---|
所属不同 | 属于类,类变量 | 属于对象,对象变量 |
内存位置不同 | 方法区的静态区 | 堆内存 |
生命周期不同 | 随着类的加载而加载,消失而消失 | 随着对象创建而存在,消失而消失 |
调用不同 | 对象名,类名调用 | 只能对象名调用 |