JAVA高级总结
一、集合框架和泛型
1.集合框架
1) 定义:JAVA API的一部分,用于处理一组长度可变得数据。
2) 和数组的区别:
数组的长度不可变,但是集合框架处理的数据长度可以动态变化。
3) 结构:
接口:Collection、List、Set、Map、Iterator
类:ArrayList、LinkedList、HashSet、HashMap、Collections
4) 层次关系
5) 特点:
n List:存储有序、不唯一的元素。
² ArrayList:以数组的形式实现;遍历和查找元素很快;
² LinkedList:以链表的方式实现;添加和删除元素时很快;
n Set:存储无序、唯一的元素。
n Map:以键值对的形式存储数据。
6) ArrayList和LinkedList的区别
ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。
LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。
7) 常用的方法:
n Collection接口
add()、remove()、iterator()、size()、clear()、contains()、isEmpty()
n ArrayList类
get()
n LinkedList类
addFirst()、addLast()、removeFirst()、removeLast()、getFirst()、getLast()
n HashSet类
Add()、remove()、clear()、没有get方法
n HashMap类
put(key, value)、remove(key)、get(key)、keySet()、containsKey()、containsValue()
n Iterator接口(迭代器)
hasNext()、next()
8) 注意:
上述类在处理数据时,均是以Object类型进行处理的。这样就需要频繁的数据类型转换(向上转型、向下转型)。同时,所有的数据类型均直接或间接继承自Object,所以任何类型的数据均可以添加到集合中,这样就很容易出现错误,不安全。
2.泛型
定义:
层次结构:
集合框架中所有的接口和类均提供了对应的泛型类型(泛型接口、泛型类)。
List<Student> list = new ArrayList<Student>();
只能向list中添加Student类型的数据,不能添加其他类型的数据。
泛型集合在添加和遍历元素时,不需要频繁的进行类型转换。
二、包装类和实用类
1.枚举
定义 : 一组固定的常量。
语法
访问修饰符 enum 枚举名{ 常量一, 常量二, … … } |
用法
声明枚举变量并赋值:Season season = Season.Spring;
switch:
switch(枚举变量){ 常量一: … … Break; 常量二: … … Break; } switch(season){ case Spring: ... break; case Summer: ... break; case Autumn: ... break; case Winter: ... break; } |
2.包装类
1) 定义:
所有的基本数据类型,均提供了对应的引用类型。
n 整形:byte -> Byte、short -> Short、int -> Integer、long -> Long
n 浮点型:float -> Float、double -> Double
n 字符型:char -> Character
n 布尔型:boolean -> Boolean
n Byte、Short、Integer、Long、Float、Double均继承自:Number类。
2) 装箱和拆箱
n 装箱:将基本数据类型转换为引用数据类型。
Integer a = new Integer(5);
n 拆箱:将引用数据类型转换为基本数据类型。
int a = new Integer(“5”);
3) 相互转换
n 基本类型转引用类型
Integer a = new Integer(“123”);
Integer b = new Integer(123);
Double c = new Double(“12.5”);
Double d = new Double(12.5);
Boolean e = new Boolean(“true”);
Boolean f = new Boolean(true);
n 引用类型转基本类型
int a = new Integer(“123”);
int b = new Integer(“123”).valueOf();
n 将字符串转换为基本数据类型
int a = Integer.parseInt(“123”);
double b = Double.parseDouble(“12.5”);
short c = Short.parseShort(“12”);
3.实用类
1) Random类
用于生成随机数字,所有生成的数字,都是等概率的。
n nextInt():生成的值介于int的所有取值范围(-231 ~ 231-1)
n nextInt(int value):生成的值介于0 ~ value之间的值(包含0,不包含value)。
2) Math类
用于常规的数学运算。
n random():生成介于0-1之间的随机小数(包括0,不包括1)。
n abs(double):取绝对值。
n pow(double, double):计算m的n次方
n sqrt(double):计算m的开方。
n floor(double):获取比m小的最大整数值。
n ceil(double):获取比m大的最小整数值。
n round():四舍五入取整。
3) String类
n indexOf():获取一个字符串在另一个字符串中的索引位置(一个字符串是否包含另一个字符串)。
n lastIndexOf():获取一个字符串在另一个字符串中的最后一次索引位置。
n substring():从一个字符串的指定位置取子串。
n concat():将两个字符串拼接成一个字符串。
n equals():比较两个字符串的内容是否相同(注意和==的区别)。
n toLowerCase():将字符串转换为小写字符。
n toUpperCase():将字符串转换为大写字符。
n equalsIgnoreCase():比较两个字符串是否相同(不区分大小写)。
4) StringBuilder和StringBuffer类
当需要对字符串进行频繁的拼接操作时,需要使用StringBuilder或者StringBuffer。
5) Date类和SimpleDateFormat类
Date类用于处理日期对象;SimpleDateFormat用于对日期进行格式化操作。
注意:Date类中提供的很多方法,都是过时方法,推荐使用Calendar类提供的方法。
不论是通过Date还是通过Calender,获取月份时,都是介于0-11之间。
//获取系统当前时间 Date date = new Date(); //格式化时间 yyyy-MM-dd HH:mm:ss SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); String text = dateFormat.format(date); //知道一个日期字符串,如果将其转换为时间对象 String time = “2016-10-05 12:10:05”; Date date2 = dateFormat.parse(time); |
6) Calendar类
//创建Calendar类对象 Calender cal = Calendar.getInstance(); //获取年份 Int year = cal.get(Calendar.YEAR); //获取月份 Int month = cal.get(Calendar.MONTH); //Calendar.Date、Calendar.HOUR、Calendar.MINITE、Calendar.SECOND //添加时间段(年、月、日、时、分、秒) Cal.add(Calender.YEAR, 1);//加1年 cal.add(Calender.Hour, -2);//减2小时 //Calcender转换为Date Date date = cal.getTime(); |
三、输入/输出(I/O)
IO操作相关的包:java.io
1.File类
功能:实现对文件和目录的常规操作。
方法名 |
作用 |
exits() |
判断文件或目录是否存在 |
Delete() |
删除文件或目录 |
mkDir() |
创建目录 |
list() |
获取子目录和文件 |
2.流的分类
² 根据方向分类:
输入:InputStream、Reader
输出:OutputStream、Writer
² 根据流操作的数据单位分类:
字节流:InputStream、OutputStream
字符流:Reader、Writer
² 实现类
(抽)InputStream |
(抽)OutputStream |
(抽)Reader |
(抽)Writer |
FileInputStream |
FileOutputStream |
InputStreamReader |
OutputStreamWriter |
DataInputStream |
DataOutputStream |
FileReader |
FileWriter |
ObjectInputStream |
ObjectOutputStream |
BufferedReader |
BufferedWriter |
3.序列化和反序列化
序列化是指将内存中对象的状态转换为可以存储或传输的格式的过程。
四、多线程
1.进程和线程的区别
n 计算机中一个正在运行的可执行程序的实例就是进程。一个进程可以包含多个线程。单个线程用于完成一个任务,而同时创建多个线程来完成多项任务,便是多线程。
n 二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。
n 用一个比喻来说,如果一个家庭代表一个进程,在家庭内部,各个成员就是线程,家庭中的每个成员都有义务对家庭的财富进行积累,同时也有权利对家庭财富进行消费,当面对一个任务的时候,家庭也可以派出几个成员来协同完成,而家庭之外的人则没有办法直接消费不属于自己家庭的财产。
2.Java中定义线程的2种方式
n 继承Thread类
n 实现runnable接口
3.线程的优先级
4.线程的生命周期
5.线程的同步
6.线程常用方法
五、网络编程
1.什么是TCP和UDP,他们的差异是什么?
n TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接(信任连接)。
n UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
n UDP适用于一次传送少量数据、对可靠性要求不高的应用环境,但是传输速度快。
n TCP适用于一次传送大量数据、对可靠性要求较高的环境,数据传输速度慢。
六、XML操作
1.XML基本概念
XML即可扩展标记语言。一般用来存储数据和在网络间传输数据。
XML很像超文本标记语言(HTML);但它又未规定固有的标记有哪些。
XML使用规范大致包括:
n 每个XML文件的第一行为XML声明,定义了XML版本和编码等信息。
n 一个XML文档有且仅有一个根节点。
n XML对大小写敏感,区分大小写。
n 每个XML标记必须包含开始标记和结束标记。
n XML的标记必须正确的嵌套。
2.XML 与 HTML 的主要区别
n XML用于存储和传输数据,而HTML则用于显示数据。
n XML区分大小写字母,而HTML不区分。
n HTML的开始标记可以没有对应的结束标记,而XML的开始标记必须要有结束标记相对应。
n 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
n 在HTML中可以有不带值的属性名。但是在XML中,所有的属性都必须带有相应的值。
n XML中的标记可由用户自定义,而HTML则约定了可以使用哪些标记。
3.JAVA中操作XML有哪些技术
n DOM方式
DOM 是 W3C 处理 XML 的标准 API,它是许多其它与 XML 处理相关的标准的基础。它根据XML文档中节点间的关系进行操作,最大的问题就是需要将整个XML文档一次性加载到内存中。
n SAX
SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题。其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求。
n Dom4j
Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用Java集合框架实现,并完全支持DOM,SAX和JAXP。
4.什么是xpath
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
表达式 |
说明 |
示例 |
nodename |
选取此节点的所有子节点 |
bookstore() |
/ |
从根节点选取 |
/bookstore(选取根元素bookstore) |
// |
从匹配的当前节点选择节点,不考虑位置 |
//book选取所有book子元素,不管其位置 |
. |
选取当前节点 |
|
.. |
选取当前节点的父节点 |
|
@ |
选取属性 |
//@lang选取名为lang的所有属性 |
JAVA高级总结的更多相关文章
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- Java高级之线程同步
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于实现多线程的意义,"从业四年看并发"一文已经讲述,而本篇主要讲一下常用的设计 ...
- Java高级之类结构的认识
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Java体系包括,各种版本的虚拟机,可执行文件,各种第三方类库,Java API类库,Java语言 ...
- Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Java高级软件工程师面试考纲
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- 黑马程序员——Java高级应用(一)
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 这月薪过万的Java高级学习资料,难得一遇的干货,不下载真可惜了!
大家有没有想我呢 不管你们想不想我 我挺想你们的 通过昨天我不断的 死气白咧各种说好话 最终 要到了Java学科的Java集合学习资料 里面包含视频+资料+源码 堂兄也有一个愿望 希望你们月薪过万后 ...
随机推荐
- Spring的 classpath 通配符加载配置文件
http://www.cnblogs.com/taven/archive/2012/10/24/2737556.html classpath:app-Beans.xml 说明:无通配符,必须完全匹配 ...
- 负载均衡软件LVS分析四(测试)
一.启动LVS集群服务LVS负载均衡管理和使用有两种方式,一种是以ipvsadm命令行脚步与ldirectord监控方式,一种是以Piranha工具进行管理和使用.下面分别介绍. 1.利用ipvsad ...
- Js中Array数组学习总结
第一次写博客...有点方... 小白一枚(是真的小白),自学前端,下面来说说我在学习过程中总结的一些数组操作,如果说哪有错误,请各位大神多多指出,小的虚心接受. 引用类型分为Object类型(所谓的对 ...
- android: activity切换之效果
Activity是android应用的重要部分;为了提高用户的体验度,加了Activity之间切换的动画效果,现在介绍的一种切换动画: 是什么效果,大家自已动手测试一下便知道: 先看进入的动画: pa ...
- android:在ViewPager中使用Button
最近在项目用用到ViewPager ,其中页面包含有Button,因为之前也有使用个ViewPager ,所以这个也照搬之前的方式,测试后发现点击button无法执行,这个button是在第一页面的默 ...
- 爱你不容易 —— Stream详解
作为前端,我们常常会和 Stream 有着频繁的接触.比如使用 gulp 对项目进行构建的时候,我们会使用 gulp.src 接口将匹配到的文件转为 stream(流)的形式,再通过 .pipe() ...
- Git使用规范
团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的.为了团队研发的规范性,特制定此规范.当然不同的团队可能有着不同的约定,此规范仅供参考. 目录 1.基本原则 2.建议流程 基本原则 不到万 ...
- Yii框架上传后展示图片
在视图层index.php展示代码中加入[ 'attribute' => 'file', 'format' => 'raw', 'value' => function($model) ...
- iOS RunTime你知道了总得用一下
说点题外话: 我刚来现在这家公司的时候,老板让我下载一个脉脉,上去找找自己的同行,多认识些同行.其实初衷的好的,但最近这两天我把它卸载了,不为别的,负能量太多!iOS这行自从2016就没景气过,在这行 ...
- Linux系统(二)软件的安装与卸载
序言 上一篇我们了解啦Linux系统中,根目录下的各个文件夹是做什么用的啦,也学会文件如何压缩打包.那么接下来我们就该用到这个系统啦.用这个系统,就是用这个系统的软件,那么我们对我们需要的软件如何安装 ...