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集合学习资料 里面包含视频+资料+源码 堂兄也有一个愿望 希望你们月薪过万后 ...
随机推荐
- 将 Callout 容器添加到移动设备应用程序中
在移动设备应用程序中,callout 是在应用程序顶部弹出的容器.该容器可以容纳一个或多个组件,并且支持不同类型的布局. callout 容器可以是模态或非模态容器.模态容器在其关闭之前接受所有的键盘 ...
- JSP获取绝对物理地址
session.getServletContext().getRealPath(""); 但是 getRealPath("a"+File.separator); ...
- HDU 4570(区间dp)
E - Multi-bit Trie Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- 在Oracle中数据库、表空间、表之间的关系
在oracle中,表空间是存储概念上的,建立表空间需要有对应的数据文件,数据文件建立好之后直接会把一定的磁盘空间分配给它,这样可以对数据库的存储空间进行有效的管理.然后在建表的时候指定对应的表空间,该 ...
- [笔记]A Practical Guide to Support Vector Classication
<A Practical Guide to Support Vector Classication>是一篇libSVM使用入门教程以及一些实用技巧. 1. Basic Kernels: ( ...
- php面向对象(OOP)---- 验证码类
PHP常用自封装类--验证码类 验证码是众多网站登陆.注册等相关功能不可以或缺的功能,实现展示验证码的方式有很多,这篇文章作者以工作中比较常用的方法进行了封装. 逻辑准备 要实现一个完整的验证码,需要 ...
- FMDB的简单用法
使用cocoaPods将FMDB下载到工程 第一步:引入框架,引入支持类库(libsqlite3.0.tbd) #import <FMDB.h> 声明属性 @interface ViewC ...
- link js重构心得
过年前后一段时间,对link库的代码进行的大量的重构,代码精简了许多,性能也得到了很大的改善,写此文记录期间所做的改进和重构,希望对看到此文的js程序员有所帮助. 1. 代码构建 最初代码使用gulp ...
- 使用阿里云的Maven仓库加速Spark编译过程
前言 在国内编译Spark项目需要从Maven源下载很多依赖包,官方源在国内大环境下的下载速度大家都懂得,那个煎熬啊,简直是浪费生命. 如果你的下载速度很快,你现在就可以无视这篇文章了. 阿里云给国内 ...
- vm虚拟机Kali2.0实现与物理机之间的文件拖动共享
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...