一门永不过时的编程语言——Java 软件开发。
Java编程语言占比:
据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员的数量最多。而在以Java编程为核心的开发领域中,javaEE程序员的需求量10年来一直居于首位!
Java工程师就业:
1.通过各大招聘网站统计,全国海量公司都在招聘Java开发工程师
2.北京Java开发工程师平均薪资,即16788元
3.全国Java开发薪资前三:北京 上海 广州
工具/原料
Java学习路线
Java学习大纲
Java基础课程
1
Java基础课程内容涉及:Java开发介绍、Java数组、Java面向对象、常用基础类、集合、IO流、多线程、异常、反射。
2
第一部分:Java开发介绍
- DOS常用命令
1、当我们的端口比如常用的8000端口被其它程序占用了,想要查到该程序并杀掉:
netstat -ano | findstr 8000 #查到占用8000端口的应用程序的进程ID
tasklist | findstr 37580 #根据进程ID查到应用程序名称
taskkill /pid 37580 /T #终止37580这个进程及其子进程
2、查看命令帮助
命令 /?
3、删除非空目录
rmdir /s /q path
4、删除文件
del e"\xh.txt
5、创建文件
echo 你好 >e:\xh.txt
6、查看文件内容
type e:\xh.txt
- JVM、JRE、JDK之间的关系
JDK是java开发工具包,JRE是指java运行环境。JVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分
简单而言:使用JDK开发完成的java程序,交给JRE去运行。
三者之间关系
JDK 包含JRE,JRE包含JVM。
- Java开发环境的搭建:安装JDK,配置环境变量
安装 JDK
高级设置 配置path
- Java入门程序(Java的开发流程)
java的开发流程 - Java的注释,标识符、标识符的命名规范
java中注释有三种
单行注释 //注释的内容,
多行注释 /…注释的内容…/,
文档注释 /**…注释的内容….*/。(就是为了便于javadoc程序自动生成文档)
这些都称之为java doc标记,含义如下:
@author 标明开发该类模块的作者
@version 标明该类模块的版本
@see 参考转向,也就是相关主题
@param 对方法中某参数的说明
@return 对方法返回值的说明
@exception 对方法可能抛出的异常进行说明
标识符的命名规则:
1.标识符由字母、数字、“_”、“$”组成,且首字母不能是数字
2.不能把Java关键字作为标识符
3.标识符没有长度限制
4.标识符对长度敏感
一般情况下,类、接口、方法名、变量名采用驼峰式(包含小驼峰式:第一个单词以小写字母开头第二个单词的首字母大写;
大驼峰式:每一个单词的首字母都采用大写字母),需要注意的是,Java中类名的标识符一般用大驼峰式书写格式,
方法和变量的标识符则多用小驼峰式书写格式。
- Java基本数据类型
四类八种
1、整型 byte 、short 、int 、long
2、浮点型 float 、 double
3、字符型 char
4、布尔型 boolean
-
变量和常量的定义及初始化
-
Java的运算符
分为:
赋值运算符、算术运算符、比较运算符、
逻辑运算符、位运算符、三元运算符、等等。
-
运算符的优先级
数字越小表示优先级越高
-
Java分支语句之if…else
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
实例
public class Test {
public static void main(String args[]){
int x = 30;
if( x == 10 ){
System.out.print("Value of X is 10");
}else if( x == 20 ){
System.out.print("Value of X is 20");
}else if( x == 30 ){
System.out.print("Value of X is 30");
}else{
System.out.print("这是 else 语句");
}
}
}
- 循环的嵌套
public class Demo1 {
public static void main(String[] args) {
int i, j;
for (i = 0; i <= 7; i++) { // 外层循环控制行数
for (j = 1; j <= i; j++) { // 内层循环打印 *
System.out.print("*"); // 注意不是 println
}
System.out.print("\n"); //换行
}
}
13. 方法的定义
14. 方法的形参和实参
void add(int a,int b)//定义一个函数,其中a和b就是形参
add(1,2)//调用一个函数,1和2就是实参
15 方法的递归调用
1 递归调用是一种特殊获的调用形式,就是方法自己调自己
案例:
案例:
package Lei;
//从1+2+3+。。。。。。。。。。。。。+100
public class MethodDemo {
public static void main(String[] args)
{
System.out.println(addNum(100));
}
public static int addNum(int num)
{
if(num==1){ ///程序出口
return 1;
}
else {
return(num+addNum(num-1));//返回当前值的调用
}
}
}
3
第二部分:Java数组
- Java 数组的定义
type arrayName[];
type[] arrayName;
其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,
数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。
- Java 数组的声明
//1 先声明在使用
public class ArrayDemo{
public static void main(String[] args){
//先声明
int[] hobbies;
hobbies=new int[3];
hobbies[0]=1;
hoobies[2]=2;
System.out.println(hobbies[0]); //输出第一个数
//输出数组长度为3,如何输出?数的属性length
System.out.println(hobbies.length);
}
}
//2 声明并创建
public class ArrayDemo1{
public static void main(String[] args){
int[] moenys = new money[3];
moneys[0] = 1; //1角
moneys[1] = 5;//5角
System.out.println(moenys.length);
System.out.println(moneys[0]);
}
}
//3.第三种声明创建并赋值
public class ArrayDemo2{
public static void main(String[] args){
//1)
int[] moneys = new int[]{1,5,10};
//2)
int[] moneys = {1,5,10};
//区别在于不需要显性new
//利用for循环
//for(int 1 =0 ; i < 3; i++){
// System.out.println(moneys[i]);
// }
for(int i = 0 ; i < moneys.length ; i ++){
System.out.println(moneys[i]);
}
}
}
- 数组的优势与局限
优点:
1、按照索引查询元素速度快
2、能存储大量数据
3、按照索引遍历数组方便
缺点:
1、根据内容查找元素速度慢
2、数组的大小一经确定不能改变。
3、数组只能存储一种类型的数据
4、增加、删除元素效率慢
5、未封装任何方法,所有操作都需要用户自己定义。
- 数组的遍历访问(普通循环,增强for循环)
//第一种:for循环
//遍历数组
public class ThroughTheArray{
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + ",");
}
}
}
//第二种:增强for循环foreach
//遍历数组
public class ThroughTheArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
for (int i : arr) {
System.out.print(i + ",");
}
}
}
//第三种:利用jdk自带的方法 --> java.util.Arrays.toString()
//遍历数组
public class ThroughTheArray {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组
System.out.println(java.util.Arrays.toString(arr));
}
}
- 数组元素的顺序查找
常见的查找方法:
第一种顺序查找:也就是按顺序一位一位的查找,找到要查找数的索引(下标)。
弊端:数据量大的时候,在最差的情况下,计算机的负载也非常的大,效率低
public static void main(String[] args) {
System.out.println("请输入要查找的数");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[] arr = {2,4,6,8,10,12,14,16};
int index = find(arr,num);
if (index == -1){
System.out.println("找不到该数");
}else {
System.out.println("查找到的该数的下标为" + index);
}
}
/**
*
* @param arr 查找的数组
* @param num 待查找的数
* @return -1-没有找到,>=0-下标
*/
public static int find(int[] arr,int num){
for (int i = 0;i<arr.length;i++){
if (arr[i] == num) {
return i;
}
}
return -1;
}
第二种折半查找(二分查找):优化了查找的效率。
弊端:数组必须经过排序。
public static void main(String[] args) {
System.out.println("请输入要查找的数");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = {2, 4, 6, 8, 10, 12, 14, 16,18};
int index = find(arr,num);
System.out.println("查找到的该数的下标为" + index);
}
/**
* 二分查找
* @param arr 查找的数组
* @param num 待查找的数
* @return 返回查找到的数的下标
*/
private static int find(int[] arr,int num) {
int start = 0;
int end = arr.length-1;
int mid = (start+end)/2;
while (num != arr[mid]){
if (arr[mid] > num){
end=mid-1;
}else {
start=mid+1;
}
mid = (start+end)/2;
}
return mid;
}
- 数组元素的排序
数组的排序:
方法一:冒泡排序
冒泡排序(Bubble sort):相邻的两个数逐个的做比较,如果前一个数比后一个数小那么就交换过来,
当第一轮比较完毕后最小的值一定产生在末尾,每一轮比较都会产生一个最小值
public static void main(String[] args) {
int[] a = {22, 87, 52, 11, 88, 24};
bubble(a);
write(a);
}
public static void bubble(int[] a){
for (int j = 1; j <= a.length - 1; j++) {
for (int i = 0; i <= a.length - j - 1; i++) {
if (a[i] > a[i + 1]) {
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
}
public static void write(int[] a) {
for (int i : a) {
System.out.print(i + " ");
}
}
方法二:选择排序
public static void main(String[] args) {
int[] a = {22, 87, 52, 11, 88, 24};
int n = a.length;
for (int i = 1;i<=n-1;i++){
//找出最大元素的位置
int maxIndex = 0;
for (int j = 1; j <= n - i; j++) {
if (a[j] > a[maxIndex]) {
maxIndex = j;
}
}
//将最大数调到最后
int t = a[maxIndex];
a[maxIndex] = a[n - i];
a[n - i] = t;
}
write(a);
}
public static void write(int [] a){
for (int i :a){
System.out.print(i+" ");
}
}
方法三:倒置数组
找到数组的每个数的对称的数,交换即可
public static void main(String[] args) {
int[] array = {4,6,7,8,9,20,40,50};
reverseArray(array);
printArray(array);
}
public static void reverseArray(int[] array){
for (int i = 0;i < array.length/2;i++){
int temp = array[i];
array[i] = array[array.length-i-1];
array[array.length-i-1] = temp;
}
}
public static void printArray(int[] array){
for (int i = 0;i < array.length;i++){
System.out.print(array[i] + "\t");
}
}
- Arrays工具类的使用
工具类:工具类里面封装了一些比较好的方法,这些方法有个特点:都被Static修饰
调用方法:
1. 查找:
Static int binarySearch(形参)=====各种形参不同的方法,返回搜索值的下标
2. 排序:
Static void sort(形参)=========对数组进行排序
(byte[] b,int formIndex,int toIndex):表示[formIndex,toIndex],前包后不包
3. 查看:
Static String toString(形参)=====返回数组的字符串表示形式(即打印数组的内容
import java.util.Arrays;
public class Demo7Array {
public static void main(String[] args) {
int[] arr=new int[] {1,2,3,4,5,765,45,3};
//[I@7852e922
System.out.println(arr);
System.out.println(Arrays.toString(arr));
//====>结果:[1, 2, 3, 4, 5, 765, 45, 3]
Arrays.sort(arr,5,7);//前包后不包===对下标为5,6进行排序
System.out.println("排序后"+Arrays.toString(arr));
//=====>结果:[1, 2, 3, 4, 5, 45, 765, 3]
Arrays.sort(arr);
System.out.println("排序后"+Arrays.toString(arr));
System.out.println("查找的下标为"+Arrays.binarySearch(arr, 3));
System.out.println("范围查找的下标为"+Arrays.binarySearch(arr,0,5,4));
}
}
- 二维数组
1。先声明,再用new运算符进行内存分配
//声明二维数组的语法
数组元素的类型 数组名字[][];
数组元素的类型[][] 数组名字;
//声明二维数组
int myarr[][];
(1). 直接为每一维分配内存空间
//为每一维分配内存
a =new int[2][4];
(2). 分别为每一维分配内存
a = new int[2][];
a[0] =new int[2];
a[1] =new int[3];
2. 数组的基本操作
遍历数组
public class Matrix{//创建类
//主方法
public static void main(String[] args){
//定义二维数组
int a[][]=new int[3][4];
for(int i=0;i<a.length;i++){
//循环遍历数组中的每个元素
for(int j=0;j<a[i].length;j++){
//将数组中的元素输出
System.out.print(a[i][j]);
}
//输出空格
System.out.println();
}
}
}
4
第三部分:Java面向对象
面向对象方法的解决问题的思路是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式来构造软件系统,这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。在面向对象方法中,把一切都看成是对象。
-
面向对象设计思想
-
面向对象的分析与设计
-
Java与面向对象
-
类中成员变量的定义与意义
一.访问控制符 包含:public ,private ,protected
二.类名要有意义,且首字母大写
三.花括号内为类的主体,类体中一般包括3个部分,成员变量声明,成员方法声明和构造器声明。
二.Java自定义一个类的步骤如下:
1.用关键字class定义类(考虑修饰符和类名)
2.编写类的属性 ( 属性即成员变量)
3.编写类的构造器(构造方法)
4.编写类的方法(成员方法,考虑修饰符,返回值类型,方法名和)
- 构造方法的定义和调用
构造方法是类的一个特殊的成员,在类实例化时会自动调用。
通过前面的学习,我们知道为一个属性赋值有两种方法:①、直接访问对象属性 ②、通过setXxx()方法
如果想在实例化对象的同时就为这个对象的属性进行赋值,可以通过构造方法来实现
构造方法三个条件:
①、方法名和类名相同
②、在方法名前面没有返回值类型的声明
③、在方法中不能使用return语句
Person p=new Person( );
//new Person()语句有两个功能
//①实例化Person对象 ②自动调用构造方法Person( )
无参构造方法、
//该方法是无参的构造方法,即构造方法不接收参数,执行后输出 无参的构造方法被调用了
class Person{
public Person( ){
System.out.println("无参构造方法被调用");
}
}
public class Test01{
public static void main (String [] args ){
Person p=new Person();//实例化Person对象
}
}
有参构造方法:
class Person{
int age;
//有参构造方法
public Person (int a){
age=a;
}
public void speak(){
System.out.println("我今年"+age+"岁");
}
}
public class Test02{
public static void main (String [] args){
Person p=new Person (20);//实例化同时赋值
p.speak();
}
}
- 面向对象的封装特性
类:它是一个对象的集合,它是对象的抽象,他主要用于描述一组对象的行为和共同特征,
比如说,有一个抽象的学生类,他们的共同特征是同时具有以下信息:学号、姓名、年龄、班级,
所以我们定义他们的共同特征(成员变量)用来描述对象的特征:
private String stuNumber;
private String stuName;
private int stuAge;
private String stuClass;
他们的共同行为:学习、吃饭、休息,所以我们可以给他们定义以上行为(方法)用来描述对象的行为:
public void StuStudy(){
//这里是学习方法
}
public void StuEat(){
//这里是吃饭方法
}
public void StuSleep(){
//这里是休息方法
}
这就是一种封装
- 局部变量和成员变量的作用域问题
按作用域来分,变量可以有下面4种:局部变量、成员变量、方法参数和异常处理参数。
局部变量在方法或方法的一块代码中声明,它的作用域为它所在的代码块(代码块是整个方法或方法中的某块代码,即以{厎包括的代码)。
成员变量是一个类的成员。它在一个类的内部,但在任何方法或构造器之外声明。成员变量的作用域是整个类。
方法参数被传递给方法或构造器,它的作用域就是它所在方法或构造器的代码。
异常处理参数被传递给异常处理代码,它的作用域是异常处理部分,也就是catch语句后面的{厎之间的代码块。
在一个确定的域中,变量名应该是惟一的。通常,一个域用大括号{}来划定。
- 静态属性、静态方法、静态代码块
1.什么是静态属性、静态方法
用static修饰符修饰的属性和方法叫作静态属性和静态方法
静态属性和非静态属性的区别:
1.在内存中存放的位置不同:所有static修饰的属性和方法都存放在内存的方法区里,而非静态的都存在堆内存中
2.出现的时机不同:静态属性和方法在没创建对象之前就存在,而非静态的需要在创建对象才存在
3.静态属性是整个类都公用的
4.生命周期不一样,静态在类消失后被销毁,非静态在对象销毁后销毁
5.用法:静态的可以直接通过类名访问,非静态只能通过对象进行访问
2.使用static的注意事项
带静态修饰符的方法只能访问静态属性
非静态方法既能访问静态属性也能访问非静态属性
非静态方法不能定义静态变量
静态方法不能使用this关键字
静态方法不能调用非静态方法,反之可以
3.父子类中静态和非静态的关系
对于非静态属性,子类可以继承父类非静态属性,但是当父子类出现相同的非静态属性时,不会发生子类的重写并覆盖父类的非静态属性,而是隐藏父类的非静态属性
对于非静态方法,子类可以继承并重写父类的非静态方法
对于静态属性,子类可以继承父类的静态属性,但是如何和非静态属性一样时,会被隐藏
对于静态方法,子类可以继承父类的静态方法,但是不能重写静态方法,同名时会隐藏父类的
注:静态属性、静态方法、非静态属性都可以被继承和隐藏,但是不可以被重写,非静态方法可以被重写和继承
4.静态代码块
静态代码块只能写在类中方法外,不能写在方法中,它会随着类的加载而优先于各种代码块和构造方法的加载,并且只会
加载一次,如果出现多个静态代码块,会按照书写顺序加载
静态代码块的作用:
一般情况下,有些代码需要在项目启动的时候就执行,这时候就需要静态代码块,比如一个项目启动需要加载配置文件,或初始化内容等。
静态代码块不能出现在任何方法体内
对于普通方法:普通方法是需要加载类new出一个实例化对象,通过运行这个对象才能运行代码块,而静态方法随着类加载就运行了。
对于静态方法:在类加载时静态方法也加载了,但是必须需要类名或者对象名才可以访问,相比于静态代码块,静态方法是被动运行,而静态代码块是主动运行
静态代码块不能访问普通变量
普通变量只能通过对象调用的,所以普通变量不能放在静态代码块中。
5.普通代码块和构造代码块
静态代码块和构造代码块在声明上少一个static关键字
执行时机:
构造代码块在创建对象时被调用,每次创建对象都会调用一次,且优先于构造函数执行。
注:不是优先于构造函数执行,而是依托于构造函数,如果不创建对象就不会执行构造代码块
普通代码块和构造代码块的区别在于,构造代码块是在类中定于的,而普通代码块是在方法体中定义的,执行顺序和书写顺序一致。
6.执行顺序
静态代码块>构造代码块>构造函数>普通代码块
- 面向对象的继承特性
继承(extends):
让类与类之间产生关系,子父类的关系
继承的好处与弊端:
好处:
提高代码的复用性
提高了代码的维护性
让类与类之间产生关系,是多态的前提
弊端:
1、java只支持单根继承,不支持多继承,存在单继承的局限性。
2、继承最大的弊端就是耦合度太高。
3、子类只能继承父类成员。比如,子类不能继承父类的私有成员
-
继承中构造方法的细节
-
面向对象的多态特性
-
抽象方法与抽象类
-
接口
5
第四部分:异常
-
异常的概念
-
异常的分类
-
异常的理解
-
常见异常介绍
-
运行时异常
-
编译时异常
-
运行和编译异常区别
-
异常的处理方式之捕获异常
-
异常的处理方式之抛出异常
-
异常的处理方式之断点调试
-
断点调试之引导运行步骤
-
自定义异常
-
异常关键字处理
-
关键字执行流程
-
异常总结
6
第五部分:集合
-
集合的概念和作用
-
集合和数组的区别
-
集合框架体系介绍
-
集合框架之Collection接口
-
ArrayList和LinkedList的方法使用
-
ArrayList和LinkedList各自的工作原理分析原理分析
-
使用多种方式遍历集合
-
HashSet和LinkedHashSet各自的工作原理分析
-
集合框架之Map接口
-
泛型的使用
-
Collections工具类的使用
7
第六部分:IO流
-
File类的作用
-
File类中常用方法的使用介绍
-
使用File类操作文件和文件夹
-
相对路径和绝对路径的介绍
-
IO流的概念和工作原理
-
IO流的分类
-
文件流的使用
-
转换流的使用
-
缓冲流的使用
-
对象流的使用
-
内存流的使用
-
使用不同的流实现文件内容的拷贝
8
第七部分:多线程
-
进程和线程的介绍
-
进程和线程之间的区别与联系
-
线程实现方式之继承自Thread类
-
线程实现方式之实现Runnable接口
-
线程实现方式之线程池
-
线程的生命周期
-
线程中常用方法的使用
END
第二阶段:JavaWeb
1
JavaWeb课程内容涉及:HTML5课程、CSS3、JavaScript、MySQL使用、JDBC连接池、Servlet、JSP、AJAX、jQuery、Bootstrap。
2
第一部分:HTML5
-
html概述
-
html基本标签
-
图片标签
-
超链接标签
-
表格标签
-
无序列表标签
-
有序列表标签
-
定义列表标签
-
div标签
-
语义化标签
-
表单标签
3
第二部分:CSS3
-
CSS3简介和用途
-
CSS3书写规范
-
CSS3基本语法
-
CSS3三种使用方式
-
标签选择器
-
Id选择器
-
Class选择器
-
属性选择器
-
层次选择器
-
文字、文本属性
-
背景、列表属性
-
尺寸、显示、轮廓属性
-
浮动、定位属性
-
盒子模型
-
CSS3高级属性
4
第三部分:JavaScript
-
JavaScript概述
-
JavaScript发展史
-
JavaScript组成
-
数据类型
-
运算符
-
分支语句
-
循环语句
-
系统函数、自定义函数、匿名函数
-
常见事件
-
数组、字符串、日期对象
-
正则表达式
-
BOM对象:window、history、location
-
DOM概念
-
DOM操作:创建、修改内容、删除
-
Css样式操作
5
第四部分:MySQL使用 或oracle数据库
-
数据库简介
-
MySQL的安装与使用
-
MySQL客户端和服务器配置
-
用户权限管理
-
DDL创建数据库和表
-
约束与外键
-
DML实现添加、修改、删除数据
-
聚合函数、日期函数等
-
DQL简单查询
-
排序、分组、筛选
-
多表查询
-
子查询
-
in和exists关键字
-
分页查询
-
Mysql SQL语句优化介绍
6
第五部分:JDBC连接池
-
JDBC概述
-
JDBC使用步骤
-
Connection、Statement、ResultSet接口
-
使用JDBC 完成数据库DML操作
-
PreparedStatement对象
-
大数据的操作
-
批量处理与元数据
-
事务处理
-
隔离级别
-
自定义连接池
-
DBCP、C3p0连接池
-
DBUtis工具类
-
QueryRunner
-
自定义结果集处理
-
连接池知识总结
7
第六部分:Servlet
-
Tomcat与Eclipse的集成开发
-
什么是Servlet
-
Servlet的进化史
-
Servlet的优化过程
-
Servlet中应用的多线程概念
-
Servlet接收客户端请求信息
-
Servlet响应客户端信息
-
Servlet的生命周期
-
重定向写法
-
转发写法
-
转发和重定向区别
-
HttpServletRequest获取中文乱码问题
-
HttpServletResponse响应中文乱码问题
-
Servlet路径映射问题
-
Servlet多路径映射
8
第七部分:JSP
-
什么是JSP
-
JSP的内置对象
-
透析JSP的本质
-
JSTL+EL
-
MVC介绍
-
分层的重要性
-
Web工程中事务实现
-
Session的使用
-
Cookie的使用
-
web工程中连接池的使用
-
实现用户的自动登录
-
文件的上传、下载
-
过滤器、 监听器
-
反射、注解、泛型
-
综合案例练习
9
第八部分:AJAX
-
Ajax技术背景
-
Ajax技术的理解
-
XMLHttpRequest使用步骤
-
XMLHttpRequest GET/POST的区别
-
同步请求&异步请求
-
同步请求&异步请求的区别
-
Ajax获取不同的返回值类型
-
Ajax使用原生JavaScript和Jquery的区别
-
Ajax响应状态处理
-
JSON语法
-
Java JSON 解析
-
Java JSON 生成
-
Java JSON 第三方工具快速解析
-
JavaScript JSON转换
-
Jquery JSON转换
END
Java框架课程
1
Java框架课程内容涉及:Spring、Spring MVC、MyBatis、SVN、Git、Maven
2
第一部分:Spring
-
框架原理介绍
-
框架环境搭建
-
快速入门
-
创建Bean的方式及实现原理
-
Bean种类
-
Bean生命周期
-
Bean的作用域
-
Bean的注值方式
-
整合Junit测试
-
注解装配Bean
-
注解装配Bean
-
AOP思想、原理解剖
-
AOP底层JDK动态代理
14.AOP编程
- AspectJ介绍及实现AOP开发
16.事务
- Web项目集成Spring
3
第二部分:Spring MVC
-
Spring MVC 概述
-
使用 @RequestMapping映射请求
-
请求处理方法签名概述
-
处理方法签名详细说明
-
使用 HttpMessageConverter
-
处理模型数据
-
数据绑定流程剖析
-
数据格式化
-
数据校验
-
视图和视图解析器
-
处理方法的数据绑定
-
视图和视图解析器
-
文件上传下载
-
JSON处理
-
拦截器
第三部分:MyBatis
-
MyBatis数据框架介绍
-
MyBatis对比Hibernate框架
-
MyBatis配置、查询数据
-
MyBatis全局配置文件
-
MyBatis全局配置文件元素详细介绍
-
Mapper映射文件
-
MyBatis两种开发方式
-
MyBatis中别名配置
-
MyBatis # 和 $ 拼接参数区别
-
关联查询,动态sql
-
MyBatis缓存机制、整合ehcache
-
MyBatis二级缓存处理
-
MyBatis、Spring、SpringMVC整合
-
分页插件
-
MyBatis逆向工程
第四部分:SVN 和git
-
SVN简介
-
SVN和Git对比
-
SVN服务器搭建
-
SVN创建仓库
-
SVN创建用户以及分配权限
-
SVN签出、提交、更新
-
Eclipse整合svn插件
-
Idea整合svn插件
-
使用SVN更新提交
-
SVN仓库分析
-
SVN协同修改&冲突解决
-
SVN代码整合注意事项
-
SVN权限管理
-
SVN数据回滚
-
TortoiseSVN
6
第五部分:Maven
-
Maven环境搭建
-
Maven构建项目
-
Maven本地仓库配置
-
Maven中央仓库配置
-
Maven基本概念
-
Maven基本命令介绍
-
Maven于Eclipse整合
-
Maven于Idea整合
-
Maven创建web工程
-
pom.xml、依赖管理
-
坐标、依赖、生命周期等
-
Eclipse下的Maven使用
-
Maven中 继承、聚合
-
Maven构建SSH/SSM应用
-
自动部署、持续集成、持续部署
第六部分
项目开发