java学习基础笔记

java:一门面向对象语言,sun(oracle)
环境变量:
path:安装jdk的目录bin
class_path:安装jdk的类库,lib目录
java的基本数据类型:
byte
short
int
long

boolean
char
float
double
java的流程控制:
分支:if,if-else,if-else if, switch...case
循环:for,while,do-while
类:具有相同属性和行为的集合
对象:类的实例,客观存在的
类,对象的关系
类是对象的抽象,对象是类的实例。

java的特性:
继承:extends
子类继承父类,那么子类就有父类中所有的共有的属性或者方法
this,super:
this:本类(子类)
super:父类
封装:
多态性:

重写:是发生在子父类中的,子类重写父类的方法(子类中的方法名参数列表,返回值类型和父类的一致),方法实现(方法体)不一样。
重载:发证在一个类之间的。方法名相同,返回值类型可以不同,参数列表也不同

抽象类:abstract
作用:提供一个模板
抽象类不能被实例,抽象类中可以有普通的成员属性和方法。
抽象类中的抽象方法要用abstract修饰

接口:implements
作用:提供一个模板
接口中的方法都是抽象方法。不管用不用abstract修饰
接口中的属性是final,即常量

数组:一组连续分配的内存空间。数组是固定大小
数组的指针永远指向这块内存的首地址。也就是数组下标值是从0开始的。
二维数组:

多维数组:
遍历数组中的元素用for循环
遍历二维数组
int arr[][] = new int [5][4];
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){

}
}

异常:
错误:
exception:是人为的。写程序的人。0/1,数组长度越界,对象没有赋值,类(类名和文件名不一致)...
error:系统出现的,控制不了。OutOfMemoryException内存溢出

捕获异常两种方法
try...catch
throw,throws
throw类后
方法后加throws

finalize方法,回收内存,对象所占的 GarbagCollection(垃圾回收机制)
object是所有类的父类

final,finally,finalize区别
final:可以修饰属性,方法,修饰属性这个属性是常量,方法这个方法是最终方法不能被重写。
finally跟在try...catch后,不管try块,catch块任一个执行,finally都会被执行
finalize当对象释放内存是自动调用的
equals,==区别
equals是比较内容一样不一样
==比较内存地址是否一致

java
project-pakage-class

java常用类
String类
Math类。数学
Date类 日期
Random类 随机数

集合

String类
String 字符串是固定大小的
声明字符串的方法
String s = "abc";//声明了一个字符串s,其值为abc
String s1 = new String();//声明一个字符串s1,值为空。
常用方法:
charAt(int index)//返回指定索引处的char值

1、获取字符串的长度
length();
2、字符串的比较
1) equals,equalsIgnore

Case(String str)
2) startsWith(String s)、startsWith(String prefix, int toffset) 和endsWith(String s)
返回boolean值
startWith以指定的字符串开始
startsWith(String prefix, int toffset),以指定索引开始的子字符串是否以指定前缀开始
endsWith是否以指定的字符串结尾
3) regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
两个字符串区域是否相同
4)compareTo()和compareToIgnoreCase()
按照字典顺序与给定的字符串比较大小

3.字符串的搜索
indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引
indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。
indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

lastIndexOf(int ch),lastIndexOf(String ch) 搜索字符串或字符最后出现的位置

lastIndexOf(int ch, int fromIndex) 返回指定子字符在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。

4.字符串的截取与替换
String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。
截取的字符串不包括endIndex处的字符

replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

5.修改
concat(String str)将两个字符串连接
trim();去掉字符串前后空格

6.字符串和其他字符之间的转换
基本数据类型的封装类
1.基本数据类型和字符串的转换
byte -> Byte parseByte(String str) -String str是字符串的数字
short ->Short parseShort(String str)
int -> Integer parseInt(String str)
long ->Long parseLong(String str)
boolean -> Boolean
char -> Chractor
float -> Float
double ->Double
2.数值转化为字符串
static String valueOf(boolean b)
返回 boolean 参数的字符串表示形式。
static String valueOf(char c)
返回 char 参数的字符串表示形式。
static String valueOf(char[] data)
返回 char 数组参数的字符串表示形式。
static String valueOf(char[] data, int offset, int count)
返回 char 数组参数的特定子数组的字符串表示形式。
static String valueOf(doubl

e d)
返回 double 参数的字符串表示形式。
static String valueOf(float f)
返回 float 参数的字符串表示形式。
static String valueOf(int i)
返回 int 参数的字符串表示形式。
static String valueOf(long l)
返回 long 参数的字符串表示形式。
static String valueOf(Object obj)
返回 Object 参数的字符串表示形式。

7.字符串的大小写转换
toUpperCase - 对字符串进行大写转换
toLowerCase - 对字符串进行小写转换


StringBuffer:可以改变大小的,增加,修改,删除等操作改变字符串
1、capacity和length的区别
capacity是StringBuffer的容量,length是长度
2.添加
append(int i)
append(String str)
append(long l)
append(float f)
append(boolean b)
append(char c)
append(char[] ch)

3.insert()
insert(int offset, boolean b)
将 boolean 参数的字符串表示形式插入此序列中。
insert(int offset, char c)
将 char 参数的字符串表示形式插入此序列中。
insert(int offset, char[] str)
将 char 数组参数的字符串表示形式插入此序列中。
insert(int index, char[] str, int offset, int len)
将数组参数 str 的子数组的字符串表示形式插入此序列中。
insert(int dstOffset, CharSequence s)
将指定 CharSequence 插入此序列中。
insert(int dstOffset, CharSequence s, int start, int end)
将指定 CharSequence 的子序列插入此序列中。
insert(int offset, double d)
将 double 参数的字符串表示形式插入此序列中。
insert(int offset, float f)
将 float 参数的字符串表示形式插入此序列中。
insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
insert(int offset, long l)
将 long 参数的字符串表示形式插入此序列中。
insert(int offset, Object obj)
将 Object 参数的字符串表示形式插入此字符序列中。
insert(int offset, String str)
将字符串插入此字符序列中。

4.删除
delete(int start, int end)
移除此序列的子字符串中的字符。
deleteCharAt(int index)
移除此序列指定位置的 char。

5.reverse()反转
6.类型转换
sb转换为String字符串

String类和StringBuffer的区别?
String对象是不可变的,StringBuffer是可变的
StringBuffer和StringBuild的区别
StringBuffer是线程安全的
StringBuilder是
StringBuilder

日期类(Date)
1.怎样得到当前的日期,有几种方法
new Date();
Calendar 日历类
创建一个Calendar对象的时候,Calendar c = Calendar.getInstance();
Calendar类的作用是得到当前日期的,各个值
2.怎样得到定义的日期
SimpleDateFormat:文本--转换(parse)-->日期,日期--解析(format)-->文本

Math类
Math 类包含用

于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
abs()
random()[0,1)
ceil(double a)
返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
floor(double a)
返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。

System类
Random类
创建随机数
Random r = new Random();
要得到一定范围内的随机数的时候
nextInt()- 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值(有负数)
没有负数的第一种
nextInt(int d) - 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。(正数)
没有负数的第二种
Math.random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。如果不是double的话,必须强制类型转换

集合类
在java.util包下
Conllection
List Set Map

List: ArrayList Vector
List 容量是可能变化的。
Element:是泛型表示,如果集合中存储的元素是同一类型,那么可以用泛型,反之不能用泛型
List中可以存放任何类型的元素
List中的常用方法
boolean add(E e)
将指定的元素添加到此列表的尾部。
void add(int index, E element)
将指定的元素插入此列表中的指定位置。
E get(int index)
返回此列表中指定位置上的元素。
indexOf(Object o)
返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
boolean isEmpty()
如果此列表中没有元素,则返回 true
int lastIndexOf(Object o)
返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。
E remove(int index)
移除此列表中指定位置上的元素。
boolean remove(Object o)
移除此列表中首次出现的指定元素(如果存在)。
E set(int index, E element)
用指定的元素替代此列表中指定位置上的元素。
int size()
返回此列表中的元素数。
ArrayList()特点
1.默认大小是10.是可以自动增加容量的,每次增加原来的一半
2.是线程不安全的

1.添加学生信息2.查看学生信息。3.修改学生信息。4.删除学生信息(根据id OR 跟据学生姓名)。5退出

Vector(向量)
Vector() 构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。每次成倍增加
常用方法:
boolean add(E e)
将指定元素添加到此向量的末尾。
void add(int index, E element)
在此向量的指定位置插入指定的元素。
void addElement(E obj)
将指定的组件添加到此向量的末尾,将其大小增加 1。


int capacity()
返回此向量的当前容量。
E elementAt(int index)
返回指定索引处的组件。

E get(int index)
返回向量中指定位置的元素。
int indexOf(Object o)
返回此向量中第一次出现的指定元素的索引,如果此向量不包含该元素,则返回 -1。
int indexOf(Object o, int index)
返回此向量中第一次出现的指定元素的索引,从 index 处正向搜索,如果未找到该元素,则返回 -1。
void insertElementAt(E obj, int index)
将指定对象作为此向量中的组件插入到指定的 index 处。
boolean isEmpty()
测试此向量是否不包含组件。
E lastElement()
返回此向量的最后一个组件。
int lastIndexOf(Object o)
返回此向量中最后一次出现的指定元素的索引;如果此向量不包含该元素,则返回 -1。
int lastIndexOf(Object o, int index)
返回此向量中最后一次出现的指定元素的索引,从 index 处逆向搜索,如果未找到该元素,则返回 -1。
E remove(int index)
移除此向量中指定位置的元素。
boolean remove(Object o)
移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变
boolean removeElement(Object obj)
从此向量中移除变量的第一个(索引最小的)匹配项。
void removeElementAt(int index)
删除指定索引处的组件。
E set(int index, E element)
用指定的元素替换此向量中指定位置处的元素。
void setElementAt(E obj, int index)
将此向量指定 index 处的组件设置为指定的对象。
void setSize(int newSize)
设置此向量的大小。
int size()
返回此向量中的组件数。
Vector的特点
1.初始容量为10,每次增加为原来的一倍
2.Vector是线程安全的

ArratList和Vector的区别?
1.arrayList是线程不安全的,运行效率高,Vector是线程安全的,运行效率低
2.两个容器初始的容量大小都是10,ArrayList每次增加为原来的一半,Vector增加为原来的一倍

Set
HashSet
特点:
1.注意,此实现不是同步的。即线程不安全的,运行效率高
2.set中的元素不能重复
原因:是因为往set中储存是判断将要储存的元素和集合中已经有的元素,比较hash值是否一样,如果相同,就不储存。
3.是无须储存的。
常用方法:
boolean add(E e)
如果此 set 中尚未包含指定元素,则添加指定元素。
void clear()
从此 set 中移除所有元素。
boolean isEmpty()
如果此 set 不包含任何元素,则返回 true。
Iterator iterator()
返回对此 set 中元素进行迭代的迭代器。
boolean remove(Object o)
如果指定元素

存在于此 set 中,则将其移除。
int size()
返回此 set 中的元素的数量(set 的容量)。

Map
HashMap
1.不是同步的,也就是不是线程安全的
2.hashmap中的储存顺序是无须的
3.一键不能对多值

常用方法
Set> entrySet()
返回此映射所包含的映射关系的 Set 视图。
V get(Object key)
返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
boolean isEmpty()
如果此映射不包含键-值映射关系,则返回 true。
Set keySet()
返回此映射中所包含的键的 Set 视图。
V put(K key, V value)
在此映射中关联指定值与指定键。

如果要取出map中的值。通过键来取值
步骤:
1.首先得到键的视图,也就是调用hashmap中的keySet()得到键的视图给一个set
然后迭代这个set取出键值
2.调用hashmap中的get(Object key),get方法需要传入一个键值才能取出这个键对应的值




javaIO流

Object
InputStream(字节输入流) OutputStream(字节输出流) Reader(字符读取流) Writer(字符写出的流)
File(文件流)
路径:
绝对路径(例:c:/window)
相对路径(例: window)
抽象路径(虚拟机)
File中的构造方法
File(File parent, String child)
参数:
parent-以File的形式表示路径
child-目录 6

File(String pathname)
参数:
pathname - 以字符串的形式表示一个完整的目录地址
File(String parent, String child)
参数:
parent - 以字符串形式表示路径
child - 目录
File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

String getName():方法得到一个文件的名称,但不包括路径
String getParent():得到一个文件夹得上一级目录路径
File getParentFile():
File getAbsoluteFile():返回绝对路径名
String getAbsolutePath():返回目录的绝对路径
boolean exists():判断这个文件是否存在
boolean isDirectory():文件的目录是否存在
long length():得到文件的长度,字节形式
boolean canWrite():是否可以修改此路径的文件
boolean canRead():是否可以读取
boolean isFile():是否是一个文件而不是目录
boolean isAbsolute() :测试此抽象路径名是否为绝对路径名。
static File[] listRoots() 列出可用的文件系统根。
String[] list() 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。

多线程
线程:应用程序中的一段代码,或者是一个代码块
进程:简单的说一个进程也就是一个应用程序在运行

创建线程的两种方法:
1.继承Thread类
2.实现Runnable接口


作业:
1.4个窗口卖票,卖100张票(不用同步)
2.用同步修改上面的程序
3.生产者,消费者写一个

例子,生产者生产了消费者才能消费。
4.这些写好的代码,和知识介绍,都要看看,练练




1,100的阶乘?
类型, int bigInteger long
2,arraylist,vector的区别?
1)arraylist是线程安全的,vector是线程不安全的
2)当存储的元素超出初始容量的时候,arraylist增加为原容量的一半,vector增加为原来的一倍

3,servlet的生命周期
init,service,destroy
4,overload·2和override的区别,overloaded的方法是否可以改变返回值的类型?
overload重载,发生在本类中,方法名相同,返回值类型形同,不同的是参数列表
override重写,发生在子父类中,方法名,返回值类型,参数个数,参数类型都相同,不同的是实现体

overloaded
5,jsp的内置对象有几个,各是?
request,response,out,application,session,cookie,pageContext,
6,简述你在项目中用过的分页方案,并赋简要代码?
7,当一张表数据量为千万级时,如何优化查询进度?


javaWeb
听,写(90%)
一般的写的,
mv
mvc解决的是啥?
高耦合,低内聚
mvc实现的高内聚,低耦合


jsp的内置对象有几个,各是?
request,response,out,application,session,config,pageContext,page,exception
pageContext上下文,传递隐藏信息
1.共享信息:
application,session,request,pageContext
2.流转控制
application,seeson,request,pageContext及config
3.异常处理
exception
4.输入输出控制
out,response,request
5.初始化参数
config

在实际应用中,是不用全局变量
application,pageContext的作用域服务器启动application,pageContext就开始运行,知道服务器的关闭,application,pageContext才消亡。

熟练掌握request,response,session
session关闭,invalidate();
cookie
session,cookie区别?

ppt内容
1.项目名称
2.详细设计的图(项目的功能的有哪些)
3.数据库
4.开发环境
5.各个功能的详细介绍
6.在做项目的时候遇到的问题,解决了多少,未解决多少,及从中得到的体会
7.致谢

jsp EL表达式(Expression(表达式) language)
jsp页面可以嵌入java代码,页面比较繁琐。
所以引入el
el跟javascript相似,弱数据类型var=1,var="aaaa",var=true,el根据javascript的特点写出来的
request.getParameter("name"),session.getArribute("name")或者是request.getArribute("name")
或者是page,application

request,seesion,page,pageContext,application
从小到大的顺序
<%=name %>,用el来写${name }
${}这是语法,{}里包的是表达式
name,如果name前没有指定的范围,那么程序在搜索这个name的时候就会从page开始搜索,如果page中没有找到,那么一次从request,session,pageContext,application里找,如果找到就不继续,找不到返回null页面上不会打印.
scope(范围):https://www.360docs.net/doc/d711335090.html,,依次类推https://www.360docs.net/doc/d711335090.html,,https://www.360docs.net/doc/d711335090.html,,等等
jstl

提供了el表达式来代替java代码
jstl(java standard tag library)java标准标签库,要用jstl必须要导入两个包,standard.jar,jstl.jar,如果jstl.jar解压之后又tld这个文件,那么只需要导入jstl.jar

jstl中表示条件判断的,相当于java中的if语句

test="el形式判断条件"
这个标签是没有的
如果要用得到if---else,可以用标签
标签包含




这个





...

相当于java里的if...else if...esle if....else


属性:var="集合中存的对象" items="集合"
param:从页面上获取参数的值,取的是单个的值
paramValues:从页面上获取参数的值,如果页面上又相同的参数,而且不止1个,那么传过来的是个数组,那么在取值的时候就要通过下标来取。

struts--taglib





复习总结
java:是一门面向对象的高级编程语言。
c++面向对象的
跟其他的编程语言比不同?
java是解释性语言,.java->.class虚拟机运行显示的是.class
虚拟机(jvm java virtual machion)
特点:解释性,跨平台,多线程,安全性
jdk(java development kit),要运行java程序,必须先装jdk
环境变量:path:安装jdk下bin的路径,注意如果前面有其他路径,那么在加path路径的时候要加;
class_path:安装jdk下lib的路径,不管这个路径里有没有其他的路径,在加lib路径的时候,前面必须要加.;

java的数据类型:
1.基本数据类型
8种,
整形,byte,short,int,long
浮点型 float
双精度 double
布尔 boolean
字符型 char

float,double怎么样区别?
在定义float的时候在后面加一个f。double不需要
2.复合数据类型
String,StringBuffer,StringBulider,类

常量,变量
常量:不变化的量,final修饰
变量:可以变化的
1.全局变量,局部变量
全局变量:在整个程序运行过程中都能访问到的,一旦程序关闭,这个变量也就无意义
局部变量:定义在方法里的变量,在方法运行期间有意义,一定方法执行完毕,就无意义了。

运算符
算术运算符,逻辑运算符,位运算符,三木运算
逻辑运算符:&&,||,!
位运算:&,|,~,^

标识符
1.只能以字母,下划线,$开头
2.数字不能开头
3.标识符里不能含有空格
定义变量的时候要用第一个单词小写,后面的单词首字母大写,驼峰命名法

流程控制
顺序if,if-else,if-else if...else
循环 for,while,do-while
分支switch...case
在一定的条件下if..else if...else可以和switch..case互换使用
注意:
switch(condition)...case,能不能传byte,short,int,long,String,char?
byte,

short,int,char可以传,long,String不能传

面向对象
面向对象特点:封装,继承,多态
类:具有相同属性和行为的集合
对象:现实世界中客观存在的实体
类是对象的抽象,对象是类的实例。
万物皆对象

static块:先于类最先被加载,可以用于初始化类属性
继承,extends
继承的好处?减少冗余代码,可复用。简化了类容积
子类继承父类中所有的非私有的属性和方法
多态:
重载:发生在本类中,方法名相同,返回值类型相同,参数列表不同
重写:发生在子父类中,方法名相同,返回值类型,参数列表都相同,方法体不同

3.子类能不能重写父类的构造方法?
不能,因为在子类中要调用父类的构造方法
构造方法:
构造方法名跟类名相同,无返回值,用来初始化类属性的
如果一个类中没有显示的构造方法,那么在用这个类实例化对象的时候,虚拟机会自动给这个类加一个不带参数,没有实现的空构造

构造方法可以重载么?
可以
抽象类,接口
abstract
抽象类中一定有抽象方法?
不对的。
有抽象方法的类一定是抽象类?


抽象类中可以有普通的成员变量跟成员方法。
抽象类中的抽象方法必须要用abstract修饰
接口
interface
接口中的属性都是常量,也就是用static final修饰的
接口中的方法都是抽象方法。而且这些方法都是public
接口中的方法只有方法声明,没有方法实现

为啥在实际开发中要用到接口或者抽象类?
因为在实际开发中是多人开发的,不可能每个人都根据自己的喜欢写自己的,这样带来的结果是在项目整合的时候,整合人的工作量大,而且容易出现错误,大大的降低了开发效率。有了抽象类或者接口,多人开发时,只需要实现,或者继承各自的类或者接口,那么在开发完有利于整合,提高开发效率

java常用类
Math
Math.floor(11.2) 结果是11
Math.ceil(11.2) 结果是12

Maht.random()产生一个在0.0(包括)-1.0(不包括)之间的一个随机数

Random随机数
next(int seed)产生一个在seed范围内的随机数,有负值
nextInt(int seed)产生一个在0-seed范围内的随机数

date日期类
simpleDateFormat sdf = new simpleDateFormat("想要显示的日期的格式");如:yyyy-MM-dd hh:mm:ss
Date d = new Date();可以得到一个具体的时间,格林威治的表示形式
sdf.format(d);可以显示想要的格式

把一个字符串日期转换成Date类型
String d = "2012/02/03";
Date date = sdf.parse(String d);

String字符串类
String能不能被继承?
不能被继承,因为String是final的
关于字符串的操作
1.长度 length
2.比较equals,equalsIgnoreCase()忽略大小写
3.startWith,endWith以xx开头/结尾
4.字符串的拼接concat
5.substring字符串

的截取
6.字符串搜索indexOf,lastIndexOf
7.字符串跟基本数据类型的转换

基本数据类型的封装类
int ------ Integer
char ------character
其他的都是首字母大写

基本数据类型跟他对应的封装类一样不?
不一样,封装类是把其他类型转换成相应的基本数据类型,操作不同
StringBuffer,StringBuilder
StringBuffer:改变字符串,append()
StringBuilder:

StringBuffer跟String的区别?
String是不可变的,StringBuffer是可变的
StringBuffer,StringBuilder区别?
StringBuffer是线程安全的,线程安全是方法都是同步的
StringBuilder是线程不安全的,线程不安全,方法不同步
为啥要同步?
数据可以不一致

集合Collection
List Set Map(接口)
List:
ArrayList Vector,LinkedList
ArrayList:
1.实例化后有初始的容量,如果存储的数据超出了初始容量,那么容量会增加量为原来的一半
2.ArrayList是线程不安全的
3.可以存储相同的元素
add()添加,size()长度,remove(),get(int index)取出指定位置的元素,update()
Vector:
1.有初始容量,如果存储超出初始容量,那么容量会增加量为原来的一倍
2.是线程安全的
add()添加,get()取出,size()返回存储元素的长度

List lsit = new ArrayList();
if(list == null)
{
System.out.println("al is null");
}else
{
System.out.println("al is not null");
}
ArrayList,vector的异同?

Set
HashSet
1.有初始容量,为16,如果超出初始容量,那么容量的增量为16*0.75
2.线程不安全的
3.不能存储相同元素
4.元素的排列是无序的
Set不能存储相同元素的原因是:在往set中存储的时候,第一个元素直接存储,在存储第二以后的元素的时候,已存在的元素要和将要存入的元素比较hashcode(),如果hashcode相同,那么不存储,表明是同一元素。

Map
HashMap,Hashtable
1.键值对对应Map
2.存储数据是无序的
3.线程不安全的
4.不能一键对多值,键名不能重复
put(Object key,Object value),keySet(),get(key)

HashMap,Hashtable的异同
1.历史原因看,hashtable是Dictionary类的
2.hashtable是线程安全的,hashmap线程不安全


io
File对文件夹的操作
FileInputStream
FileOutputStream
FileReader
FileWriter

BufferReader
BufferWriter

线程:进程中的一个操作
进程:简单的说一个运行的程序就叫一个进程
创建线程的方法有两种
1.继承thread类
2.实现runnable接口

线程的执行体是run()方法
执行线程的操作时start方法

多线程:
阻塞:两条或者两条以上的线程同时在访问一条数据的时候发生的。
时间片概念
解决阻塞状态,或者是安全访问要用sychronized取修饰
那么在这种情况下,每次只能有一条线程去访问这个数据
数据会和操作他的线程加一把锁,这把锁叫同步锁,只有当这个线

程操作完这个数据的时候,才会释放同步锁,让其他线程来执行。
这样做就保证了数据的安全性,更一致性。

public class xxx extends Thread{
public void run(){

Thread.sleep(1000);
}
}

wait(),notify(),notifyAll()
线程的生命周期
初始化->就绪->运行->阻塞->运行->销毁

wait()跟sleep的区别?
sleep是thread类的类方法,是让线程休眠一定的时间后继续运行
wait:是在有其他线程操作资源的时候,让本线程等待,知道其他线程操作完资源,这条线程会调用notify方法被唤醒

死锁:有两条线程同时操作了两个资源,但是操作没有接触的情况下想去操作另一个资源,那么根据同步锁的定义,当资源没有释放同步锁的时候,那么其他的线程都要等待
,这样就造成了,两个线程都在等对方释放资源,这种情况叫死锁。

异常:
Exception
请写出至少5个运行时异常(runtime exception)?
nullpointerException,ClassNotFoundException,ArrayIndexOutOfBondsException,IllegalException,ClassCastException,ArithmeticException

处理异常的方法?
两种
try...catch..
throw,thows:throw方法后,throws类后

error:系统出现的错误,人无法捕捉。

数组:连续分配的内存空间
数组从0开始
数组有一个属性叫length
一位数组
int[] a = {1,2,3,4,5,6,7,8,9};
int[] a = new int[9];

二维数组
int [3][3]aa = {{1,1,1},{2,2,2},{3,3,3}};

遍历二维数组
for(int i = 0; i < aa.length; i++)
{
for(int j = 0; j < aa[i].lenght; j++)
{
//实现体
}
}



相关文档
最新文档