JAVA基础知识的总结

1. 面向对象

1.1 什么是面向对象

把整个需求按特点、功能划分,将这些存在共性的部分封装成对象,创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为。

优点 : 易维护,易复用,易扩展,有封装、继承、多态的特性,低耦合,灵活,易于维护;
缺点 : 性能比面向过程低;

1.2 特性

封装、继承、多态

封装:将不需要对外界提供的内容都隐藏起来;
将属隐藏,提供公共方法对其访问;
提高代码复用性;
提高安全性。
继承:可以使用现有类的所有功能,无需重新编写原来的类的情况下对这些功能进行拓展。
多态:允许将子类类型的指针赋值给父类类型的指针;

1.3 重载和重写

1.3.1 重写(override)

1.发生在父子类中,方法名相同,参数列表不同,方法体不同;
2.遵循"运行期绑定",根据对象的类型来调用方法;

1.3.2 重载(overload)

1.发生在一个类中,方法名相同,参数列表不同,方法体不同 (参数列表不同可以是数量不同和参数类型不同、参数顺序不同)
2.遵循"编译器绑定" ,根据参数的类型和顺序来绑定方法;

1.4 static

1.4.1 静态变量

1.属于类,存储在方法区中,只有一份;
2.常常通过类名.来访问;
3.何时用:所有对象所共享的数据;

1.4.2 静态方法

1.属于类,存储在方法区中,只有一份;
2.通常通过类名.来访问;
3.静态方法中没有隐式this的传递;
4.静态方法不能直接访问实例成员;
5.方法的操作仅与参数相关与对象无关;

1.4.3 静态块

1.属于类,在类被加载时自动加载执行,值执行一次;
2.加载/初始化静态资源(图片,音频、视频等);

1.5 接口

1.是一种引用数据类型;
2.由 interface 定义;
3.只能包含常量和抽象方法;
4.接口不能被实例化;
5.接口是需被实现/继承的,实现类:必须重写接口中的所有抽象方法;
6.一个类可以实现多个接口,用逗号分隔 ,如又集成又实现时,必须先继承后实现;
7.接口可以继承接口;

1.6 抽象类

1.由 abstract 定义;
2.包含抽象方法的类必须是抽象类 不包含抽象类方法的类也可以声明为抽象类;
3.抽象类不能被实例化;
4.抽象类是需要被继承的 继承的类需要重写所有抽象方法;
5.抽象类的意义;
封装派生类共有的属性和行为 ---- 代码的复用;
为所有派生类提供统一的类型 ---- 向上造型;

2. 线程

2.1 进程

定义: 进程是程序的一次执行过程,动态概念 ,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有自己的地址空间。
基本状态: 初始状态,就绪状态,等待状态,执行状态,终止状态;

2.2 线程

定义: 线程是cup调度和分派的基本单位,他可与同属一个进程的其它线程共享进程所拥有的全部资源;

2.3 进程与线程的区别

1.根本区别:进程是操作系统资源分配的基本单位,为线程是任务调度和执行的基本单位
2.开销方法面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;
线程可以看做轻量级的进程,同一类线程共享代码的数据空间,每个线程都有自己独立的运行栈和程序计数
器(pc),线程之间切换的开销小。
3.所处环境 : 在操作系统中可以同时运行多个进程;
同一个进程中有多个线程同时执行(通过cup调度,在每个时间片中只有一个线程执行);
4.内存分配方面: 系统在运行的时候会给每一个进程分配不同的内存空间;
线程,除了cup外,系统不会为线程分配内存(线程所使用的资源来自其所属的进程资源),线程组之
间只能共享资源。
5.包含关系: 如果一个进程内只有一个线程则称这个进程为单线程进程;
如果一个进程内有多个线程侧称这个进程为多线程进程。

2.4 生命周期

1.新建(new):新创建一个线程对象;
2.可运行状态(runnable): 线程对象创建后,其它线程调用了该对象的start()方法,该状态的线程位于可运行线程池中。等待被线程调度
选中,获取cup的使用权。
3.运行(running):可运行状态的线程获取了cup时间片,执行代码程序;
4.阻塞状态(BLOCKED):阻塞状态是指线程因为某种原因放弃了cup使用权,即让出来了cup的时间片,暂时停止运行。
直到线程进入可运行状态,才有机会再次获得cup时间片转到运行状态;
阻塞的情况分三种:
(一).等待阻塞:运行的线程执行wait()方法,jvm会把线程放入等待队列中
(二).同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则jvm会把线程放入到锁池中
(三).其它阻塞。
5.死亡状态: 线程执行结束,或因异常退出run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

3. 集合

3.1 collection

3.1.1 List

定义: 有序列表,允许存放重复的元素;

子类:LinkedList : 双向链表,增删快,查询慢(线程不安全);
ArrayList : 数组实现,查询快,增删慢 (线程不安全);

常用方法: void add(int index,Object element):添加对象element到位置index上;
boolean addAll(int index,Collection collection):在index位置后添加容器collection中所有的元素;
Object get(int index):取出下标为index位置的元素;
int indexOf(Object element):查找对象element在List的集合中第一次出现的位置;
int lastIndexOf(Object element):查找对象element在List的集合中最后一次出现的位置;
Object remove(int index):移除index位置上的元素;
ListIterator listIterator(int startIndex):返回一个ListIterator迭代器,开始位置为startIndex;
List subList(int fromIndex,int toIndex):返回一个子列表List,元素存放为从fromIndex到toIndex之前的一个元素;

3.1.2 Set

定义:无序集合,不允许存放重复的元素;允许使用null元素

子类:HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的元素是无序的;
LinkedHashSet:此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重连接列表,存储的数据是有序的;

3.2 Map

定义: 它提供了一组键值的映射,其中存储的每个对象都有一个相应的关键字(key),关键字决定了对象在Map中的存储位置;
关键字是唯一的,每个key只能映射一个value。

子类:HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
TreeMap:线程安全的,不允许null的键或值;
LinkedHashMap:对key排好序的Map;key就是TreeSet,value对应每个key;key要实现Comparable接口或TreeMap有自己的接口
Hashtable:此实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表,存储的数据是有序的。

4.string ,stringbuffer,stringbuilder的区别

String是只读字符串,它并不是基本数据类型,而是一个对象。所引用的字符串不能改变,一经定义,无法在增删改,每次对String的操作都会生成新的String对象;

在要求线程安全的情况下用StringBuffer,他的执行效率比StringBuilder要低;
在不要求线程安全的情况下用StringBulider,它的执行效率比StringBuffer要高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值