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集合学习资料 里面包含视频+资料+源码 堂兄也有一个愿望 希望你们月薪过万后 ...
随机推荐
- HTML 颜色
HTML 颜色 HTML 颜色由红色.绿色.蓝色混合而成. 颜色值 HTML 颜色由一个十六进制符号来定义,这个符号由红色.绿色和蓝色的值组成(RGB). 种颜色的最小值是0(十六进制:#00).最大 ...
- WPF中将16进制颜色码转换成SolidColorBrush
使用ColorConverter.ConvertFromString(string colorValue)方法 例如:new SolidColorBrush((Color)ColorConverter ...
- JavaScript的核心
对象 ECMAScript做为一个高度抽象的面向对象语言,是通过对象来交互的.即使ECMAScript里边也有基本类型,但是,当需要的时候,它们也会被转换成对象. 一个对象就是一个属性集合,并拥有一个 ...
- Nancy简单实战之NancyMusicStore(二):打造首页
前言 继上一篇搭建好项目之后,我们在这一篇中将把我们NancyMusicStore的首页打造出来. 布局 开始首页之前,我们要先为我们的整个应用添加一个通用的布局页面,WebForm中母版页的概念. ...
- python yield generator 详解
本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,generator的特点,generator基础及高级应用场景,genera ...
- POJ1050(dp)
To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 46788 Accepted: 24774 Desc ...
- 用反射技术替换工厂种的switch分支(14)
首先给大家拜个晚年,祝大家新春快乐,万事如意,鸡年大吉. 好了,前面我们讲了很多的工厂模式,其中,有个很明显的特点,工厂中,有一个方法,里面有很多的swich case 分支,我们前面说过,我们可以 ...
- 多线程方式实现Socket通信
一.首先,介绍下两类传输协议:TCP:UDP TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流 ...
- bootstrap table编辑操作的时候 在模态框里加载iframe页面(加载的页面是在另一个页面做编辑)的时候如何关闭模态框和刷新table
//关闭模态框 window.parent.$('#myModal').modal('hide'); //修改成功后刷新table表格 ...
- Ubuntu 14.04 64bit 系统下打开PHPadmin时出现缺少mysqli|mysql 扩展的解决方法(php5)
网上找了很多方法,都是翻来覆去的抄袭. 都在说把 /etc/php5/apache2/php.ini 下面的 ;extension=php_mysqli.dll 前面的 ; 注释符号去掉 再重启 ...