- 由于此文章是从本人笔记上截取,可能存在格式不正确的情况,尚且谅解,另外把一些链接也放了进去,还请大家仔细看。
- 面向对象概念?
(1)概述:面向对象是相对于面向过程而言的,面向过程强调的是功能,面向对象强调的是将功能封装进对象,需要的时候直接调用对象即可完成所需的功能。
强调具备功能的对象;
例如:一个公司招人,并不是因为那个人完成不了,而是因为效率比较低,所以找一些人来做所需要的功能,最后直接找负责那个功能的负责人,即可汇聚起来完成软件。
(2)思想特点:
A:是符合人们思考习惯的一种思想;
B:将复杂的事情简单化了;
C:将程序员从执行者变成了指挥者;
比如我要达到某种结果,我就寻找能帮我达到该结果的功能的对象,如我要洗衣服我就买洗衣机,
至于怎么洗我不管。
面向对象三要素
封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)
面向对象五原则
单一职责原则(SRP)
开放-封闭原则(OCP)
Liskov替换原则(LSP)
依赖倒置原则(DIP)
接口隔离原则(ISP)
面向对象六视点
复用(Reusibility)
扩展(Extensibility)
分离(Separability)
变化(Change)
简约(Simplicity)
一致(Coherance)
--------------------------------------------------------------------------------------------------------------------------------------------------------
- 抽象类和接口
抽象类特点抽象类和抽象方法必须用abstract关键字修饰格式
abstract class类名 {}
publicabstract void eat();
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
只有抽象类,其他为空代码块 ,防止被实例化
抽象类不能实例化
那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。
其实这也是多态的一种,抽象类多态。
抽象类的子类‘’
要么是抽象类
要么重写抽象类中的所有抽象方法
- ------------------------------------------------------------------------------------------------------------------------------------------------------
- 接口:·
- 接口
接口是抽象的,里面的方法跟变量都是抽象的,并且变量系统默认为 final,
方法只能被重写。
接口可以直接创建对象,目标为被继承的人类,
- ------------------------------------------------------------------------------------------------------------------------------------------------------
- 构造函数和初始化函数的执行顺序
- 静态代码块,构造代码块,构造方法的输出顺序优先级。
- 一切看父类,如果父类子类都有静态代码块,就按顺序执行静态代码块,然后执行父类的构造代码块,构造方法执行完毕之后才会执行子类的构造代码块,构造方法。
- ------------------------------------------------------------------------------------------------------------------------------------------------------
- 文件读写和序列化:
- 字节流输入流:inputStream 读
- 字节输出流:outputStream 写
- 字符流输入流:Rredter 读
- 字符流输出流:Writer 写
- ------------------------------------------------------------------------------------------------------------------------------------------------------
- 集合——List、Map、Set:
List:ArrayList、LinkedList、Vector
List:有下标,有序,值可以重复 |
|
ArrayList:有下标,存取有序,可以用for循环与iterator遍历,不安全,查询快,增删慢。 | 1.2 |
LinkedList:底层是链表,增删快,查询慢,线程不安全
Vector:线程安全,底层是数组,查询慢于ArrayList | 1.0 |
Map:HashMap,Hashtable,TreeMap
Map | 键值对,键不可以为空,值可以为空,可以根据键找到值,无序,无下标,值可以重复 |
HashMap: | 键值对,键与值都可以为空,线程不安全的,效率高 |
Hashtable | 键与值不可以为null,线程安全的,效率低 |
TreeMap | 可以根据一定的顺序进行排序 |
Set:HashSet TreeSet
Set | 无序,存的值不可以重复 |
HashSet | Set的实现类 |
TreeSet | 可以根据一定的顺序进行排序 |
------------------------------------------------------------------------------------------------------------------------------------------------------
- 访问控制:
可见/访问性 | 在同一类中 | 同一包中 | 不同包中 | 同一包子类中 | 不同包子类中 |
public | yes | yes | yes | yes | yes |
protected | yes | yes | no | yes | yes |
默认(defualt) | yes | yes | no | yes | no |
private | yes | no | no | no | no |
Protected 对同包的类和子类是公开的,可访问的,对于其他的则不可访问。
只有public defualt可以修饰类
(1) 在java中有public、protected、private三种显示的修饰符用于控制可见性,package不是显示的修饰
符,它是隐含的,即如果在类、变量等前没加显示的可见性修饰符,那它就是package级别的。如果在类的定义中没有指定package,那么java会把它放在缺省包中,一般来说这个缺省的包就是当前目录。
(2)在子类中的方法如果重载了父类的方法,那么该方法的可见级别应更底或者相同,如父类中的方法是public,那么子类中方法必须是public。
(3) 在java中,一般来说,变量成员最好是private,对它们的访问可以通过public的方法,在这些方法中可以做些控制以保证数据的一致性。这些方法名一般以get和set做为前缀。
来自<javascript:void(0)>
- ------------------------------------------------------------------------------------------------------------------------------------------------------
- 异常处理:
例如空指针异常
类型转换异常
io中当执行到最后的时候会报一个异常
数组下标越界异常
数据转换异常
异常分为运行时异常与非运行时异常。运行时异常继承了RuntimeException
非运行时异常是除RuntimeException,而且必须解决,否则不可以编译通过
------------------------------------------------------------------------------------------------------------------------------------------------------
- 泛型:
泛型的好处是在编译的时候检查
类型安全,并且所有的
强制转换都是自动和
隐式的,以提高代码的重用率,提高了集合的安全性。
Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。
注意:并且还要注意的一点是,Java中没有所谓的泛型数组一说
泛型类和泛型方法同时具备可重用性、类型安全和效率,这是非泛型类和非泛型方法无法具备的。泛型通常用与集合以及作用于集合的方法一起使用。
为了避免类型转换造成的异常。
这种转换不仅显得混乱,更可能导致类型转换异常
ClassCastException,运行时异常往往让人难以检测到。保证列表中的元素为一个特定的数据类型,这样就可以取消类型转换,减少发生错误的机会,
这也是泛型设计的初衷。
------------------------------------------------------------------------------------------------------------------------------------------------------
- Java关键字:static final Volatile synchronized
- synchronized:线程安全同步
------------------------------------------------------------------------------------------------------------------------------------------------------
- Transient this.super等
静态的优点和弊端
优点:
对对象的共享数据进行单独空间的存储,节省内存,没有必要每个对象都存储一份
可直接被类名调用
弊端:
生命周期过长,随着类的消失而消失
访问出现权限,即静态虽好但只能访问静态
Final 最终,定义变量,变量不可被改变,定义方法,方法不可被重写,定义类,类不可以被继承
- Transient :对象序列化,被修饰后的属性不参与对象的序列化
- This.super:调用本类的无参构造方法。
----------------------------------------------------------------------------------------------------------------------------------------------------------
- 多线程及线程同步:
多线程共同操作CPU,每一个线程在CPU上执行,由于线程之间会争夺CPU的使用权,得到使用权的线程会执行,但是CPU在执行一个时间片段之后会放弃线程的执行权,从而多个线程之间会再次争夺,从而出现线程安全问题。
- 解决方法是加同步代码块或者同步函数。保证每一个线程顺利执行完毕,再交换线程,但是会降低运行效率
- 设计模式:
单例模式:饿汉式,懒汉式。
保证单一对象,懒汉式有线程安全问题,可以在函数上加上Synchronized解决。
- UserDao or Userbean及serverlet
- 反射:
- 反射的使用提高了代码的重用性,在不创建对象的前提下获得该类的方法和属性,提高了代码的灵活性,降低了局限性