一、基本概念
0、面向对象和面向过程的区别,介绍一下面向函数编程。
- 面向对象:是对数据和行为进行抽象,不关注细节。特点包括抽象、封装、多态、集成。 开发效率高、鲁棒性强、较高可维护性。
- 面向过程: 以事件为中心的开发方法,按照功能划分模块,
- 函数式编程:关心数据的映射。特点:并发编程中不需要考虑线程安全问题,只依赖输入不依赖于上下文, 使得每个函数都是一个高度独立的单元, 便于进行单元测试和除错。
- 命令式编程:关心解决问题的步骤。
1、组合的定义、多态实现机制。
组合是在新类中创建已有类的对象,利用已有类的功能。
多态实现靠重载(overload)和(override,也叫覆盖)。
重载:
在同一个类中实现。重载的不同是根据参数来判断,比如参数的顺序不同、类型不同、个数不同。
重写:(三同一大一小原则)
指父类与子类的关系,子类重写父类的方法。三同指方法名相同、参数的类型和个数相同、返回值相同。
一大指子类的修饰类型要≥父类修饰类型,一小原则指子类抛出的异常类型要≤父类的异常类型。
2、Java 优点,Java 和C++异同。
Java 优点:平台无关性,纯面向对象编程语言、提供了内置库类,对web应用开发的支持,有较好的安全性和健壮性、去除了C++中难以理解的特性。
相同:面向对象思想、可重用性好(继承、组合)
不同 | Java | c++ |
---|---|---|
语言 | 解释性语言,编译成字节码,由JVM解释执行 | 编译性语言,经编译和链接形成可运行的二进制代码 |
跨平台 | 可以 | 不可以 |
指针 | 没有 | 有 |
内存分配 | gc | 程序员自身管理 |
强制转换 | 支持 | 不支持 |
3、public static void main(String[] args)介绍,如何在main前输出消息。
Java程序的入口,public static 可以交换顺序,main前可以用final 、abstract、synchronized修饰。而且一个类中可以有多个main方法,但是只能有一个和类名相同且是public的main方法。在main前输出消息可以用static静态块。
4、Java初始化顺序
父类优先于子类
静态对象(变量)优先于非静态对象(变量)
成员变量定义顺序进行初始化
静态变量 —> 静态代码块 —>非静态代码块—> 构造函数
5、Java作用域
作用域是由{}决定的。
– | 当前类 | 同一package | 子类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
6、构造函数
- 在对象实例化之前初始化对象的成员变量。
- 与类同名,不能有返回值,不能被继承(子类只能调用super显示调用父类构造函数)、不能被覆盖。
- 可以有多个构造函数,参数大于等于0个。
- 伴随new一起调用,由程序调用。 没有写构造函数,系统会默认生成一个。
7、深复制(clone)、浅复制
因为new 是返回的一个指针的引用,“=”
在基本数据类型是采用值传递而在其他类型中是引用传递。深复制一般包括3步:1)继承cloneable标识接口(没有任何方法声明的接口);2)重写clone()方法并在方法内写super.clone();3)浅复制的引用指向原型对象新的克隆体。
- 深复制:复制值,连指向也一起复制。
- 浅复制:复制值,指向不复制。
8、反射机制
允许程序在运行过程中自我检查,对其内部成员进行操作。在运行时动态的创建类的对象。
如何获取到类:
1)Class.forName();
2)类名.class
3)实例.getClass()
9、Package
避免命名冲突,可以按功能分类。
10、抽象类、接口
11、创建对象方式
1)new 2)Clone 3)反序列化4)反射
12、获取父类名称
getClass().getName();
13、内部类有哪些
静态内部类、成员内部类、局部内部类(类->函数->内部类)、匿名内部类(不使用关键字class、extends、implements修饰,只能继承or实现其他接口)。
二、关键字
1、命名规则
由字母、数字、下划线_和$组成去,且数字不能开头。区分大小写。
2、break、continue、return区别
break 跳出当前循环不在执行;continue跳出当前循环继续执行;return 直接从一个方法中返回。
3、final、finally、finalize区别
- final可以修饰类名、方法、变量,声明后引用不可变。类是不能继承和覆盖。
- finally是放在try catch语句中最后执行的,这里的return语句会覆盖掉其他的。进入try之前出现异常或者try中强制退出,也不会执行finally。
- finalize是gc中的,在垃圾回收时会提前调用。
4、assert
用于测试,用的少,不过多的介绍。
5、static
声明某个对象或者方法不是和对象绑定在一起。
为特定的对象分配单一的存储空间。
声明静态块
被static声明的方法不能用this,super
用于创建单例模式
6、switch
分支多的时候建议用这个switch,少的话还是if else.Java7之后String 支持char类型的。实现原理用了hashCode
7、instanceof
判断一个引用类型的变量指向的对象是不是一个类的实例。
8、Stricfp
精确浮点数
三、基本类型和运算
1、基本数据类型
byte 、short、char、int、long、float、double。
boolean(和谁都无法转换)