java知识宝库

来源:互联网 发布:网络相亲骗局 编辑:程序博客网 时间:2024/05/17 06:17

 

java知识宝库

 

前言

撰写本文的目的:

1.呈现java方面的知识点;

2.指导同学们循序渐进学习java知识;作者QQ78638703@qq.com

 

第一节 javaSE相关知识

 

语法规则(Java4版本之前的):

结构化程序语法,与类、抽象类、接口、内部类((静态)成员类、局部类、匿名类)、包有关的语法;

 

语法规则(Java5Java6Java7发布的新语法特性),主要如下,这里用#作为标志:

 

#泛型Genericjava5新特性)

本质:参数化类型对象(断句为:参数化、类型、对象)

种类

泛型类

定义方式如下

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的具体类型,它将向父类传递

泛型时,依然存在不得不使用强制转换的情况

即当被调用方法返回值的内部“类型参数”不能确定时。

强制转换可能发生失败而报运行异常。

这种情况普遍存在。如hibernateQuery.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新特性)

 

#注释:Annotationjava5新特性)

标准注释:@Deprecated@Override@SuppressWarnings@Target@Retention

自定义注释(包括第三方注释):如junit@testhibernate@Entity@Table@Id等;

 

#枚举:enum关键字java5新特性,对早期的枚举功能加强了)

values()方法可得到枚举数组,之后便可利用.length或利用增强的for循环来遍历取得枚举元素。

类库中同时增加了类EnumSetEnumMap

 

#自动装箱与拆箱(autoboxing/unboxing):Primitive类型与Wrapper类型在语法级别的自动转换。

 

#可变参数:重载方法的另一种形式。由于可变参数列表会被当成数组对待,因此可以调用.length属性。

 

#增强型for循环

用途一:遍历数组。排除了使用数组的.length属性

用途二:遍历集合对象。排出了使用集合的iterator对象

 

#静态导入:import static。(1)导入静态成员;(2)导入静态枚举类型对象;

 

#switch语句中可以使用字串了(java7新特性)

 

Jvm的一些机制:即java虚拟机的运行特征

 

jdk工具集:包括可执行程序java, javac, javadoc, jar, javah, javap, jdb

 

反射:ClassObjectFieldConstructorMethod等类。(是开发框架的基础)

 

加载器:java.lang.ClassLoaderjava.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.FormatterString.format()System.out.printf()等;

 

数学运算

Math类的各种功能

BigInteger类:任意大整数操作;

BigDecimal类:任意大浮点数数操作;

精确浮点:strictfp关键字;

安全的加减乘除运算math.XXX()方法(java7新特性)

 

字符串常用类

String

内容不可变,且是final

线程安全的

Stringbuffer

内容可变

线程安全的

StringBuilder类(java5新特性)

内容可变

不是线程安全的

Pattern类:用于处理正则表达式

Matcher类:用于处理正则表达式

 

 

 

对象克隆:Cloneable接口

 

对象比较:Comparable接口(常被数组排序所使用)

 

集合(数组):最顶层Collectiong接口及其子接口、类。(这里所称数组或Array并非基本数据类型的,而是对象)。

Collectiong接口的子接口SetListMap3大高层接口,分别代表着3个大的方面;

java5支持泛型,给集合带来了巨大影响。java5还增加了类ArraysQueuePriorityQueue等有用数据类型。

遍历集合的两种方式:

方式一:获取迭代器,然后用迭代器的hasNext()next()方法来遍历

方式二:利用集合的求大小、取元素的方法。例如Listsize()方法可求集合中的元素个数,get(i)方法可取元素。

 

Set接口只能放不同元素

HashSet类:哈希表。

系统自动计算hashcode

List接口(有序集合,可放相同元素)

ArrayList类:像数组表,随机访问快

 

LinkedList类:链表:适合频繁插入、删除

可用于实现队列

迭代器

Iterator接口:单向迭代器;

Enumeration早期的)

可调用其他集合对象的工厂方法来取得迭代器

ListIterator接口:双向迭代器

映射:Map接口(key-value键值对)

HashMap

 

TreeMap

 

向量

Vector类:不同类型元素共存的变长数组

 

堆栈

Stack

 

 

嵌入式小程序:APPLET类以及其子类

 

基础类库、图形窗口界面库:JFC (AWTSWINGjava2D,Accessibility,Drag&Dop)SWT

名称

开发者

组件

界面风格

其它

共性

AWT

java官方

背后藏匿着平台的Native Peer组件来起作用,即底层是平台相关的。

不同操作系统上界面相同

组件数量少(最大公约数)

Application提供统一的API接口

SWING

容器常采用AWT的,但自身直接调用Java2D画出了许多组件如TableTree

由于Java2D API是平台无关的,因此Swing组件的Java实现代码在每个平台都是一样的。

补充了AWT所不具有很多强大组件(最小公倍数)

SWT

IBM

SWT组件本身的Java代码实现部分在各个平台是不同的。

目标是与平台界面风格一致

(最大公约数)

 

事件处理模型

机制

等级事件模型

需改写父类的事件处理方法。(这点也强制了必须继承父类组件);

当前组件如果没有处理该事件,则事件消息传到外层组件(容器);

委托模型(jdk1.1以后引入)

一个源产生一个事件并将它送到一个或多个监听器Listener(注册了的)那里。

监听器简单的等待,直到收到一个事件,然后处理这个事件,返回相应结果。

 

 

输入、输出流

InputStream,OutputStream,Reader,Writer及其子类

文件、目录管理:java.io.File

文件、目录管理流:.FileInputStream.FileOutputStream

随即访问文件流:RandomAccessFile

对象串行化/序列化/持久化:ObjectInputStreamObjectOutputStream, Serializable接口,transient关键字

 

线程管理

早期

Tread类,Runnable接口,以及一些线程方法;

守护线程的创建和使用;

互斥、同步机制:synchronized关键字wait()notify()notifyAll()volatile关键字

java5版本后的线程新特性

callable接口等

新的互斥、同步机制:???

 

网络编程

URL类、URLConnection抽象类、InetAddress

资源获取

Applet获取网络图像getImage()

Applet获取网络声音play()getAudioClip()

获取网络文件资源URL.openStream()

套接字通信

(较低层的端口级、字符级编程)

(面向连接TCP/IPSOCKET通信:ServerSocket类,Socket

(无连接UDP/IPDatagramSocket通信:DatagramPacket类,DatagramSocket

 

多媒体编程JMF(操作系统厂商提供扩展包)

PlayerManagerMediaLocator等类,ControllerListener接口以及各种媒体事件。

播放器Player的状态转换。

其它:

Player.getVisualComponent():能得到媒体内容显示组件(即显示帧图像的布);

Player.getControlPanelComponent():能得到控制播放器Player的面板组件(含有播放、暂停、滚动条、音量等按钮)

……

 

数据库编程JDBC

相关类:Class类、DriverManager类;ConnectionStatementPreparedStatementResultSet等接口

公共数据库访问连接类的开发:

包括一个生成Connection的方法和分别关闭ConnectionStatementPreparedStatementResultSet等的方法

DAO设计:

Data Access Object

目的:面向DAO接口编程

模式:工厂模式

包括:

(1)DAO接口:声明抽象操作

(2)DAO实现类:对DAO接口的实现

(3)DAO工厂类:选择合适的DAO实现类实例返回给调用者,调用者紧接着面向DAO接口编程

ORM(对象关系映射)框架

包括HibernateibatisJPA等等

 

 

第二节 javaWeb编程相关知识

 

学习javaWeb之前可能需要了解的:

面向对象、面向关系、面向切面编程的概念

HTTP协议、TCP/IP协议的简单特征;Web消息生命周期;

URLURI、域名解析等的概念;

静、动态网页的概念,Web2.0的特征;

服务器的简单使用

(Tomcat)

虚拟主机的配置:server.xml文件中的相关节点<Host appBase="*" />

虚拟目录的配置:server.xml文件中的相关节点<Context docBase="*" path="*" />

???数据访问池的配置

???Jndi

???其它一些配置

数据库系统如MySql的使用知识

HTML5基础、CSS3基础

集成开发工具EclipseMyEclipse(插件辅助功能强大)、NetBean的使用知识;

javaScript

一种在浏览器上解释执行的语言;

基于对象;但内置对象无法被扩展,即类没有继承的功能,一些有名的库利用其原型特征尽可能的提升了其面向对象的能力;

基础变量类型少,常规语法稍简单。但其解释执行的特点使之具有一些貌似诡异的语法;

Ajax

核心是可随时向服务器发送请求的XMLHttpRequest对象。Ajax的整个过程以javaScript语言贯穿始终。结合DOM后能起到局部刷新页面的效果。它的

1.重要属性如下:

onreadystatechange:指定响应到来时的操作。仅用于异步。

readyState响应文本状态、status服务器HTTP状态、statusText;

responseText:代表响应的纯文本

responseXML:代表响应的XMLDocument对象。(即像window.document一样去取得内部节点信息)

此外还有responseBodyresponseStream等。

2.重要方法是:open()send()

或被称为框架或Ajax框架(只不过因为有的库中包含了Ajax功能);

包括PrototypeYUIDojoMooToolsRubyOnRails(依赖于Prototype)等;

当前最成熟流行的是JQueryExtJS,简单、高效,只要有javaScript基础就能学会。

DOM

文档对象模型:代表XML或者HTML文档,与平台和语言无关。

1.用编译型语言操作DOM

2.用解释型语言操作DOM,如浏览器运行javaScript语句操作此文档对象,用“window.document”引用文档对象,javaScript提供了大量的访问、查找、增、删、修改节点的函数。

 

XML重量级文档

XML

验证

法一:DTD(标签<!DOCTYPE…>指定*.dtd文件,紧跟<?xml>行);

法二:schemalschemaLocation="*.xsd"来指定,在根节点上)

显示

XLST

解析技术

DOM:基于树的存储

SAX:事件模型

JDOM

DOM4J

 

JSON:轻量级

 

Java WEB项目结构:即通常的目录组织(也包括在不同IDE上创建项目时的目录命名区别)

 

Java Web组件概览

 

Jsp页面组件

运行机制:即如何转换成java类并被运行的过程

语法

注释<%--

 

脚本元素

声明:<%!

其中声明变量作为servlet成员变量(对页面成全局)

表达式:<%=

每对中只能有一个表达式

Scriptlets<%

其中声明变量作为servlet某方法的局部变量

指令元素<%@

page指令

include指令

taglib指令

动作指令<jsp:

很多,不一一举例

9个隐含对象

Requestresponseout

pageContextsessionapplication

conifgpage

exception

 

自定义标记

(对JSP动作标记的扩展)

1.实现相关接口:

javax.Sevlet.jsp.tagext.Tag(简单标记处理)、

javax.Sevlet.jsp.tagext.BodyTag(体标记处理)

2.编写TLD文件

3.调用:<%@taglib prefix=”*” uri=”*”%>

JSTL标签库(由apache实现)

EL表达式:内置

核心标签库:corec

格式化标签库:fmtfmt

XML标签库:?,?

函数标签库:functionsfn

 

控制器组件

Servlet

扩展HttpServlet

处理http请求

重要方法:service()doGet()doPost()等方法

扩展GenericServlet

处理包括httpftp等各种协议请求

重要方法:service()方法

Filter过滤器

Servlet2.3版新增功能

用于过滤多个URL请求

Listener监听器

Servlet2.3版新增功能

包括Servlet上下文监听器、Http会话监听器、客户请求监听器

 

JavaBean组件

动作指令

<jsp:usebean id=

<jsp:setProperty name=

<jsp:getProperty name=

另外,id指示的实例名,可以用在脚本<%中,去调用getXXXsetXXX等方法

 

java web编程需要了解下表中的一些内容:

一、范围:

含义:原指对象的作用域:时间和空间。这里体现在设置各种范围的属性setAttribute()getAttribute()

范围名直接用内置对象来描述:(1request、(2page、(3application、(4session

内置的(1request、(2pageContext、(3application、(4session都有setAttribute(属性名,属性值)方法;而(2pageContext可以设置多个范围的属性;

二、生命周期:

含义:各对象构建、调用方法、消亡的时机

需要了解以下对象的生命周期

1.servletjsp):

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,富客户机平台。

其它

 

第三方插件或类库

版本管理:

CVSeclipse的标准的版本插件。练习则可在windows系统新建一个账户,安装CVS服务器,使服务开机运行。在eclipse上的客户端透视图为“Repository Exploring”。连接时使用新建的账户名、密码即可。

此外还有SVN等,需单独安装插件。

junit(插件,类库):单元测试工具

Tomcat插件

XMLBuddyXML文档编辑器

UML插件

EMF:“模型代码”生成工具;

GMF

UML:辅助设计插件

 

Ant项目管理工具(取代make

Maven项目管理工具

 

第四节 javaME

 

javaMEjava移动版本体系(很大一部分类是javaSE库的微型版)。

目前由Google引领的Android系统流行起来,大量的移动开发使用这种系统,在此基础之上开发java程序需依照AndroidAPI框架。

 

 

第五节三大框架SSH

框架有很多,struts1不讨论,ibatisJPA是应用程序持久化层的框架,EJB3含重量级持久化层的框架。JSFjava Server face等等。本人其它文章总结了三大框架Struts2springhibernate

原创粉丝点击