java知识宝库
来源:互联网 发布:网络相亲骗局 编辑:程序博客网 时间:2024/05/17 06:17
java知识宝库
前言
撰写本文的目的:
1.呈现java方面的知识点;
2.指导同学们循序渐进学习java知识;作者QQ:78638703@qq.com。
第一节 javaSE相关知识
语法规则(Java4版本之前的):
结构化程序语法,与类、抽象类、接口、内部类((静态)成员类、局部类、匿名类)、包有关的语法;
语法规则(Java5、Java6、Java7发布的新语法特性),主要如下,这里用#作为标志:
#泛型Generic(java5新特性)
本质:参数化类型对象(断句为:参数化、类型、对象)
种类
泛型类
定义方式如下
publicclass GenericsFoo<T> {
private Tx;
public GenericsFoo(T x) {this.x = x;}
public T getX() {returnx;}
publicvoid setX(T x) {this.x = x;}
}
泛型类被定义后,如果指定< >内的具体类型名,这个表达式可以有以下用途:(参见新特性)
(0)定义对象
List<String> a=new ArrayList<String>();
// ArrayList<String> b=new ArrayList<String>()
(1)作为方法参数的类型;
void printListOfStrings(List<String> list, PrintStream out)
(2)作为方法的返回类型
List<String> getListOfStrings() {}
(3)作为类型参数。即指定具体类型名时,仍然继续用泛型来指定
Map<String,List<String>> map = new HashMap<String, List<String>>();
(4)在遍历中使用
for (Iterator<String> i = listOfStrings.iterator(); i.hasNext();)
{String s = i.next();}
泛型接口
与“泛型类”相似
泛型方法
泛型方法即是对方法中的参数进行泛型时,可以仅将泛型参数列表置于返回值前,而不是置于“类名后面”,这样该参数只作用于某方法而不影响整个类。如:
public <T>void f(T x) //<T>若移到类名后去,则是“泛型类”
{System.out.println(x.getClass().getName());}
高级应用
限制类型参数
extends限制;supper限制;
如:class Foo<Textends Collection>
通配符?泛型
?只能用于声明句柄处
class Userextends ArrayList<String> {}
class Foo<Textends User> {
void fun() {
Foo<? extends User> f =new Foo<User>();//声明了f句柄
}
}
扩展泛型类、接口时的写法
根据继承时,
是否指定具体类型,
来分情况
1.class UserArrayList1extends ArrayList{}
默认会用Object去配置父类ArrayList中的参数
2.class UserArrayList2extends ArrayList<String>{}
子类指定了用String类去配置父类的类型参数;
3.class UserArrayList3<T>extends ArrayList<T>{}
子类继续用泛型名来,一旦指定了子类的T的具体类型,它将向父类传递
泛型时,依然存在不得不使用强制转换的情况
即当被调用方法返回值的内部“类型参数”不能确定时。
强制转换可能发生失败而报运行异常。
这种情况普遍存在。如hibernate的Query.list()方法返回List对象,该对象的内部元素“类型”不可知。
示例:
class Test {
List fun() { //此处被警告
ArrayList<Integer> a = new ArrayList<Integer>();
a.add(new Integer(7));
a.add(new Integer(8));
return a;
}
void pun() {
List<Integer> b = fun();//此处被警告。进行了强制转换。
//fun()返回的List的内部元素类型未知
for (Integer i : b) {System.out.println(i);}
}
publicstaticvoid main(String args[]) {
new Test().pun();
}
}
若想消除警告,解决办法是:修改List fun(){}为List<Integer> fun(){}
#泛型实例化类型自动推断。比如List<String> tempList = new ArrayList<>();(java7新特性)
#语法上支持集合,而不一定是数组。比如final List<Integer> piDigits = [ 1,2,3,4,5,8 ];(java7新特性)
#注释:Annotation(java5新特性)
标准注释:@Deprecated、@Override、@SuppressWarnings、@Target、@Retention;
自定义注释(包括第三方注释):如junit的@test,hibernate的@Entity、@Table、@Id等;
#枚举:enum关键字(java5新特性,对早期的枚举功能加强了)
其values()方法可得到枚举数组,之后便可利用.length或利用增强的for循环来遍历取得枚举元素。
类库中同时增加了类EnumSet、EnumMap。
#自动装箱与拆箱(autoboxing/unboxing):Primitive类型与Wrapper类型在语法级别的自动转换。
#可变参数:重载方法的另一种形式。由于可变参数列表会被当成数组对待,因此可以调用.length属性。
#增强型for循环
用途一:遍历数组。排除了使用数组的.length属性
用途二:遍历集合对象。排出了使用集合的iterator对象
#静态导入:import static。(1)导入静态成员;(2)导入静态枚举类型对象;
#switch语句中可以使用字串了(java7新特性)
Jvm的一些机制:即java虚拟机的运行特征
jdk工具集:包括可执行程序java, javac, javadoc, jar, javah, javap, jdb等
反射:Class、Object、Field、Constructor、Method等类。(是开发框架的基础)
加载器:java.lang.ClassLoader、java.lang.Class类。注意 Class.forName(…)和ClassLoader.loadClass(…)的区别
创建实例的各种办法
一
new 类型名()
耦合性高
二
Class.forName("类型名").newInstance();
注:步骤分为
(1)获取“类对象”Class.forName("类型名")
(2)用“类对象”调用newInstance()方法
只能调用无参构造器。
具灵活性;
降低耦合;
三
Constructor.newInstance(对象数组)
注:之前的步骤分为
(1)获取“类对象”Class.forName("类型名").;
(2)用“类对象”获取“方法对象”getDeclaredConstructor(…)
(3)用方法对象调用newInstance(…)方法
可调用有参数的构造器;
甚至调用private构造器。
本地化:与其它语言接口(如C语言),native关键字
异常处理:异常处理语法,Throwable, Exception类以及它们的子类
格式化:主要用在文本输出,比如数字、日期、金额。涉及java.util.Formatter、String.format()、System.out.printf()等;
数学运算
Math类的各种功能
BigInteger类:任意大整数操作;
BigDecimal类:任意大浮点数数操作;
精确浮点:strictfp关键字;
安全的加减乘除运算math.XXX()方法(java7新特性)
字符串常用类
String类
内容不可变,且是final类
线程安全的
Stringbuffer类
内容可变
线程安全的
StringBuilder类(java5新特性)
内容可变
不是线程安全的
Pattern类:用于处理正则表达式
Matcher类:用于处理正则表达式
对象克隆:Cloneable接口
对象比较:Comparable接口(常被数组排序所使用)
集合(数组):最顶层Collectiong接口及其子接口、类。(这里所称数组或Array并非基本数据类型的,而是对象)。
Collectiong接口的子接口Set、List、Map是3大高层接口,分别代表着3个大的方面;
java5支持泛型,给集合带来了巨大影响。java5还增加了类Arrays、Queue、PriorityQueue等有用数据类型。
遍历集合的两种方式:
方式一:获取迭代器,然后用迭代器的hasNext()、next()方法来遍历
方式二:利用集合的求大小、取元素的方法。例如List的size()方法可求集合中的元素个数,get(i)方法可取元素。
Set接口只能放不同元素
HashSet类:哈希表。
系统自动计算hashcode
List接口(有序集合,可放相同元素)
ArrayList类:像数组表,随机访问快
LinkedList类:链表:适合频繁插入、删除
可用于实现队列
迭代器
Iterator接口:单向迭代器;
(Enumeration早期的)
可调用其他集合对象的工厂方法来取得迭代器
ListIterator接口:双向迭代器
映射:Map接口(key-value键值对)
HashMap类
TreeMap类
向量
Vector类:不同类型元素共存的变长数组
堆栈
Stack类
嵌入式小程序:APPLET类以及其子类
基础类库、图形窗口界面库:JFC (AWT,SWING,java2D,Accessibility,Drag&Dop等),SWT
名称
开发者
组件
界面风格
其它
共性
AWT
java官方
背后藏匿着平台的Native Peer组件来起作用,即底层是平台相关的。
不同操作系统上界面相同
组件数量少(最大公约数)
给Application提供统一的API接口
SWING
容器常采用AWT的,但自身直接调用Java2D画出了许多组件如Table和Tree。
由于Java2D API是平台无关的,因此Swing组件的Java实现代码在每个平台都是一样的。
补充了AWT所不具有很多强大组件(最小公倍数)
SWT
IBM
SWT组件本身的Java代码实现部分在各个平台是不同的。
目标是与平台界面风格一致
(最大公约数)
事件处理模型
机制
等级事件模型
需改写父类的事件处理方法。(这点也强制了必须继承父类组件);
当前组件如果没有处理该事件,则事件消息传到外层组件(容器);
委托模型(jdk1.1以后引入)
一个源产生一个事件并将它送到一个或多个监听器Listener(注册了的)那里。
监听器简单的等待,直到收到一个事件,然后处理这个事件,返回相应结果。
输入、输出流
InputStream,OutputStream,Reader,Writer及其子类
文件、目录管理:java.io.File类
文件、目录管理流:.FileInputStream,.FileOutputStream类
随即访问文件流:RandomAccessFile类
对象串行化/序列化/持久化:ObjectInputStream和ObjectOutputStream类, Serializable接口,transient关键字
线程管理
早期
Tread类,Runnable接口,以及一些线程方法;
守护线程的创建和使用;
互斥、同步机制:synchronized关键字、wait()、notify()、notifyAll()、volatile关键字
java5版本后的线程新特性
callable接口等
新的互斥、同步机制:???
网络编程
URL类、URLConnection抽象类、InetAddress类
资源获取
Applet获取网络图像getImage()
Applet获取网络声音play()、getAudioClip()
获取网络文件资源URL.openStream()
套接字通信
(较低层的端口级、字符级编程)
(面向连接TCP/IP)SOCKET通信:ServerSocket类,Socket类
(无连接UDP/IP)DatagramSocket通信:DatagramPacket类,DatagramSocket类
多媒体编程JMF(操作系统厂商提供扩展包)
Player、Manager、MediaLocator等类,ControllerListener接口以及各种媒体事件。
播放器Player的状态转换。
其它:
Player.getVisualComponent():能得到媒体内容显示组件(即显示帧图像的布);
Player.getControlPanelComponent():能得到控制播放器Player的面板组件(含有播放、暂停、滚动条、音量等按钮)
……
数据库编程JDBC
相关类:Class类、DriverManager类;Connection、Statement、PreparedStatement、ResultSet等接口
公共数据库访问连接类的开发:
包括一个生成Connection的方法和分别关闭Connection、Statement、PreparedStatement、ResultSet等的方法
DAO设计:
Data Access Object
目的:面向DAO接口编程
模式:工厂模式
包括:
(1)DAO接口:声明抽象操作
(2)DAO实现类:对DAO接口的实现
(3)DAO工厂类:选择合适的DAO实现类实例返回给调用者,调用者紧接着面向DAO接口编程
ORM(对象关系映射)框架
包括Hibernate、ibatis、JPA等等
第二节 javaWeb编程相关知识
学习javaWeb之前可能需要了解的:
面向对象、面向关系、面向切面编程的概念
HTTP协议、TCP/IP协议的简单特征;Web消息生命周期;
URL、URI、域名解析等的概念;
静、动态网页的概念,Web2.0的特征;
服务器的简单使用
(如Tomcat)
虚拟主机的配置:server.xml文件中的相关节点<Host appBase="*" />
虚拟目录的配置:server.xml文件中的相关节点<Context docBase="*" path="*" />
???数据访问池的配置
???Jndi
???其它一些配置
数据库系统如MySql的使用知识
HTML5基础、CSS3基础
集成开发工具Eclipse、MyEclipse(插件辅助功能强大)、NetBean的使用知识;
javaScript
一种在浏览器上解释执行的语言;
基于对象;但内置对象无法被扩展,即类没有继承的功能,一些有名的库利用其原型特征尽可能的提升了其面向对象的能力;
基础变量类型少,常规语法稍简单。但其解释执行的特点使之具有一些貌似诡异的语法;
Ajax
核心是可随时向服务器发送请求的XMLHttpRequest对象。Ajax的整个过程以javaScript语言贯穿始终。结合DOM后能起到局部刷新页面的效果。它的
1.重要属性如下:
onreadystatechange:指定响应到来时的操作。仅用于异步。
readyState响应文本状态、status服务器HTTP状态、statusText;
responseText:代表响应的纯文本
responseXML:代表响应的XMLDocument对象。(即像window.document一样去取得内部节点信息)
此外还有responseBody、responseStream等。
2.重要方法是:open()、send()。
库
或被称为框架或Ajax框架(只不过因为有的库中包含了Ajax功能);
包括Prototype和YUI,Dojo、MooTools、RubyOnRails(依赖于Prototype)等;
当前最成熟流行的是JQuery、ExtJS,简单、高效,只要有javaScript基础就能学会。
DOM
文档对象模型:代表XML或者HTML文档,与平台和语言无关。
1.用编译型语言操作DOM
2.用解释型语言操作DOM,如浏览器运行javaScript语句操作此文档对象,用“window.document”引用文档对象,javaScript提供了大量的访问、查找、增、删、修改节点的函数。
XML重量级文档
XML
验证
法一:DTD(标签<!DOCTYPE…>指定*.dtd文件,紧跟<?xml>行);
法二:schemal(schemaLocation="*.xsd"来指定,在根节点上)
显示
XLST
解析技术
DOM:基于树的存储
SAX:事件模型
JDOM:
DOM4J:
JSON:轻量级
Java WEB项目结构:即通常的目录组织(也包括在不同IDE上创建项目时的目录命名区别)
Java Web组件概览
Jsp页面组件
运行机制:即如何转换成java类并被运行的过程
语法
注释<%--
脚本元素
声明:<%!
其中声明变量作为servlet成员变量(对页面成全局)
表达式:<%=
每对中只能有一个表达式
Scriptlets:<%
其中声明变量作为servlet某方法的局部变量
指令元素<%@
page指令
include指令
taglib指令
动作指令<jsp:
很多,不一一举例
9个隐含对象
Request、response、out、
pageContext、session、application、
conifg、page、
exception
自定义标记
(对JSP动作标记的扩展)
1.实现相关接口:
javax.Sevlet.jsp.tagext.Tag(简单标记处理)、
javax.Sevlet.jsp.tagext.BodyTag(体标记处理)
2.编写TLD文件
3.调用:<%@taglib prefix=”*” uri=”*”%>
JSTL标签库(由apache实现)
EL表达式:内置
核心标签库:core,c
格式化标签库:fmt,fmt
XML标签库:?,?
函数标签库:functions,fn
控制器组件
Servlet
扩展HttpServlet
处理http请求
重要方法:service()、doGet()、doPost()等方法
扩展GenericServlet
处理包括http、ftp等各种协议请求
重要方法:service()方法
Filter过滤器
Servlet2.3版新增功能
用于过滤多个URL请求
Listener监听器
Servlet2.3版新增功能
包括Servlet上下文监听器、Http会话监听器、客户请求监听器
JavaBean组件
动作指令
<jsp:usebean id=
<jsp:setProperty name=
<jsp:getProperty name=
另外,id指示的实例名,可以用在脚本<%中,去调用getXXX、setXXX等方法
java web编程需要了解下表中的一些内容:
一、范围:
含义:原指对象的作用域:时间和空间。这里体现在设置各种范围的属性setAttribute()、getAttribute()
范围名直接用内置对象来描述:(1)request、(2)page、(3)application、(4)session
内置的(1)request、(2)pageContext、(3)application、(4)session都有setAttribute(属性名,属性值)方法;而(2)pageContext可以设置多个范围的属性;
二、生命周期:
含义:各对象构建、调用方法、消亡的时机
需要了解以下对象的生命周期
1.servlet(jsp):
2.filter:注意与servlet的区别
3.Listener:此对象的生命周期并不重要。
4.javabean:可以设置4种范围的javabean实例,因此其生命周期根据设置有所不同。默认是page。
三、会话
1.代表服务器与客户端的一次交互的对象。(不因http连接的断开而消亡)
2.当浏览器关闭、超时,服务器会清除该session对象,session中的所有数据同时消亡。(即便session对象没有及时清除,但当同一个客户端的新请求到来时,也会创建新的session)。
3.一般,用户点击“注销”、“退出”时,程序只把session中“证实已登录”的数据清除即可,但session依然保持;
4.各浏览器在新建窗口、新建卡片窗口是否沿用先前的session对象则可能有不同的对待;
四、web组件配置标签
(web.xml)
Servlet
<servlet>、<servlet-name>、<servlet-class>、<servlet-mapping>、<url-pattern>
Filter过滤器
<filter>、<filter-name>、<filter-class>、<filter-mapping>、<url-pattern>
Listener监听器
<listener>、<listener-class >
第三节企业级编程或其它
Enterprise java bean
Ejb3
JTA事务处理
由容器执行事务
SOA
Web Service
SOAP(以http协议传送xml数据)
COBAR
javaEE
DCOM
Rmi
RMI 是面向对象方式的 Java RPC 。(RPC远程过程调用)
Jmail
java邮件编程
JMS
java 消息系统
RCP Rich Client Platform,富客户机平台。
其它
第三方插件或类库
版本管理:
CVS:eclipse的标准的版本插件。练习则可在windows系统新建一个账户,安装CVS服务器,使服务开机运行。在eclipse上的客户端透视图为“Repository Exploring”。连接时使用新建的账户名、密码即可。
此外还有SVN等,需单独安装插件。
junit(插件,类库):单元测试工具
Tomcat插件
XMLBuddy:XML文档编辑器
UML插件
EMF:“模型—代码”生成工具;
GMF:
UML:辅助设计插件
Ant项目管理工具(取代make)
Maven项目管理工具
第四节 javaME
javaME:java移动版本体系(很大一部分类是javaSE库的微型版)。
目前由Google引领的Android系统流行起来,大量的移动开发使用这种系统,在此基础之上开发java程序需依照Android的API框架。
第五节三大框架SSH
框架有很多,struts1不讨论,ibatis、JPA是应用程序持久化层的框架,EJB3含重量级持久化层的框架。JSF:java Server face等等。本人其它文章总结了三大框架Struts2,spring,hibernate。
- java知识宝库
- 疯狂Java学习笔记(46)------------知识学习宝库!
- Java学习笔记(46)------------知识学习宝库!
- linux知识宝库
- jQuery知识宝库
- Struts2知识宝库
- Hibernate知识宝库
- Spring知识宝库
- yii知识宝库
- [推荐]中国网管的知识宝库-网管之家
- [推荐]中国网管的知识宝库-网管之家
- baidu宝库
- 资源宝库
- servlet规范定义的Servlet生命周期 - Java - J2EE - Servlet/JSP - linux宝库
- [转] 无忧JS宝库
- 程序员网站资源宝库
- 程序员网站资源宝库
- 程序员网站资源宝库
- 支付、清算和结算含义
- 使用C#的HttpWebRequest模拟登陆访问人人网(很好的一个例子,理解http的基本工作方式)
- Hbase经验总结
- javaWeb_05-session对象
- 程序运行时报警蜂鸣
- java知识宝库
- Java编程中“为了性能”尽量要做到的一些地方
- 用Xmanager远程连接Red hat Enterprise Linux 5
- ZOJ 2750 Idiomatic Phrases Game(最短路,dij)
- Oracle 管理之 Linux 网络基础
- jdbc初步(转)
- android WebKit 分析
- ubuntu12.04安装opencv-1.0.0的问题(希望大家进来讨论一下)
- Hibernate入门