导图社区 java知识点总结
java知识点总结,包括web、框架、基础、数据库、项目和易混淆知识点等,非常适合Java入门者使用,必备学习资料。
编辑于2021-10-14 22:10:08java知识点总结
web
tomcat
servlet
ajax
过滤
监听
前端
jsp
框架
Struts2
Hbernate
Spring
ssh
Spring Data
spring data 出现的目的,就是为简化、统一、持久层各种实现技术 Spring data 实现条件查询 第一种 根据方法命名规则自动生成 基于一列查询等值查询 findBy 列名 例如: findByName(String name) 基于一列模糊查询 findBy 列名 Like 例如: findByNameLike(String name) 基于两列等值查询 findBy 列名 And 列名 例如: findByUsernameAndPassword(String 第二种 不按命名规则写的查询方法,可以配置@Query 绑定 JPAL 语句或者 SQL 语句 spring data 完成修改,删除 使用@Query 注解完成 , 搭配使用@Modifying 标记修改、删除操作 懒加载异常,在get方法上面添加@Json(serivalize=false)
微信图片_20170905225219.png
基础二
面向对象
基本概念
面向过程:其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。 面向对象思想:面向对象是基于面向过程的编程思想。就是不断的创建对象,使用对象,指挥对象 面向过程的特点 强调的是过程,所有事情都需要自己完成 面向对象的特点 是一种更符合我们思想习惯的思想(懒人思想,我把事情自己不做,交给别人去做) 可以将复杂的事情简单化(对使用者来说简单了,对象里面还是很复杂的) 将我们从执行者变成了指挥者角色发生了转换 我们如何描述现实世界事物 属性 就是该事物的描述信息(事物身上的名词) 行为 就是该事物能够做什么(事物身上的动词) Java中最基本的单位是类, 成员变量 就是事物的属性 成员方法 就是事物的行为 类和对象的概念 类:是一组相关的属性和行为的集合(我们班所有的同学都具备相同的属性和行为,比如:姓名,年龄,学习,这样就把所有的学生成为学生类) 对象:是该类事物的具体体现(说某个同学时,他都具备自己特有的属性和行为) 我们如何创建对象呢? * 格式:类名 对象名 = new 类名(); * 对象如何访问成员呢? * 成员变量:对象名.变量名 * 成员方法:对象名.方法名(..) OOP:面向对象编程。 OOA面向对象分析 OOD:面向设计 7、匿名对象: 即没有名字的对象,简化书写用的。 基本使用: 当方法只调用一次的时候可以使用匿名对象 可以当作参数进行传递,但是无法在传参之前做其他的事情
封装
A:封装概述 是面向对象三大特征之一 B:封装原则: 将不需要对外提供的内容都隐藏起来。 把属性隐藏,提供公共方法对其访问。 C:好处: 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性 构造方法:给对象的数据进行初始化 如果你不提供构造方法,系统会给出默认无参构造方法 如果你提供了构造方法,系统将不再提供 构造方法也是可以重载的,重载条件和普通方法相同
继承
继承:将多个类中共同的成员变量和成员方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取到父类中的成员了。 Java语言只支持单一继承,只能继承一个父类,支持多层继承 关键字:extends 继承中构造方法的执行顺序 在子父类中,创建子类对象,调用子类的构造方法, 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造, 则默认调用父类无参构造 为什么要调用父类构造? 因为需要给父类的成员变量初始化 肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码 子类可以继承父类的构造方法吗?不可以的, 子类只能调用父类的构造方法 继承的优缺点 优点: 提高代码的复用性,可维护性 缺点 增强了耦合性 开放的原则:低耦合,高内聚 耦合:是类与类之间的关系 内聚:独立完成功能
多态
对象的多种形态就是多态。 格式 多态的定义格式:就是父类的引用变量指向子类对象 父类类型 变量名 = new 子类类型(); 多态的前提: * 子父类的继承关系 * 方法的重写 * 父类引用指向子类对象 多态成员的特点 简单记: 成员变量 编译时看的是左边,运行时看的左边 成员方法 编译时看的是左边,运行时看右边 静态方法 编译时看的是左边,运行时看的也是左边 多态中向上转型与向下转型 多态的弊端: 不能直接使用子类的特有功能 向上转型:自动类型提升 向下转型:强制类型转换 多态的转型分为向上转型与向下转型两种: A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。 使用格式: 父类类型 变量名 = new 子类类型(); 如:Person p = new Student(); B:向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的 使用格式: 子类类型 变量名 = (子类类型) 父类类型的变量; 如:Student stu = (Student) p; 多态的优缺点 优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性 缺点:无法直接访问子类特有的成员
静态static
静态的特点 被static修饰的成员变量属于类,被所有的对象所共享,不属于这个类的某个对象。 访问静态成员的格式: 类名.静态成员变量名 类名.静态成员方法名(参数) 静态的加载优先于对象,随着类的加载而加载 静态的注意事项 A:静态成员只能直接访问静态成员 B:非静态成员既可以访问非静态成员也可以访问静态成员 A:静态优点: 对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份 可以直接被类名调用,不用在堆内存创建对象 静态成员可以通过类名直接访问,相对创建对象访问成员方便 B:静态弊端: 访问出现局限性。(静态虽好,但只能访问静态)
代码块
分类: 1.局部代码块 位置:在方法内部 作用:是用来限制变量的声明周期 2.构造代码块 位置:和构造方法是同级别的,在类中. 作用:提取共有的数据, 可以对成员变量进行初始化.每次创建对象都会执行,并且在构造方法执行之前执行 3.静态代码块 位置:和构造方法是同级别的,在类中方法外. 是被static修饰的. 作用:随着类的加载而加载,只加载一次,加载类时需要做的一些初始化,比如加载驱动(主要作用就是用来加载驱动的) 4.同步代码块(被synchronized修饰的代码块 ) 代码块的执行顺序(不包括同步代码块) 先执行 --> 静态代码块 再次执行 --> 构造代码块 再次执行 --> 构造方法 划分就是为了更好的确定和细致化功能,以方便使用 局部代码块: 以”{}”划定的代码区域,此时只需要关注作用域的不同即可 方法和类都是以代码块的方式划定边界的 构造代码块 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作 每创建一个对象均会执行一次构造代码块。 静态代码块 它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。 该类不管创建多少对象,静态代码块只执行一次。 可用于给静态变量赋值,用来给类进行初始化。
final
final:关键字(修饰符). 可以修饰类:类不能被继承 可以修饰方法:方法不能被重写 可以修饰变量:变量是常量,只能被赋值一次,是字面值常量,在常量池 可以修饰引用数据类型,引用数据类型不能改变的是地址值,值可以通过get/set方法改变 final,finally,finalizes final,finally:是关键字 finally:作用:是用来释放资源 finalizes():是一个方法,当垃圾回收的时候,会调用该方法.
抽象类
abstract:关键字,用于修饰方法和类 抽象方法:不同类的方法是相似,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体方法体的方法就是抽象方法 抽象类:有抽象方法的类必须是抽象类 注意:一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类 抽象类其实也是给子类定义规则, 抽象类本身是不能被实例化的. 把所有子类的共性的内容,抽取到一个抽象类中. 抽象类的特点: 抽象方法可以在抽象类里面 抽象类和抽象方法必须被abstract修饰 抽象类不能创建对象(不能实例化) 抽象类中可以有非抽象的方法 抽象类和类的关系也是继承 一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类 如果你看到一个抽象类中,没有抽象方法,只有一个目的:防止创建该类的对象. 抽象类的成员特点: 成员变量 可以有成员变量 可以有常量 成员方法 可以有抽象方法 可以有非抽象方法 构造方法 可以有构造方法的,需要对抽象类的成员变量进行初始化; 抽象 abstract 不能和 哪些关键字共存 1. final 2. private 3. static
接口
接口 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。 这样将功能的定义与实现分离,优化了程序设计。 面向接口编程 接口定义时需要使用interface关键字 虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。 这点可以让我们将接口看做是一种只包含了功能声明的特殊类。 类与接口的关系为实现关系,即类实现接口。实现的动作类似继承,只是关键字不同,实现使用 implements 接口中成员的特点: 1,成员变量 只能是常量 默认用 public static final 修饰 且 这一次必须赋值. 2,成员方法 默认使用 public abstract 修饰 3,构造方法 接口中是没有构造方法的. 接口和类的关系 A:类与类之间: 继承关系,一个类只能直接继承一个父类,但是支持多重继承 B:类与接口之间: 实现关系,一个类可以实现多个接口 C:接口与接口之间: 只有继承关系,一个接口可以继承多个接口 接口优点 1.解决了Java单继承的局限性。 2.对外提供规则(USB接口) 3.降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率) 接口和抽象类的区别 1.共性: 不断的进行抽取,抽取出抽象的,没有具体实现的方法,都不能实例化(不能创建对象) 2.区别1: 与类的关系 (1)类与接口是实现关系,而且是多实现。 类与抽象类是继承关系,Java中的继承是单一继承,可以多层继承,一个类只能继承一个父类,但是可以有爷爷类 区别2: 成员 a.成员变量 抽象类可以有成员变量,也可以有常量 接口只能有常量,默认修饰符public static final b.成员方法 抽象类可以有抽象方法,也可以有非抽象方法 //抽象类中可不可以没有抽象方法呢?可以的! //既然抽象类中没有抽象方法,那这个类为什么还要写成抽象的? --- 不让外界创建对象 //不让外界创建对象,现在有几种方式?1,抽象 2,私有化构造方法 //1,抽象 2,私有化构造方法这两种方法 在什么时候用哪种? //抽象 --- 父类中使用 //私有化构造方法 --- 工具类中使用. 接口只能有抽象方法,默认修饰符 public abstract c.构造方法 抽象类有构造方法,为子类提供 接口没有构造方法
包及权限修饰符
java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件。 当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理。 常见的包有 java.io java.lang java.util java.math java.sql 包的特点: 可以有多层 不同包下的文件名可以重复 包的声明必须是第一行代码 不同包之间的互相访问 使用类的全名 使用关键字import将类导入 *代表的是通配符,代表导入了这个包下所有的类,并没有导入子包下的类 如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。
微信图片_20170906153014.png
微信图片_20170906153021.png
内部类
将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。 成员内部类: 在类的成员位置,和成员变量以及成员方法所在的位置是一样的 在内部类当中,可以直接访问外部类的成员,包括私有成员 成员内部类可以使用的修饰符:private,public,procted,final,static,abstract 外部类名.内部类名 变量名 = new 外部类名().new 内部类名(); 局部内部类 在方法内,出了方法之后就无法使用 匿名内部类: 可以把匿名内部类看成是一个没有名字的局部内部类 定义在方法当中 必须在定义匿名内部类的时候创建他的对象 格式: new 类/接口(){ 如果是创建了继承这个类的子类对象,我们可以重写父类的方法 如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法 } 创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象
集合/数组
数组
数组概念 数组是存储同一种数据类型多个元素的容器,长度是固定的 数组既可以存储基本数据类型,也可以存储引用数据类型。 数组的定义格式 格式1:数据类型[] 数组名; 格式2:数据类型 数组名[]; 注意:这两种定义做完了,数组中是没有元素值的。 数组的初始化 数组初始化概述: Java中的数组必须先初始化,然后才能使用。 所谓初始化:就是为数组中的数组元素分配连续的内存空间,并为每个数组元素赋值。 数组的初始化方式 动态初始化 只指定长度,由系统给出初始化值 格式:数据类型[] 数组名 = new 数据类型[数组长度]; 静态初始化 给出初始化值,由系统决定长度 数据类型[] 数组名 = {}; 系统的默认的初始值:整数 0; 浮点0.0 字符\u0000 \ 转义字符 u unicou码表 0 表示16进制的0 布尔 false 引用null 二维数组内存 通过对内存图分布可知,首先在栈内存中加载main函数,开辟空间,定义一个变量arr,在堆内存中通过New创建一个数组实体int[2],并分配其地址值为0x0045,数组元素值进行默认初始化为Null;然后把地址值赋值给栈内存中的arr. 在堆内存中开辟两块空间,分别用来存放二维数组中的数组元素,分配其地址值分别为0x0056、0x0089,然后对将地址值传给二维数组中的元素,所以说对内存中二维数组存储的是一维数组的地址值。最后变量通过二维数组的地址0x0045指向二维数组。 Int[][] arr=new int[2][3]; 冒泡排序: 两两比较 大向前 小向后 Public static void bubbleSort(int[] arr) { For(int x=0;x { For(int y=0;y { If(arr[y]>arr[y+1]) { //位置置换 } } } } 选择排序:int[] n={1,3,2,5,4};//a[0] 到a[i] 第一个数从头比较到尾巴 如果a[i]比a[0] 大交换 再用a[0]这个数一直比较到尾 Public static void selectSort_2(int[] arr) { For(int x=0;x { Int num=arr[x]; Int index=x; For(int y=x+1;y { If(num>arr[y]) Num=arr[y]; Index=y; } If(index!=x) { int temp = arr[x]; arr[x] = arr[index]; arr[index] = temp; } } } 折半查找: Public static void binarySearch(int[] arr int key) { Int min,mid,max; Min=0; Max=arr.length-1; Mid=(min+max)>>1//相当于/2,右移的效率比它要高 While(arr[mid]!=key) { If(key>arr[mid]) Min=mid+1; Else if(key Min=mid-1; If(max Return -1; Mid=(max+min)>>1; } Return mid; }
内存管理
内存分为5块 栈 存储局部变量 stack 堆 存储new出来的东西 heap 方法区 (字节码文件在内存中的位置) method area 本地方法区 (和系统相关) native method 寄存器 (给CPU使用) Register 先有地址值,再分配内存空间
集合
集合的体系结构: 由于不同的数据结构(数据的组织,存储方式),所以Java为我们提供了不同的集合, 但是不同的集合他们的功能都是相似,不断的向上提取,将共性抽取出来,这就是集合体系结构形成的原因 数组转集合toArray(T[] a) 迭代器遍历 使用迭代器: Iterator iterator(); 该方法返回的是一个对象,但是Iterator是一个接口,返回肯定不是本接口对象,而是实现类对象. 1.你想变量哪个集合,就先获取该集合的迭代器. 用该集合对象去调用iterator(); 2.先判断迭代器中是否有元素 使用迭代器中boolean hasNext();如果该方法返回为true证明有元素,就可以获取. 使用循环进行判断 while(hasNext()) 3.如何获取元素呢? 使用迭代器中 Object next()来获取元素. HashSet集合本身不能保证元素唯一,让HashSet集合保证元素唯一是借助了两个方法: hashCode()和equals(); 在添加元素的时候,会先调用 hashCode()方法: 如果HashCode()方法返回的值不同.直接添加元素. 如果HashCode()方法返回的值相同,需要调用equals()方法. 如果equals()返回为 false: 添加元素 如果 equals()方法为 true: 是同一个元素,不添加. 并发修改异常 产生并发修改异常的原因? 当我们使用迭代器去遍历集合中的元素,在遍历的过程中使用来集合的方法(添加或者删除的)方法,改变了原来集合元素的个数. 为什么使用迭代器变量集合元素的时候,使用来集合的添加或者删除方法,会包并发修改异常? 无论我们添加方法还是删除方法,对集合元素的个数有改变,在该类中有一个变量,要记录你添加或者删除的次数. 当我们使用来迭代器变量的时候,会把该次数赋值给迭代器,这个变量只会赋值一次.如果当遍历的时候,你用集合中的 添加或者删除方法,那么该变量会再次加1,但是迭代器中的拿到值还是操作之前的那个变量值. 如果这两个值不相同的情况下,就会报并发修改异常. ‘ 解决并发修改异常 在使用迭代器变量集合的时候,不要使用集合中的添加和删除方法. 我们可以使用迭代器自身的方法,对集合元素进行添加或者删除.(ListIterator)这个方法只要在List已经其实现类中才有 数据结构 数组: 特点:查询快,增删慢. 链表: 特点:查询慢,增删快. 栈: 特点:先进后出 队列: 特点:先进先出 Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值 Map和Collection有什么区别? Map:是一个双列集合,常用语处理有对应关系的数据,key是不可以重复的,我们也称之为是夫妻对集合 Collection:是单列集合,Collection有不同的子体系,有的允许重复有索引有序,有的不允许重复而且无序,那么我们也称之为单身汉集合 单列表中操作的是值,双列集合中操作的是键. Map集合的几种遍历方式 1.通过 keySet();获取map集合中所有的键,返回值是Set集合 第一步:创建集合对象 HashMap map = new HashMap(); 第二步:获取集合中所有的键 Set keys = map.keySet(); 1.使用增强for循环 for(String key : keys){ //键对应的值 String value = map.get(key); } 2.使用迭代器 Iterator it = keys.iterator(); while(it.hasNext()){ String key = it.next(); String value = map.get(key); } 2.通过 entrySet();获取map集合中的键值对对象.返回的Set集合 第一步:创建集合对象 HashMap map = new HashMap(); 第二步:获取集合中所有的键值对对象 Set> entrys = map.entrySet(); 1.使用增强for循环遍历 for(Map.Entry entry :entrys ){ String key = entry.getKey(); String value = entry.getValue(); } 2.使用迭代器 Iterator it = entrys.iterator(); while(it.hasNext()){ Map.Entry entry = it.next(); String key = entry.getKey(); String value = entry.getValue(); }
集合体系图.png
集合和数组的区别
数组定义时长度是固定的(必须明确元素类型和长度) 集合定义时,可以不用明确长度,长度是可变的。 底层是数组实现的集合默认长度是10,超出就扩充1.5倍 数组存储是同一类型的数据,集合存储的是对象,而对象可以是任意类型 数组可以存储基本数据值和对象,而集合只能对象。
API
被abstract修饰的类
DateFormat Calendar
被final修饰的
String Scanner StringBuilder StringBuffer System Math类
API汇总
API(Application Programming Interface) : 应用程序编程接口,API指的就是JDK中提供的各种功能的Java类 scanner类 Scanner sc = new Scanner(System.in); String类 "abc"是String类的一个实例,或者成为String类的一个对象 字符串字面值"abc"也可以看成是一个字符串对象 字符串是常量,一旦被赋值,就不能被改变 字符串本质是一个字符数组 字符串在内存中的位置 通过构造方法创建字符串对象是在堆内存。 直接赋值方式创建对象是在方法区的常量池。 StringBuilder:是一个可变的字符串。字符串缓冲区类。 String和StringBuilder的区别: String的内容是固定的 StringBuilder的内容是可变的 String:线程是安全的 StringBuilder:线程非安全的,效率高 StringBuffer:线程安全的,效率低 StringBuilder的初始容量为16,每次扩容增加16 Object类 获取字节码对象的三种方式 通过对象..class来获取 通过Class.forName("全类名")来获取 由于toString方法返回的结果是内存地址,而在开发中, 经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。 equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。 在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。 system构造方法被私有了,不能实例化 static long currentTimeMillis() 返回以毫秒为单位的当前时间 static void exit(int status) 终止当前正在运行的 Java 虚拟机 Date类 Date() :创建的是一个表示当前系统时间的Date对象 Date(long date) :根据"指定时间"创建Date对象 格式化(也就是日期 -> 文本)、解析(文本-> 日期) SimpleDateFormat yyyy年MM月dd日 HH:mm:ss 解析的字符串,模式必须和构建对象的模式一样 Calendar是日历类 创建对象Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR) 包装类 作用:可以提供更多的操作基本数值的功能 byte Byte short Short char Character int Integer long Long float Float double Double boolean Boolean 自动拆箱:对象转成基本数值 自动装箱:基本数值转成对象 正则表达式 正则表达式是专门解决字符串规则匹配的工具。 boolean matches(String regex) :判断当前字符串是否匹配指定的正则表达式,如果匹配则返回true,否则返回false
jdk1.5特性
JDK1.5特性:自动装箱和拆箱 JDK1.5特性 可变参数:当参数不确定的时候,类型要明确,Java可以把多个参数直接帮我们转成数组 注意: 在可变参数之后不可再追加参数 参数的数量自定义,可以给多个,甚至也可以一个都不给
jdk1.7特性
接口类
IO流
多线程
方法加强
xml/schame
反射
网络编程
设计模式
子主题 1
子主题 2
数据库
mysql
Orcle
jdbc
基础一
java语言基础
原始Java编译的过程
运行代码步骤: •在命令行模式中,输入javac命令对源代码进行编译,生成字节码文件 –javac 源文件名.java •编译完成后,如果没有报错信息,输入java命令对class字节码文件进行解释运行,执行时不需要添加.class扩展名 –java 源文件
jdk,jvm,jre
什么是JVM JVM是java虚拟机(JVM Java Virtual Machine),java程序需要运行在虚拟机上,不同平台有自己的虚拟机,因此java语言可以跨平台 B:什么是JRE 包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。 JRE:JVM+类库。 C:什么是JDK JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。 其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等 JDK:JRE+JAVA的开发工具。
doc常用命令
d: 回车 盘符切换 dir(directory):列出当前目录下的文件以及文件夹 cd (change directory)改变指定目录(进入指定目录) •进入 cd 目录;cd 多级目录 •回退 cd.. ;cd\ cls : (clear screen)清屏 exit : 退出dos命令行 使用 git --version 查看 git 是否安装成功 cmd 窗口 --- 执行 netstat -ano 查看哪个进程占用端口
环境变量配置
–程序的编译和执行需要使用到javac和java命令,所以只能在bin目录下写程序 –实际开发中,不可能把程序写到bin目录下,所以我们必须让javac和java命令在任意目录下能够访问 如何配置 –创建新的变量名称:JAVA_HOME 计算机-右键属性-高级系统设置-高级-环境变量-系统变量 –为JAVA_HOME添加变量值:JDK安装目录 –在path环境变量最前面添加如下内容 %JAVA_HOME%\bin; path与classpath的区别? path是用于定义系统中的可执行程序的所在路径。方便于执行系统中的执行文件,比如 exe bat。 classpath用于定义java的类文件class文件的所在路径。是为了让jvm去classpath路径下查找要运行的java程序。
java版本
javaSE:标准版:是为了开发桌面和商务应用程序提供的解决方案 javaEE:企业版:为了开发企业环境下的应用程序而提供的一套解决方案; javaME:小型版:是为了开发电子消费品和嵌入式设备提供的解决方案;
eclipse
Eclipse工作空间的基本配置 A:行号的显示和隐藏 显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。 隐藏:把上面的动作再做一次。 B:字体大小及颜色 a:Java代码区域的字体大小和颜色: window -- Preferences -- General -- Appearance -- Colors And Fonts -- Java -- Java Edit Text Font b:控制台 window -- Preferences -- General -- Appearance -- Colors And Fonts -- Debug -- Console font c:其他文件 window -- Preferences -- General -- Appearance -- Colors And Fonts -- Basic -- Text Font C:窗体给弄乱了,怎么办? window -- Perspective -- Reset Perspective D:控制台找不到了,怎么办? Window--Show View—Console
java语法格式
常量
常量 字面值常量 自定义常量:被final修饰 常量概述 –在程序执行的过程中,其值不可以发生改变的量 常量分类 –字符串常量 用双引号括起来的内容(“HelloWorld”) –整数常量 所有整数(12,-23) –小数常量 所有小数(12.34) –字符常量 用单引号括起来的内容(‘a’,’A’,’0’),只能必须放一个 –布尔常量 较为特有,只有true和false –空常量 null
关键字
2.4.1关键字概述 被Java语言赋予特定含义的单词 2.4.2关键字特点 组成关键字的字母全部小写 常用的代码编辑器,针对关键字有特殊的颜色标记
注释
什么是注释 –用于解释说明程序的文字 B: Java中注释分类 单行注释 –格式: //注释文字 多行注释 –格式: /* 注释文字 */ 文档注释 –格式:/** 注释文字 */ C: 注释的作用 a:解释说明程序 b:帮助我们调试错误 注意点: 1、//单行注释,能嵌套多行注释和单行;2、/**/多行注释:能嵌套单行注释,不能嵌套多行注释,因为结尾不对,3、/***/文档注释,可以通过javadoc来提取,生成说明书,放到网页 文中,这也是和/**/的区别
变量
变量概述 –在程序执行的过程中,在某个范围内其值可以发生改变的量 注意事项 •变量未赋值,不能直接使用 •变量只在它所属的范围内有效。 •一行上可以定义多个变量,但是不建议
数据类型
为什么有数据类型 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存中分配了不同大小的内存空间 Java中数据类型的分类 基本数据类型 byte 1 -127-128 short 2 -32768-32768 int 4 long 8 float 4 double 8 boolean 1 理论上占8分之一字节,但Java没有明确指定它的大小 char 2 引用数据类型 类 接口 数组 整数默认是int类型,定义long类型的数据时,要在数据后面加L。 要注意一下 浮点数默认是double类型,定义float类型的数据时,要在数据后面加F。 数据类型转换 隐式数据类型转换 取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算 强制转换的格式 强制转换的注意事项 * 如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同 强制转换会损失精度
标识符
标识符概述 A 作用 –给包,类,方法,变量等起名字 B 组成规则 –由字符,下划线_,美元符$组成 •这里的字符采用的是unicode字符集,所以包括英文大小写字母,中文字符,数字字符等。 –注意事项 –不能以数字开头 –不能是Java中的关键字 C : 命名原则:见名知意 a包 最好是域名倒过来,要求所有的字母小写 b类或者接口 如果是一个单词首字母大写 如果是多个单词每个单词首字母大写(驼峰标识) c方法或者变量 如果是一个单词全部小写 如果是多个单词,从第二个单词首字母大写 d常量 如果是一个单词,所有字母大写 如果是多个单词,所有的单词大写,用下划线区分每个单词
运算符
•运算符 对常量和变量进行操作的符号称为运算符 •表达式 用运算符把常量或者变量连接起来符号就可以称为表达式。 •常用运算符 算术运算符 %:取余运算符。得到的是两个相除数据的余数。 /:除法运算符。得到是两个相除数据的商 如果++或者--在变量的后面,先拿变量参与操作,后变量做++或者-- 如果++或者--在变量的前面,先变量做++或者--,后拿变量参与操作 赋值运算符 关系运算符 逻辑运算符 逻辑运算符一般用于连接boolean类型的表达式或者值。 &逻辑与:有false则false。 |逻辑或:有true则true。 ^逻辑异或:相同为false,不同为true。 !逻辑非:非false则true,非true则false。 一个数同时异或这个数两次结果还是这个数 &&和&的区别? a:最终结果一样。 b:&&具有短路效果。左边是false,右边不执行。 &是无论左边是false还是true,右边都会执行 位运算符 >>:右移:规律:右移几位就是除以2的几次方 三元运算符 (关系表达式)?表达式1:表达式2; 如果关系表达式为true,运算后的结果是表达式1; 如果关系表达式为false,运算后的结果是表达式2; 三元运算符就是一个运算符,必须要有结果,然而if else可以没有结果,当if else运算后,有一个具体的结果时,可以简化为三元运算符。这也是三元运算符和if esle的区别;
循环语句
虽然可以完成同样的功能,但是还是有小区别: do…while循环至少会执行一次循环体。 for循环和while循环只有在条件成立的时候才会去执行循环体 for循环语句和while循环语句的小区别: 使用区别:控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消失,能够提高内存的使用效率。 switch 表达式的取值:byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是String case后面只能是是常量 switch语句格式: * switch(表达式) { * case 值1: * 语句体1; * break; * ... * default: 语句体n+1; * break; * } 4、无限循环的最简单的表现形式: For(;;){}、while(true){} break 退出当前循环 continue 退出本次循环 return 结束方法 控制循环标记 break a;
方法
方法就是完成特定功能的代码块 在很多语言里面都有函数的定义 , 函数在Java中被称为方法 好处:提高了代码的复用性和可维护性 方法格式 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) { 函数体; return 返回值; } 写一个方法首先有两点需要明确 返回值类型 明确功能结果的数据类型 参数列表 明确有几个参数,以及参数的类型 方法调用的方式 单独调用 输出调用 赋值调用 形式参数:用于接收实际数据的变量 实际参数:实际参与运算的变量 方法的参数是引用类型: 形式参数的改变直接影响实际参数 方法的参数是基本数据类型: 形式参数的改变不影响实际参数
项目
黑马商城
功能过滤(没有登录有些功能不能使用)
邮箱激活
bos物流系统
主流软件系统类别简介
OA系统:办公自动化 crm系统:客户关系管理 erp系统:企业资源计划 bos 业务操作系统
git
git是一个分布式的版本控制软件 安装结束后,要配置环境变量Path:添加C:\Program Files\Git\bin 图形化界面工具 TortoiseGit SVN和git的区别 SVN 要是有中央仓库,所有版本控制信息在中央仓库,客户端无任何版本控制信息, SVN 必须基于中央仓库进行控制,如果无法联网,无法进行版本控制 Git 基于中央仓库,进行克隆,本地存在一个仓库,客户端可以基于本地仓库进行版本 控制,即使在没有网络情况下,也可以基于本地仓库进行控制 第一次提交钱,需要设置用户名和邮箱 需要在原始仓库(中央) 执行 git config receive.denyCurrentBranch ignore master 是仓库主线代号, origin 是远程仓库代号
jQueryEasyUI
下拉列表异步加载 需要给 input 输入框 设置 class=”easyui-combobox” 2、 设置三个属性 url 获取列表数据、textField 显示内容字段名、valueField 生成选项 value 属性依据字段名
实现一键上传 及批量导入
使用jQuery ocupload技术完成一键上传 文件上传注意事项 1、 必须同步提交 form 表单 2、 Form 表单编码方式 nectype =multipart/form-data 3、 提交方式必须为 post 4、 上传文件对应 input type=”file” ,元素要提供 name 属性 导入ocupload.js,该文件已经封装部分上传注意事项 实现excel解析 poi… jar 解析 HSSF poi ooxml .. jar 解析 XSSF (依赖 POI 包 ) 使用pinyin4j 生成 区域简码和城市编码
WebService远程调用
易淆知识点
各种变量之间的关系
成员变量和局部变量的区别: * A:在类中的位置不同 * 成员变量:类中,方法外 * 局部变量:方法中或者方法声明上(形式参数) * B:在内存中的位置不同 * 成员变量:堆内存 * 局部变量:栈内存 * C:生命周期不同 * 成员变量:随着对象的创建而存在,随着对象的消失而消失 * 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 * D:初始化值的问题 * 成员变量:有默认值 * 局部变量:没有默认值。必须先定义,赋值,最后使用 类变量:其实就是静态变量 定义位置:定义在类中方法外 所在内存区域:方法区 生命周期:随着类的加载而加载 特点:无论创建多少对象,类变量仅在方法区中,并且只有一份 实例变量:其实就是非静态变量 定义位置:定义在类中方法外 所在内存区域:堆 生命周期:随着对象的创建而加载 特点:每创建一个对象,堆中的对象中就有一份实例变量 常量池:常量池是方法区的一部分。常量池主要用于存放两大类常量:字面量(Literal)和符号引用量(Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念,包括了如下三种类型的常量: 类和接口的全限定名 字段名称和描述符 方法名称和描述符 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。 (1)节省内存空间:常量池中所有相同的字符串常量被合并,只占用一个空间。 (2)节省运行时间:比较字符串时,==比equals()快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等。 。
重载和重写
方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖), Override 当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法 方法重写的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法, 并可以在方法中使用关键字super调用父类的方法,这样做即可以保有父类的功能, 也可以拥有子类特有的功能 方法重写的注意事项: 不能重写父类私有的方法 权限必须大于等于父类方法的权限 方法重载:在同一个类中,出现了方法名相同的方法,这就是方法重载。 overload 方法重载特点: 方法名相同,参数列表不同。与返回值无关。 参数列表不同: 参数的个数不同。 参数对应的类型不同。
this和supper
this和super this代表: 本类的对象,引用 super代表:本类的父类的引用 this()代表:本类的无参构造 super()代表:本类的父类的无参构造