导图社区 JavaOOP
初学Java 个人总结学习以便以后方便查看
编辑于2020-01-09 03:18:39JavaOOP
封装
面向对象的过程
发现类
发现类的属性
发现类的方法
面向对象和面向过程的区别
面向过程的核心是函数,以功能为核心,实现啦函数级别的代码重用
面向对象的核心是分装了属性和方法的类,以数据为中心,实现类级别的代码重用
构造方法
构造方法的名称和类名相同,没有返回值类型
构造方法的主要作用就是在创建对象时执行初始化操作
重载
方法名相同,参数列表不同,与方法返回值和方法修饰符没有任何关系
如果同一个类中包含了两个或两个以上的方法,他们的方法名相同,方法参数的个数不同或类型不同,则该方法被重载啦
重载的判断
必须在同一个类里,方法名相同,参数列表(方法参数的个数或参数的类型,顺序)不同
static修饰符
static可以用来修饰属性。方法和代码块
通常吧static修饰的属性和方法成为类属性(类变量)和类方法
类属性和类方法可以通过类名和对象名访问,实例变量和实例方法只能通过对象名访问
类方法只能访问类属性和其他类方法
类变量不能是局部变量
封装的具体步骤
修改属性的可见行来限制对属性的访问:为每个属性创建一对赋值和取值的方法,用于对这些属性的存取,在赋值方法中加入存取控制语句
封装的好处
隐藏类的实现细节:让使用者只能通过程序规定的方法访问数据;可以方便的加入存取控制语句,限制不合理的操作
private
只能在其定义的类中被访问,具有类可见行
default
成员变量和方法只能被同包里的来访问,具有包可见行
protected
可以被同包中的类访问,被同一个项目中不同包的子类访问
public
可以被同一个项目中的所有的类访问,具有项目可见行
继承
Java中只支持单继承,即每个类只能有一个直接父类
继承public和protected修饰的属性和方法,继承默认访问权限修饰的属性和方法,但子类和父类必须在同一个包里,无法继承private修饰的属性和方法,无法继承父类的构造方法
重写
必须具有相同的方法名
必须具有相同的参数列表
必须和被重写的方法的返回值类型相同
重写方法不能缩小被重写方法的访问权限
super
super必须出现在子类
可以访问父类的成员(属性,方法,构造方法)
无法访问private访问权限的属性
super必须在第一行
重写和重载的区别
重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型,访问修饰符无关
重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同,访问修饰符不能严于父类
抽象类
抽象类和抽象方法都通过abstract关键字修饰
抽象类不能是实例化
抽象方法只有声明没有实现,有抽象方法的类必须声明为抽象类
子类必须重写所有的抽象方法才能实例化,否则子类还是抽象类
抽象方法没有方法体
final
用finail修饰的类不能被继承
用finail修饰的方法不能被子类重写
用finail修饰的变量将变成常量,只能赋值一次
abstract 可以用类修饰类和方法,不能修饰属性和构造方法
final可以用来修饰类,方法和属性,不能修饰构造方法
多态
多态是同一个接口,使用不同的实例而执行不同的操作
实现多态的方法
子类到父类的转换(向上转型)
使用父类作为方法的形参
使用父类作为方法返回值
父类到子类的转换(向下转型)
instanceof通常和强制类型转换结合使用
接口
接口是一种规范的标准,可以约束类的行为,是一些方法特征的集合,但是没有方法的实现
接口中可以定义常量,不能定义变量,接口的常量必须在定义是指定初始值
接口中所有的方法都是抽象方法,接口中不能有构造方法
和抽象类一样,接口不能实例化
一个接口可以继承多个接口,但接口不能继承类
接口的实现类必须实现接口的所有方法,否则必须定义为抽象类
抽象类利于代码复用,接口利于代码维护
异常
异常就是程序运行时发生的不正常事件
异常处理
try -catch
常见的异常类型
ArithmeticException
算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException
数组下标越界
NullPointerException
尝试访问null对象成员
ClassNotFoundException
不能加载所需的类
IllegalArgumentException
方法接收到非法参数
ClassCastException
对象强制类型转换出错
NumberFormatException
数字格式转换异常,如把"abc"转换成数字
Exception
所有异常的父类
抛出异常
使用throw在程序中抛出异常
声明异常
通过throws继续声明异常
throws可以同时声明多个异常
throws在方法后声明
throw和throws的区别
作用不同:throw用于在程序中抛出异常;throws用于声明在该方法内抛出了异常
使用的位置不同:throw位于方法体内部可以单独使用;throw必须跟在方法列表后,不能单独使用
内容不同:throw抛出一个异常对象,只能是一个;throws后面跟异常类。而且可以跟多个异常类
log4j
使用步骤:
在项目中加入log4j所使用的JAR文件
创建log4j.properties文件
编写log4j.properties文件,配置日志信息
在程序中使用log4j记录日志信息
配置log4j文件
输出级别
fatal>error>info>debug
日志输出目的地
日志布局类型
转换模式
XML技术
File I/O
按流向区分
输入流
OutputStream和Writer作为基类
输出流
InputStream和Reader作为基类
按处理单元区分
字节流
字节输入流InputStream基类
字节输出流OutputStream作为基类
字符流
字符输入流Reader基类
字符输出流Writer基类
使用FileInputStream字节流读取文件步骤
引入相关的类
创建一个文件输入流对象
利用文件输入流的方法读取文本文件的数据
关闭文件输入流对象
使用OutputStream字节流写入文件步骤
引用相关的类
构造一个文件输出流对象
利用文件输出流的方法把数据写如文本文件中
关闭文件输出流
多线程
进程的特点
进程是系统运行程序的基本单位
每个进程都有自己独立的一块内存空间,一组系统资源
每个进程的内部数据和状态都是完全独立的
多线程的好处
充分利用CPU资源
简化编程模块
带来良好的用户体验
使用线程的步骤
定义一个线程
创建线程对象
启动线程
终止线程
实现多线程
继承Rhread类创建线程
定义MyThread类继承Thread类
重写run()方法,在tun()方法中实现数据输出
启动线程,调用start()方法启动线程
实现Runnable接口
定义MyRunnable类实现Runnable接口,实现Runnable类接口的run()方法
创建Myrunnable类的对象 myrunnable
将myrunnable对象作为Thread构造方法的参数传入
调用myThread对象的start方法启动线程
线程的状态
创建状态
就绪状态
运行状态
阻塞状态
死亡状态
线程暂停执行的条件
由于线程优先级,因此他不能获得CPU资源
通过sleep()方法使线程失眠
通过调用wait()方法,是线程等待
通过调用yieid()方法,使线程让出CPU资源
线程由于等待一个文件I/O事件被阻塞
线程的强制执行
join()方法使用当前线程暂停执行,等待调用该方法的线程结束后在继续执行被线程
线程的礼让
yield()方法课暂停当前线程执行,允许其他具有相同优先级的线程获取运行机会该线程处与就绪状态
集合框架
集合框架都包含三大块内容:对外的接口;接口的实现;和对集合运算的算法
接口的数据类型
Collection
Collection接口存储一组不唯一允许重复,无序的对象
Set
Set继承Collection接口,存储一组唯一不允许重复,无序的对象
List
List接口继承Collection接口,存储一组不唯一允许重复,有序的对象
Map
Map接口存储一组成对的键-值,提供Key到Value的映射;Map中key不要求有序,不允许重复,value同样不要求有序,但允许重复
Iterator
Iterator接口是负责定义访问和遍历元素的接口
List接口
ArrayList
ArrayList对数组进行啦封装,实现啦可变长的数组,他的优点在于遍历元素和随机访问元素的效率比较高
LinkedList
LinkedList采用链表存储方式,优点在于插入,删除元素是效率比较高
HashMap集合类
HashMap是Map常用的实现类,他的存储方式是哈希表:是根据key,value而直接进行访问的数据结构,是用这种方式的存储数据的优点是查询指定元素效率高
泛型集合
使用泛型在创建集合对象时进行指定集合中元素的类型,从集合中取出元素是无序进行类型转换