Java知识梳理
一、java概述
1991年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌,在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java。
1、Java三种技术框架
JavaEE企业应用开发
JavaSE 桌面应用环境开发
JavaME 开发电子消费产品和嵌入式设备
2、运行环境
JDK:Java Development Kit java开发工具
JRE: Java Runtime Environment java程序的运行环境,java运行的所需的类库+JVM(java虚拟机)。
3、环境变量配置
JAVA_HOME=%安装路径%\java\jdk
Path=%JAVA_HOME%\bin;
4 javaDos命令
Javac 负责编译,启动编辑器编辑.java源文件接着生成.class的字节码文件
Java负责运行,启动jvm加载所运行类库,并对class文件执行
5、虚拟机
在虚拟机中进行软件评测时,可能系统一样会崩溃,但可以使用Undo恢复
二、 java语法基础
1、 关键字:赋予特殊含义的单词
2、标识符:自定义的程序名称 0-9,a-z, $,_
1),数字不可以开头。
2),不可以使用关键字。
2、常量
3、 变量
4、 基本数据类型
1) 基本数据类型8种:byte,intshort,long,float,double, char,boolean级别从低到高为:byte,char,short(这三个平级)-->int-->float-->long-->double
2) 引用数据类型3种:数组,类,接口。
3) 自动数据类型转换,从低级到高级自动转换。
4) 强制类型转换:从高级道低级的转换。
5、 运算符号
1) 算术运算符:+- * / %
+连接符
++自增
--自减
2) 赋值运算符:+= -= /= *= %=
3) 比较运算符
结果布尔类型true或者false
4) 逻辑运算符:! && ||
5) 位运算符:用于操作二进制位的运算符。
6、 语句
1)If语句
2)If-else语句
3)switch语句
switch(变量){
case 值:要执行的语句;break;
…
default:要执行的语句;
}
break:作用于switch,和循环语句,用于跳出,或者称为结束。
continue:只作用于循环结构,继续循环用的。
7、 函数
1)定义
为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数
2)格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){
执行语句;
return返回值;
}
8、 数组
1)定义:
用于存储同一类型数据的容器,好处下表从零开始用于封装数据,就是一个具体的实体。
2)格式:
元素类型【】变量名=new元素类型【元素个数】
元素类型【】变量名={元素1,元素2,...}
元素类型【】变量名=new元素类型【】{元素1,元素2,…}
3)java分了5片内存。
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 (函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体啊?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量都有默认初始化值。因为数据类型不同,值也不一样。
3:垃圾回收机制
三、 面向对象
1、面向对象的特点
1):将复杂的事情简单化。
2):面向对象将以前的过程中的执行者,变成了指挥者。
3):面向对象这种思想是符合现在人们思考习惯的一种思想。
2、构造函数
函数名称与类名称相同,不需要返回值类型,没有具体的返回值。创建所有对象时,必须初始化才能使用。
3、封装:面向对象的特征之一,
指隐藏对象的属性或实现的细节,仅对外提供公共的访问方式
4、this:代表对象。就是所在函数所属对象的引用
this对象后面跟上 . 调用的是成员属性和成员方法(一般方法);
this对象后面跟上 ()调用的是本类中的对应参数的构造函数。
5、static关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。被静态修饰的成员,可以直接被类名所调用。
6、编辑器格式
/** //格式
*类描述
*@author 作者名
*@version 版本号
*/
/**
*方法描述
*@param 参数描述
*@return 返回值描述
7、继承(面向对象特征之一)
1:提高了代码的复用性。
2:让类与类之间产生了关系,提供了另一个特征多态的前提。
8、final特点:
1:这个关键字是一个修饰符,可以修饰类,方法,变量。
2:被final修饰的类是一个最终类,不可以被继承。
3:被final修饰的方法是一个最终方法,不可以被覆盖。
4:被final修饰的变量是一个常量,只能赋值一次。
9、 抽象类: abstract
抽象类只声明定义方法,不能实现,不可以创建对象。
子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类
10、 接口 interface
接口中包含的成员,最常见的有全局常量、抽象方法
注意:接口中的成员都有固定的修饰符。
成员变量:publicstatic final
成员方法:public abstract
类与类之间存在继承关系,类与接口之间存在实现关系
继承用extends ;实现用implements ;
接口都用于设计上,设计上的特点:
1:接口是对外提供的规则。
2:接口是功能的扩展。
3:接口的出现降低了耦合性。
11、 多态(面向对象特征之一)
对某一事物具有不同的实现,提高程序的扩展性,只能访问父类的方法,不能访问子类中的方法;父类引用或者接口的引用指向了自己的子类对象。
12、 静态函数
1) Object:所有类的直接或者间接父类,具备所有类的功能。
2) boolean equals(Object obj):用于比较两个对象是否相等,其实内部比较的就是两个对象地址。
3) String toString()将对象变成字符串。
4) Class getClass()获取任意对象运行时的所属字节码文件对象。
5) int hashCode():返回该对象的哈希码值
13、 异常
Throwable:可抛出的。
1) Error错误,一般是jvm发生的,程序修改正。
2) Exception 异常,可以有针对性的处理方式。
处理方式有两种:1、捕捉;2、抛出。
try{
需要被检测的代码;
}cath(异常类变量名){
异常处理代码;
}finally{
一定会执行的代码;
}
退出jvm:System.exit(0);
3)常见异常
1、脚标越界异常(IndexOutOfBoundsException)包括数组、字符串;
2空指针异常(NullPointerException)
3、类型转换异常:ClassCastException
4、没有这个元素异常:NullPointerException
5、不支持操作异常;
4)Package包
注意:包名的写法规范:所有字母都小写
包与包之间访问可以使用的权限有两种:
1:public
2:protected:只能是不同包中的子类可以使用的权限。
3:private只能在类中使用。
常见软件包
java.lang : language java的核心包,Object System String Throwable jdk1.2版本后,该包中的类自动被导入。
java.awt :定义的都是用于java图形界面开发的对象。
javax.swing: 提供所有的windows桌面应用程序包括的控件,比如:Frame , Dialog, Table, List 等等,就是java的图形界面库。
java.net :用于java网络编程方面的对象都在该包中。
java.io : input output用于操作设备上数据的对象都在该包中。比如:读取硬盘数据,往硬盘写入数据。
java.util : java的工具包,时间对象,集合框架。
java.applet: application+let客户端java小程序。server+let --> servlet 服务端java小程序。
jar :java的压缩包,主要用于存储类文件,或者配置文件等。
14、 多线程
15、 同步:★★★★★
//就是在操作共享数据代码时,访问时只能让一个线程进去访问,此线程执行完退出后,别的线程才能再对此共享数据代码进行访问。
好处:解决了线程安 全问题。Synchronized
弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁
16、 StringBuffer字符串缓冲区:★★★☆
1:可以对字符串内容进行修改。
2:是一个容器。
3:是可变长度的。
4:缓冲区中可以存储任意类型的数据。
StringBuffer和 StringBuilder 的区别:
StringBuffer线程安全。
StringBuilder线程不安全。
单线程操作,使用StringBuilder效率高。
多线程操作,使用StringBuffer安全。
17、集合框架
--< java.util >-- Collection接口:
Collection:
|--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。
1,添加:
add(object):添加一个元素
addAll(Collection):添加一个集合中的所有元素。
2,删除:
clear():将集合中的元素全删除,清空集合。
remove(obj):删除集合中指定的对象。注意:删除成功,集合的长度会改变。
removeAll(collection):删除部分元素。部分元素和传入Collection一致。
3,判断:
booleancontains(obj):集合中是否包含指定元素。
booleancontainsAll(Collection):集合中是否包含指定的多个元素。
booleanisEmpty():集合中是否有元素。
4,获取:
intsize():集合中有几个元素。
5,取交集:
boolean retainAll(Collection):对当前集合中保留和指定集合中的相同的元素。如果两个集合元素相同,返回flase;如果retainAll修改了当前集合,返回true。
6,获取集合中所有元素:
Iterator iterator():迭代器
7,将集合变成数组:
toArray();
--<java.util >-- Iterator接口:
迭代器:是一个接口。作用:用于取集合中的元素。
boolean |
hasNext() 如果仍有元素可以迭代,则返回 true。 |
E |
next() 返回迭代的下一个元素。 |
void |
remove() 从迭代器指向的 collection中移除迭代器返回的最后一个元素(可选操作)。 |
--<java.util >-- List接口:
List本身是Collection接口的子接口,具备了Collection的所有方法。现在学习List体系特有的共性方法,查阅方法发现List的特有方法都有索引,这是该集合最大的特点。
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
|--ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。
|--LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。
|--Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。
1,添加:
add(index,element):在指定的索引位插入元素。
addAll(index,collection):在指定的索引位插入一堆元素。
2,删除:
remove(index):删除指定索引位的元素。 返回被删的元素。
3,获取:
Objectget(index):通过索引获取指定元素。
int indexOf(obj):获取指定元素第一次出现的索引位,如果该元素不存在返回-1;
所以,通过-1,可以判断一个元素是否存在。
intlastIndexOf(Object o):反向索引指定元素的位置。
List subList(start,end):获取子列表。
4,修改:
Objectset(index,element):对指定索引位进行元素的修改。
5,获取所有元素:
ListIterator listIterator():list集合特有的迭代器。
List集合支持对元素的增、删、改、查。
List集合因为角标有了自己的获取元素的方式: 遍历。
for(int x=0; x<list.size(); x++){
sop("get:"+list.get(x));
}
ListIterator是List集合特有的迭代器。
ListIteratorit = list.listIterator;//取代Iterator it = list.iterator;
方法摘要 |
|
void |
add(E e)将指定的元素插入列表(可选操作)。 |
boolean |
hasNext()以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。 |
boolean |
hasPrevious()如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。 |
E |
next()返回列表中的下一个元素。 |
int |
nextIndex()返回对 next 的后续调用所返回元素的索引。 |
E |
previous()返回列表中的前一个元素。 |
int |
previousIndex()返回对 previous 的后续调用所返回元素的索引。 |
void |
remove()从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。 |
void |
set(E e)用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。 |
阅读到此>--< java.util >-- Set接口:
数据结构:数据的存储方式;
Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器。
Map集合:
|--Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。
|--HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
|--TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。
Map中的存储的一对元素:一个是键,一个是值,键与值之间有对应(映射)关系。
特点:要保证map集合中键的唯一性。
1,添加。
put(key,value):当存储的键相同时,新的值会替换老的值,并将老值返回。如果键没有重复,返回null。
void putAll(Map);
2,删除。
void clear():清空
value remove(key):删除指定键。
3,判断。
boolean isEmpty():
boolean containsKey(key):是否包含key
boolean containsValue(value):是否包含value
4,取出。
int size():返回长度
value get(key):通过指定键获取对应的值。如果返回null,可以判断该键不存在。当然有特殊情况,就是在hashmap集合中,是可以存储null键null值的。
Collection values():获取map集合中的所有的值。
5,想要获取map中的所有元素:
原理:map中是没有迭代器的,collection具备迭代器,只要将map集合转成Set集合,可以使用迭代器了。之所以转成set,是因为map集合具备着键的唯一性,其实set集合就来自于map,set集合底层其实用的就是map的方法。
· 把map集合转成set的方法:
Set keySet();
Set entrySet();//取的是键和值的映射关系
6、增强for循环:
foreach语句,foreach简化了迭代器。
格式:// 增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器
for(元素类型 变量名 : Collection集合 & 数组 ) {
…
}
18、日期
API--- java.util.Date:日期类,月份从0-11;
将日期字符串转换成日期对象:使用的就是DateFormat方法中的 Date parse(String source
API--- java.util. Calendar:日历类
19、IO流:★★★★★,用于处理设备上数据。在流中一般以字节的形式存放着数据!IO流最终要以对象来体现,对象都存在IO包中。