如何实现向下转型
- 为什么要向下转型:为了使用子类的属性和方法
- 向下转型的方法:使用强转符:()–>可能出现ClassException异常–>使用instanceof在进行向下转型前判断
if (对象名 instanceof 类名){
类名 新对象=(对象)老类名;
} - ==和equals()有何和区别?
==: 用来比较基本数据类型
equals() 用来比较引用数据类型
- 八种基本数据类型及其对相应的包装类
int Integer
char Character - 基本数据类型、包装类与String三者之间的转换
基本数据类型和包装类之间
自动装箱、自动拆箱;Integer i =10;
基本数据类型、包装类—>String :使用String类的valueOf()
String—>基本数据类型、包装类:parseXXX(String s)
谈谈你对多态性的理解
- 实现代码的通用性
- Object类中定义的public boolean equals (Object obj) {}
- 抽象类、接口的使用肯定体现了多态性(抽象类、接口不能实例化对象)
static关键字
0
单例设计模式
-
什么是单例模式:一个类下面只能创建一个对象
-
怎样实现单例:
1)饿汉式:new,一上来就造好一个对象
2)懒汉式:null,用的时候再造一个对象 -
区分饿汉式和懒汉式
饿汗式:
坏处,对象加载时间过长
好处,线程安全
懒汉式:
好处,延迟对象的创建
坏处,目前写法,线程不安全 -
单例模式的优点:只生成一个实例,减小开销
理解main()方法
- mian() 方法是程序得入口
- main() 方法也是一个普通的静态方法
- main() 方法可以作为我们与控制台交互的一种方式。(Scanner也可以)
代码块
(初始化块)
- 代码块的作用:用来初始化类、对象,执行一些操作
- 只能使用static修饰代码块
- 静态代码块
1)内部可以有输出语句
2)静态代码块随着类的加载而执行,自动执行
3)只执行一次,类加载的那一次
4)作用:初始化类的属性
5)如果一个类中定义多个静态代码块,执行顺序按代码顺序的先后执行
6)静态代码块先于非静态代码块先执行
7)静态代码块内只能调用静态属性或方法,不能调用非静态 - 非静态代码块
1)内部可以有输出语句
2)非静态代码块随着对象的创建而执行
3)每创建一个对象就执行一次
4)作用:可以在创建对象时,对对象的属性等进行初始化
5)如果一个类中定义多个代码块,执行顺序按代码顺序的先后执行
6)非静态代码块可以调用静态属性或方法,也可以调用非静态的属性或方法
final关键字
- final可以用来修饰的结构:类、方法、变量
- final可以修饰一个类–太监类,final修饰的类不能被继承,如String,System类
- final修饰方法,表明此方法不可以被重写,比如Object类中的gatClass()方法
- final用来修饰变量,此时变量相当于常量
1)final修饰属性,可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
2)final修饰局部变量,特别是final修饰形参时,表明此形参是一个常量,该形参只能在方法体内使用,而不能被赋值。 - static final可以修饰属性:全局常量