集合框架介绍
1、List,set,map都是继承与collection
2、List集合set集合的区别
3、Set集合存储数据的特点
4、ArrayList和linkedList都是实现了List,他们的区别
5、Map存储数据的特点
6、Map如何进行循环遍历

Collection介绍
增加:boolean  add( Object element ) 把当前的element元素添加到当前的集合中,如果添加没有成功返回false。 
删除 :clear()  清空集合中所有元素,会让集合中的size变成0
remove(Object obj) 删除集合中指定的元素
判断:contains(Object obj ) 判断当前obj元素是否在集合中存在
Hello(String[] arr, String s)   ----- 判断s在arr中是否出现过
isEmpty() 判断集合是否为空,如果是空返回true
Iterator接口定义了三个方法:迭代器
       hasNext() 问集合中有没有下一个元素; 调用这个方法会返回一个boolean类型的值,如果有则返回true, 没有返回false
       next() 取出当前这个元素;,  取值
       remove() 删除当前的元素;

List接口的实现类:ArrayList、LinkedList 
ArrayList集合的特点:底层使用可变数组,存储的元素:有序,可重复。不足:查询快,增删慢。
ArrayList 和 LinkedList 比较  
二者都是List接口的实现类,存储的元素都是有序可重复的。
ArrayList底层维护的是可变数组来存放元素,查询快,增删慢。
LinkedList底层采用的是链表结构,增删快,查询慢。

set集合
Set集合存储数据的特点:无序,不可重复。
HashSet集合是如何保证元素不重复 (唯一性的)  - 记住
    当给hashset中存放元素的时候会先调用对象的hashCode方法,计算哈希值,根据哈希值来决定当前对象在集合中的存储位置。
    在存储的时候,如果遇到了哈希值相同的元素,这时集合的底层还会去调用当前对象的equals方法,判断当前正要存放的对象和
    位置上已经存在的对象是否是同一个对象,equals方法返回的true,就认为相同对象,不保存,如果equals方法返回的false,当前对象已经会被保存。
面试题:Set 集合可以使用传统for循环来执行遍历嘛?
要注意的是Set接口不存在get方法,也就是没有List接口中通过索引取值的方法。
List接口是使用for循环通过get方法取出每个对象的方式遍历输出整个集合,Set接口没有get方法要怎么输出呢?
使用foreach和迭代器可以对set集合实现遍历

map集合
     put(K key, V value) :把当前的key和value存放到集合中。
    clear();清空
       remove(Object key) 根据指定的key删除key和value 
     get(Object key)  根据指定key获取Map集合中key对应的value值,如果key不存在,返回null
       size()  获取key-value对应关系的个数   
    containsKey(Object key) 判断Map是否包含指定的key,有就返回true
       containsValue(Object value)  判断Map是否包含指定的value,有就返回true
       isEmpty() 判断Map集合是否为null,它的size 是零
    keySet(),获取map中所有的key组成一个set集合。
      entrySet() ,获取map中所有的键值对组成一个set集合。

泛型
在学习集合的时候,我们知道把数据存放到集合中之后,数据就会被提升成Object类型,
在取出的时候,取出来的数据依然Object类型,如果要使用对象的特有功能时,特有数据时,就需要向下转型,只要是向下转型,就有可能发生异常。
<>尖括号中书写的类型是引用数据类型。不能是基本数据类型。

枚举
enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中。

包装类
其实集合在存储数据的时候,如果存储的是基本数据类型的话,
在存储的时候,会将基本数据类型转换成包装类之后在进行存储。
基本数据类型     对应的包装类
byte        Byte
short        Short
int        Integer
long        Long
char        Character
float        Float
double        Double
boolean        Boolean

基本数据类型与包装类的转换
基本类型和对应的包装类可以相互装换:
    基本类型转为包装类称为装箱,例如把 int 包装成 Integer 类的对象;使用包装类的构造方法;
    包装类转为基本类型称为拆箱,例如把 Integer 包装类型转为 int ; 使用intValue();

装箱和拆箱
    基本类型转为包装类称为装箱,
    例如把 int 包装成 Integer 类的对象;使用包装类的构造方法;valueOf()方法
    包装类转为基本类型称为拆箱,
    例如把 Integer 类的转为 int ; 使用intValue();

Math
Java的Math类封装了很多与数学有关的属性和方法。
Abs - 求绝对值
Max/min - 最大值最小值
random() - 生成一个0-1之间的随机数

String
字符串是java中使用最频繁的一种类型,使用String来表示。
注意:字符串是常量;它们的值在创建之后不能更改。
常用方法:
数组的长度:length 属性,集合的长度,字符串的长度,length方法
CharAt(int index) ; 返回指定位置的字符
length() - 求字符串的长度
Equals() - 比较两个字符串是否相同
equalsIgnoreCase() - 忽略大小写比较
toUpperCase() - 转换为大写
toLowerCase() - 转换为小写
concat() - 字符串链接, + 是一样的

IO
在前面学习的程序中数据最终都内存中,变量,int a = 10; 数组、字符串、集合,这些容器都可以存放数据,
但是它们把数据都存放在内存中,一旦程序停止运行,JVM退出。那么给JVM分配的内存空间就消失了,在整个程序中的数据就没有了。
1、File(String pathname)
      把一个字符串描述的文件或者文件夹封装成File对象。 File类的构造方法会把指定的内容封装成File对象,  
2、File(String parent, String child) 
       可以把一个文件或者文件夹的父目录单独分离出来,然后在结合当前的子目录一起封装成File对象

方法名称 说明
 boolean exists()  判断文件或目录是否存在
 boolean isFile()  判断是否是文件
 boolean isDirectory() 判断是否是目录
 String getPath() 返回此对象表示的文件的相对路径名
 String getAbsolutePath(() 返回此对象表示的文件的绝对路径名
 String getName() 返回此对象表示的文件或目录的名称
 boolean delete( ) 删除此对象指定的文件或目录
 boolean createNewFile() 创建名称的空文件,不创建文件夹
 long length() 返回文件的长度,单位为字节,如果文件不存在,则返回 0L

这套机制就是IO流技术。I: InputStream ; O:OutputStream
输出流 OutputStream和Writer作为基类 
按流向区分
输入流(- InputStream和Reader作为基类
输入输出流是相对于计算机内存来说的
字节输入流InputStream基类
字节流 字节输出流OutputStream基类 
按照处理数据单元划分字符流字符输出流Writer基类字符输入流Reader基类
FileInputStream
FileOutputStream
AbcInputStream
AbcOutputStream

InputStream
fileInputStream是inputStream常用子类。
fileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等.
常用的构造方法有:FileInputStream(File file);FileInputStream( String path )
常用的方法有:
int read( ): 这个方法被调用一次,它运行一次,会从底层读取一个字节数据,当把这个字节读取完成之后,在文件中的隐式光标自动的移动到第一个字节和第二个字节之间。返回的数据是这个字节数据转成int值,当读取到文件的末位时,会返回-1.因此在使用read方法读取数据的时候,通过判断读取的数据是否是-1来判断是否把文件中的数据已经全部读取完成。
int read(byte[] b):这个方法每执行一次,就会从底层读取多个字节数据,把读取到的字节数据存储在byte数组中。返回的int值,是表示当前到底从底层读取了几个字节数据。    即就是给byte数组中存储了几个字节数据。如果读取到文件末位会返回-1。
int read(byte[] b,int off,int len):off从哪里开始,读多少
void close( ):关闭流,在使用完成之后一定要关闭流

字节读取文件模板
      1、一次读取一个字节的模版代码
      1、先创建流对象和文件进行关联
      FileInputStream  fis = new FileInputStream("文件");
      2、定义变量,用来记录从底层文件中读取到的那个字节数据
          int ch = 0;    
          3、定义循环开始从文件中读取数据
          while( ( ch = fis.read() )!=-1 ){
              //处理读取到的数据,数据存储在ch空间中
           }
          4、关闭流对象
          fis.close();
2、一次读取多个字节数据模版代码
       1、先创建流对象和文件进行关联
           FileInputStream fis = new FileInputStream("文件");
       2、定义数组,用来存储从底层读取的多个字节数据,一般都是1024的整数倍
           byte[] buf = new byte[1024];
       3、定义变量,用来记录到底从底层读取了多个字节数据,
           int len = 0;
       4、使用循环从底层开始读取数据
           while( (  len = fis.read( buf ) )!=-1 ){
               //处理读取到的数据,数据存储在buf数组中,buf中共计存储了len个字节数据,并不一定把buf存满
           }  
       5、关闭流对象
          fis.close();

OutputStream
数据在持久设备上都以二进制保存,字节数据,因此Java给我们提供了专门操作持久设备上的流对象,字节流。
OutputStream:专门用来操作字节数据的字节输出流对象。是所有字节输出流的超类,并且是个抽象类,不能直接创建对象。
写的方法:
write(int b); 把字节数据直接写到持久设备上
write( byte[] buf ); 把字节数组中的数据写到持久设备上。
write( byte[] buf , int off , int len ) 把buf字节数组中的数据从off下标开始共计写出len个字节数据
close() ; 关闭Java程序和外围设备直接的连接通道。

在OutputStream类下有直接的子类FileOutputStream:
FileOutputStream:是专门用于把程序中的数据写到指定的文件中的输出流对象,这个流主要是用来写字节数据的。
FileOutputStream的构造方法:
FileOutputStream(File file)在创建输出流对象的时候,指定一个文件对象,用于把数据写到指定的这个文件中
FileOutputStream(String  pathName) 在创建输出流对象的时候,把这个字符串当前一个具体的文件位置,然后把数据写到这个文件中
在使用输出流的时候,如果指定的文件不存在,会自动创建这个文件对象,如果文件存在,会创建一个新的把原来的文件覆盖掉。
子类FileOutputStream常用的构造方法
FileOutputStream (File file)
FileOutputStream(String name)    
FileOutputStream(String name,boolean append)

字符流
Java给我们提供专门用于操作字符数据的流对象
字符输入流:Reader         
字符输出流:Writer

字符读取文件模板
字符输入流读取数据的模版代码:
  1、一次读取一个字符数据:
       //定义字符输入流对象和文件进行关联
       FileReader fr = new FileReader("文件");
       //定义变量,存储读取到的字符数据
       int ch = 0;
       //使用循环读取数据
       while( ( ch = fr.read() )!=-1 ){
           //处理读取到的单个字符数据,数据在ch中保存着
       }
       //关闭流对象
       fr.close();
   
 2、一次读取多个字符数据
       //定义字符输入流对象和文件进行关联
       FileReader fr = new FileReader("文件");
       //定义字符数组,用来存储一次读取到的多个字符数据
       char[] buf = new char[1024];
      //定义变量,记录每次读取到字符个数
      int len = 0;
      //使用循环读取数据
      while( ( len = fr.read( buf ) )!=-1 ){
          //处理读取到的数据,数据保存在buf中,buf中共计保存了len个字符数据
      }
      //关流
      fr.close();

BufferedReader
BufferedReader提高字符流读取文本文件,有一个独有的方法readLine(),又称高效流,带有缓冲区的流
当所有文件信息多获取完成时候,readLine()方法将返回null.
注意:文档中有空行,读取的时候不是null, 而是空内容
BufferedReader常用的构造方法
BufferedReader(Reader in),需要接受一个字符流
如果读取文件中出现中文乱码问题时,可以考虑指定编码,原则如下:
FileInputStream fis=new FileInputStream("c:\\myDoc\\hello.txt");
//使用InputStreamReader并设置编码格式
InputStreamReader fr=new InputStreamReader(fis,"UTF-8"); 
BufferedReader br=new BufferedReader(fr);

Writer
Writer类常用方法
write(String str) : 写一个字符串
write(String str,int off,int len): 把cbuf中的字符数据从off开始,共计写len个
void close(): 关闭流
void flush() : 刷新
子类OutputStreamWriter常用的构造方法
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out, String charsetName)
FileWriter类是OutputStreamWriter的子类
FileWriter (File file)
FileWriter (String name)

注意:
用字符输出流写出数据的时候:
1、其实数据不是直接写到文件中,而是把字节数据存储在缓冲区中。如果这时字符输出流的缓冲区没有写满,或者我们没有调用flush方法,或没有关闭流对象,在程序结束之前,数据依然在缓冲区中,不会被写到文件中。所以要求,在关闭流之前一定要做刷新操作。
2、字符输出流(FileWriter)关联的文件如果不存在,会在指定的位置创建,如果文件存在,在创建流对象的时候,没有指定的true值,这时会创建新的文件覆盖原来的文件。

flush和close什么区别: 
  flush是把缓冲区的数据刷出到文件中,没有关闭流和文件之间的关联,在刷新之后,依然可以使用流对象继续给文件中写数据。
  close方法在关闭流之前会先调用flush把缓冲区中的数据写底层文件中,然后把流和文件的关联关系断开。
      一旦调用的close方法,流就已经被关闭了,就无法在使用当前这个流对象写数据。

BufferedWriter
使用FileWriter类与BufferedWriter类可以提高字符流写文本文件的效率
BufferedWriter常用的构造方法
     BufferedWriter(Writer out)

流的总结:
字节流:2类
字节输入流:
InputStream:它是字节输入流的超类,它中定义字节输入流的基本操作方法:
close();
read() 一次读取一个字节数据
read( byte[] buf ) 一次读取多个字节数据,存储在buf中,然会给buf中读取的字节个数
FileInputStream:专门用来读取文件中的字节数据的文件字节输入流对象
创建这个类的对象,读取文件中的数据
模版代码:
1、一次读取一个字节
FileInputStream fis = new FileInputStream(“文件”);
int ch = 0;
while(  ( ch = fis.read() )!=-1 ){
处理读取到的数据,数据在ch中
}
fis.close();

2、一次读取多个字节数据
FileInputStream fis = new FileInputStream(“文件”);

byte[] buf = new byte[1024];
int len = 0;
while( (  len = fis.read( buf )  )!=-1 ){
处理数据,数据在buf中,共计有len个
}
fis.close() ;

字节输出流:
OutputStream:字节输出流的超类,它中定义的基本的输出字节数据的操作
close();
write( int b ) 写出一个字节数据,注意只能把这个int数据中的最低1个字节数据写出去
write(byte[] buf ) 把字节数组中的所有数据写到文件中
write( byte[] buf ,int off ,int len ) 把字节数组中的数据从off开始,共计写len个

FileOutputStream:它是专门用来给文件中写字节数据的流对象。使用输出流写数据的时候,如果对应的文件不存在会新建一个文件,如果文件存在,在创建对象的时候,没有指定true值,就会继续创建新的文件,覆盖原来的文件。
一般会在读的while循环中使用写的功能,往出把读取到的数据写出去。

字符流:2类
字符输入流:
Reader:是所有字符输入流的超类。
close()
read() 一次读取一个字符数据,但返回的字符数据的编码值
read( char[] buf ) 一次读取多个字符数据,把数据存储在buf中,返回读取的字符个数
FileReader:专门用于读取字符文件字符输入流对象,它内部使用本地默认的编码表(GBK)

字符输出流:
Writer:是所有字符输出流的超类
close();
write( int b ) 写出一个字符数据     write(‘a’)  这里会把这个a转成97,再写出去
字符数据和int数据在一定的范围内可以互相赋值
int x = ‘A’;
char ch = 99;
write( char[] buf )把buf数组中的数据全部写出去
write( chr[] buf , int off ,int len) 把buf中的数据从off开始共计写len个
write( String s )  把一个字符串写出去 
FileWriter:专门用于给字符文件中写字符数据的便捷类,它的底层使用的默认的编码表和默认的缓冲区。

DataInputStream 
在IO包中提供了两个与平台无关的数据操作流
数据输出流:DataOutputStream
数据输入流:DataInputStream
其使用方法和字节流类似。

DataInputStream类
FilterInputStream的子类
与FileInputStream类结合使用读取二进制文件
构造方法:DataInputStream(InputStream in)
DataOutputStream类
FilterOutputStream的子类
与FileOutputStream类结合使用写二进制文件
构造方法:DataOutputStream(OutputStream out)

序列化和反序列化
序列化是一个用于将对象状态转换为字节流的过程。需要使用对象输出流ObjectOutputStream。 对象 --- 》文件 -- 写的过程
简单的说:我们使用new关键字创建在内存中的对象,包括对象中的所有数据,持久性的保存到硬盘上,通常是文件中,
对象 ---》 文件
反序列化则是从特定的流中获取数据重新构建对象的过程 。需要使用对象输入流ObjectInputStream。 文件 ---》内存  -- 读的过程
保存在文件中的对象通过反序列化的手段从新加载到内存中
对象的序列化主要有两种用途:
  1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
  2) 在网络上传送对象的字节序列。

html标签介绍
1、单标签
使用单独的一个标签就可以完成某种效果。
例如换行:标签的是<br /> <hr/>

2、双标签
格式:
<标签名 key=value key=value key=value >标签封装的数据</标签名>
常用标签介绍
1:字体标签
    font标签表示html的中字体。
       font标签中的属性:
       color :表封装的数据的颜色
       size  : 封装的数据的大小,大小是从1~7,7最大,1最小
2:字体加粗
Strong标签可以使字体加粗
3:标题标签
在html中可以使用h标签来定义标题,
4:段落标签
P标签表示段落标签的意思,使用在段与段之间会有点间隔
5:换行与水平线
在描述一段文字的时候,需要换行时,可以使用<br/>标签
需要水平线时,可以使用<hr/>标签
这两个标签是单标签,哪里需要使用就在哪里使用
6:斜体
有时候为了引起别人的关注,可以使用斜体的字,斜体字需要使用<em>标签
7:图片
语法:<img src="图片路径" alt="替换文本" width="x" height="y"/>
8:超链接
也称a标签,超链接标签,锚标签
语法 :<a href="链接地址" target="目标窗口位置">文本或图像</a>
    a标签是html中超链接标签,它有3个功能:
      1、用于连接其他的页面。
          要使a标签变成超连接,可以访问其他的资源,要求a标签中必须书写href属性
          href是用来连接要显示的网页的资源路径,url表示地址
          target表示打开的其他页面在具体什么地方显示
_self 表示在当前窗口打开,默认打开方式
              _blank 表示在一个新的窗口中显示
      2、完成页面的定位
          页面的定位,也称为页面的锚点。
<a id="top"></a>  设置页面上跳转的具体位置也称为标记,a标签中可以使用name属性,也可以使用id属性
          <a href="#top">返回顶部</a>  href中的value就是书写要跳转到的具体位置 ,必须#号开始 ,调转到锚点位置的id或name的名称
3、特殊功能的链接
比如读书或者观看影视作品之后的反馈,有专门的部门负责售后等情况,
语法:<a href="mailto:邮箱地址">联系我们</a>
注意:使用之前请确认你的电脑安装有:foxmail或outlook等电子邮件发送软件,并设置为默认为首选.
在很多时候会使用图片标签和超链接标签一起使用

表格的常用属性介绍:
1:border:表格的边框
2:align:表格水平位置,也可以用于tr和td中,表示的是单元格内容的水平位置
3:bordercolor:边框颜色 
4:width:表格宽度,可以使用比例,也可以使用像素
5:height:表格高度
6:cellpadding:单元格的内容和边框之间的距离
7:cellspacing:两个单元格之间距离的大小
8:bgcolor:表格的背景色,也可以用于tr和td
9:background:表格的背景图片,也可以单独的用于某一个单元格
10:colspan:合并列,当前的单元格占几个列,横向合并,横跨几列
11:rowspan:合并行,单元格纵向跨越的行数

常见的表单元素有:
在form标签中经常使用其他标签:
      input主要是用来让用户输入数据的标签。input标签中的type属性,可以设置当前让用户输入的数据填写的类型
      input标签的type属性
          type="text"  文本框 ,主要用于让用户输入可见的数据,input的默认属性;    
          type="password" 密码框,主要用于让用户输入不可见的数据
          type="radio"  单选按钮,这个一般是让用户选择的,注意name属性必须一致
          type="checkbox"  复选框,用户可以选择多个条件
         type="file"  选择文件,可以把本地的文件上传到服务器
          type="submit" 提交, 提交整个form表单中的数据到服务端
          type="reset"  重置,把form表单中的数据重置到初始状态
          type="button"  按钮,就是一个简单按钮,没有任何的点击效果
          type="image" 图片,可以代替submit提交
          type="hidden"  隐藏数据,页面上不会显示,但是这个数据依然会在选择提交的时候提交给服务端
        <select> 下拉框,需要和option标签一起使用
        <textarea rows="5" cols="40"> 文本区域,其中rows文本区域显示的多少行,cols用于显示文本区域每行多少列

Css
背景属性
背景颜色:background-color:#B70447;
背景图像 像素值:px 
图像路径:background-imageurl(img/buypng); 关键词: 
重复方式:background-repeat:no-repeat: 水平方向:left、center、 
背景定位:background-position:10px15px;
背景简写 right 垂直方向:top、center、 
bottom
background:url(img/buypng)no-repeat #f9f9f9 10px 15px;

所有的CSS列表属性
屈性 描述 
list-style 简写属性。用于把所有用于列表的属性设置于一个声明中 
list-style-image 将图象设置为列表项标志。 
list-style-position 设置列表中列表项标志的位置。 
list-style-tyre 设置列表项标志的类型。

盒子实际宽度(高度)=内容(element)+上下边框(border)+上下间隙(上下内边距padding)+间隔(上下外边距margin)。
对于任何一个元素设置width和height控制内容大小,也可以分别设置各自的边框(border)、内边距间隙(padding)、外边距间隔(margin)。

border有三个主要属性,color(颜色)、width(粗细)和style(样式)。
顺序:上右下左, 
color(颜色)

display: inline ; 内联元素的默认值,将块级元素转换为内联元素;
display: block ; 块元素的默认值,将内联元素转换为块级元素;
display: inline-block ; 既有内联元素的特性,也具有块级元素的特征;可以让块级元素排在一行
display: none ; 此元素不会在页面中显示;即隐藏了元素;

方法名称 说明
 prompt() 显示可提示用户输入的对话框
 alert() 显示带有一个提示信息和一个确定按钮的警示框
 confirm() 显示一个带有提示信息、确定和取消按钮的对话框
 close() 关闭浏览器窗口
 open() 打开一个新的浏览器窗口,加载给定URL 所指定的文档
 setTimeout() 在指定的毫秒数后调用函数或计算表达式
 setlnterval() 按照指定的周期(以毫秒计)来调用函数或表达式

alert():一个参数,仅显示警告对话框的消息,无返回值,不能对脚本产生任何改变
prompt():两个参数,输入对话框,用来提示用户输入一些信息,单击“取消”按钮则返回null,
单击“确定”按钮则返回用户输入的值,常用于收集用户关于特定问题而反馈的信息 confirm():
一个参数,确认对话框,显示提示对话框的消息、“确定”按钮和“取消”按钮,单击“确定”按钮返回true,单击“取消”按钮返回false,因此与if-else语句搭配使用

window.history 对象在编写时可不使用 window 这个前缀,
history.back() - 与在浏览器点击后退按钮相同,注意,打开的新页面必须是在原窗口中打开,否则无法后退,可以使用a标签
forward() - 加载 history 对象列表中的下一个URL,和浏览器中的前进一致,可以使用window.history直接调用
go() - history 对象列表中的某个具体URL,history.go(-1):后退,history.go(1):前进

具体需要访问某个网站可以写:window.location="url"
也可以这样写:<a href="javascript:location.href='xxx.html'">查看具体的页面</a>
或者简写:<a href="http://www.baidu.com"></a>
<a href="javascript:location.reload()">刷新本页</a>
<a href="javascript:history.back()">返回</a>

Document对象
Document对象就是一个标记性文档对象。它就是HTML文件本身。
当浏览器把一个html文件加载到内存中之后,在内存中就会形成这个document对象。
document.URL : 返回当前页面的url,即是浏览器地址栏中的信息
document.referrer: 简单来说就是返回上一个页面的url;只有通过链接到达某一个页面时,他才会有值。否则值是空字符串

Document对象的常用方法:
getElementById(), 返回对拥有指定id的第一个对象的引用,获取的是标签对象
getElementsByName(),返回带有指定名称的对象的集合(数组) 
getElementsByTagName(),返回带有指定标签名的对象的集合(数组)
write() , 向文档写文本、HTML表达式或JavaScript代码

节点操作
DOM - 主要用来操作html文件中的标签(属性,样式,标签) 
1:设置属性值
Ele.getAttribute("属性名") - 获取节点中某一属性的值 //ele为标签对象src = “xxx”
Ele.setAttribute("属性名","属性值") - 为某一个节点设置属性和值; //ele为标签对象
需求:有一个单选框,点击战士时出现战士的图片,点击法师的时,战士法师的图片
2:创建节点 
创建元素:document.createElement(“tagName”);

style属性
使用style改变页面内容样式,通常需要一些浏览器触发行为,
例如单击某内容、鼠标经过某内容等;这些行为需要JavaScript中的事件;
HTML元素.style.样式属性="值"
document.getElementById("titles").style.color="#ff0000"; 
className属性
className 属性设置或返回元素的 class 属性。
获取属性值:HTMLElementObject.className;
设置属性值:HTMLElementObject.className=classname;

MySQL
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。
如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。
所以不能一味的去追求范式建立数据库。

正则表达式的特点是:
1. 代码简洁
2. 灵活性、逻辑性和功能性非常强;
3. 可以迅速地用极简单的方式达到字符串的复杂控制。
4. 对于刚接触的人来说,比较晦涩难懂。可读性比较差。

[0-9] 数字0-9
[a-z] 小写的a-z
[A-Z] 大写的A-Z
[a-zA-Z] 字母
\w : 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。
+ : 匹配前面的子表达式一次或多次
{}: 表示次数
?:匹配前面的子表达式零次或一次

使用正则表达式步骤
1:获取需要校验的值
2:写校验规则(表达式)
3:使用test方法校验,语法:reg.test(str); 符合规则返回true, 不满足返回false
4:根据返回结果做处理

[0-9]{9}, 0-9可以出现 9 次,固定的次数
[0-9]{5,9} , 数字可以出现5-9次
[0-9]{5,} , 至少5次,没有上限
[0-9]* , 可以不出现,也可以出现很多次
+ 至少出现1次
? 可以出现,也可以不出现,出现的话就只能是一次

a  // 字符小写字母a
[a-z]  //匹配所有的小写字母 
[A-Z]  //匹配所有的大写字母 
[a-zA-Z]  //匹配所有的字母 
[0-9]  //匹配所有的数字 
[0-9\.\-]  //匹配所有的数字,句号和减号 
a{2,}    如:baad和aaa,但Nantucket,abab不行, 要求连续出现2次,abcabc, aaaaaabc
^a{1,3}$    a出现1-3次, 如 a,aa或aaa

常用的正则表达式
1:验证手机号码:"^1[3-9][0-9]{9}$"
2:验证身份证号:"\d{17}(\d|X|x)"; 
3: 只能输入数字:"^[0-9]*$"。
4: 只能输入n位的数字:"^\d{n}$"。
5:验证Email地址:("^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
6:验证用户名或密码: /^[a-zA-Z]{1}([a-zA-Z0-9]|[._-]){3,15}$/

JDBC
DriverManager
操作数据库第一步是需要注册驱动, 
DriverManager类的目的: 注册驱动和获取连接的,获取一个链接,collection 
Class.forName("com.mysql.jdbc.Driver");  // mysql , 
需导入驱动包

JDBC URL说明
mysql为例: 需要获取连接数据库的相关协议: jdbc:mysql://localhost:3306/dbname-数据库的名字
这里 jdbc: 是JDBC连接协议
这里 mysql:// 是mysql数据库连接协议,JDBC子协议
localhost:3306 主机和端口,

Connection 连接
获得SQL的操作对象 
Statement  conn.createStatement()
PreparedStatement  conn.prepareStatement(sql) -- 执行对象

Statement
executeUpdate 用于向数据库发送 insert update delete 语句,返回int 类型参数,代表影响记录行数
executeQuery  用于向数据库发送 select 语句,返回ResultSet 结果集对象 - 类似于一张表

ResultSet.next 方法用于移动到 ResultSet 中的下一行,使下一行成为当前行。

使用步骤
1:加载驱动
2:创建连接
3:连接数据库
4:编写sql
5:创建执行对象
6:执行sql语句
7:释放资源
动态新增数据
通过对象传递值

request对象介绍
Request常用的方法有:
getParameter(String name)  获取客户端提交的数据  参数name 就是客户端在form表单中书写的name属性的值,如果不一致将获取不到对应的值
getParameterNames()  获取客户端提交的数据中的所有的key值(form表单中的所有提交的name属性的值)
getParameterValues(String name)  获取form表单中用户提交的某个name属性对应的多个value属性值
域对象其实就是一个类似于map的容器,可以向容器中存入指定的值,在需要的时候,可以通过key去获取对应的值来使用
setAttribute(String name, Object o) 向request域中存放一个映射关系,name留着取值使用的
getAttribute(String name) 通过映射关系的key,获取对应的值
removeAttribute(String name) 通过映射关系的key,移除这一关系
setCharacterEncoding(String env)  设置客户端提交数据解码时使用的编码表,只对post请求有效
getRequestDispatcher(String path) 获取转发器对象,调用forward( )方法用于转发请求
getMethod()  获取客户端提交数据的方式  get  或post方式

get请求与post请求区别   
GET和POST是HTTP协议中最长用的请求方法
1:GET参数通过URL传递;POST放在请求中,不会在浏览器中显示
2:GET请求在URL中传送的参数是有长度限制的,而POST没有。
3:从安全角度,GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
4:GET请求会被浏览器主动cache(缓存),而POST不会,除非手动设置。
5:处理乱码的方式不一样

编码问题
原因:客户端提交的数据,浏览器使用的utf-8编码,然后服务器端使用的iso-8859-1解码了(tomcat7以前默认的编码),而在我们jsp程序获取到的数据
Get请求乱码解决:str就是你获取到的乱码数据
byte[]  bytes = str.getBytes("iso-8859-1"); //将乱码数据使用指定的编码表编回到乱码前的状态
String  newStr = new String(bytes,"utf-8"); //使用指定的编码表进行解码
设置响应的编码:
使用request.setCharacterEncoding("utf-8") 一定要保证在获取请求数据之前。一般放在第一行。

Jsp九大内置对象     
请求对象:request
输出对象:out
响应对象:response
应用程序对象:application
会话对象:session
页面上下文对象:pageContext
页面对象:page
配置对象:config
异常对象:exception

setAttribute(String name, Object o) 向request域中存放一个映射关系,key为String类型,value为Object 类型
getAttribute(String name) 通过映射关系的key,获取对应的值
域对象一共有四个:pageContext,request,session, application(servletContext)  --- 记住
范围,
pageContext:只在当前页面有效, - 存放的值只能在当前页面使用
Request:一次请求有效,使用同一个request,请求级别的域
Session:会话级别,从打开浏览器的那一刻开始,一直到关闭浏览器,之间这段时间称之为一次会话
ServletContext(Application):应用级别,项目级别

转发和重定向都可以实现页面的跳转:
请求转发:request.getRequestDispatcher("/url").forward(request, response)
重定向:response.sendRedirect("url")
转发和重定向的区别:     
      1、转发使用的是request.getRequestDispatcher()方法;重定向使用的是response.sendRedirect();
      2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;
      3、转发是服务器内部行为,重定向是客户端行为;
      4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;
      5、转发可以携带数据,信息不会丢失;重定向不能携带参数,信息会丢失(request范围)。
 6、转发只能在服务器内部转发;重定向没有限制,重定向是可以访问外部资源。
一般浏览上带参数有参数,一般都是使用重定向。
规律 : 一般情况下,转发可以使用request来传参,重定向只能使用session

Session:会话技术,从客户端打开浏览器访问服务器,到最后客户端关闭浏览器,整个过程称为一次会话。
在这个会话的过程中,服务器会针对每个客户端创建一个和客户端相关的唯一的临时容器,这个容器用于保存当前客户的所有信息。
并且在给客户端响应数据的时候,会给客户端回送一个唯一标识当前客户端相关的临时容器的id,在客户端下次访问服务器的时候,会携带这个id信息(cookie),在服务器端就可以找到和客户端相关的临时容器, 继续使用这个临时容器。

sessionId
每个session都有一个唯一的sessionid,
session.getId();可以获取session的id

Session的销毁时间:
1、一般在web服务器中Session有默认的存活时间,一般是半小时。如果在30分钟内,用户一直没有做任何操作,这时服务器会当前这个Session自动的销毁。
2、不正常关闭服务器。正常关闭服务器,服务器会把这个Session对象使用io流中的序列化技术保存在tomcat/work目录下
3、在Servlet程序中手动的销毁Session对象。session.invalidate();
Session的存活时间可以在web.xml中配置也可以通过方法指定:
setMaxInactiveInterval(int interval); //单位是秒,一般是在存储值的时候进行
4:会话的清除
设置会话失效:session.invalidate();
移除会话的一个属性:session.removeAttribute(key);
5:cookie
Cookie技术主要需要依赖于给用户响应数据时,服务器给用户的本地(客户端)写数据。
Cookie中存储的是服务器端发送到客户端的少量信息。
Cookie技术主要解决的是在客户端和服务器进行交互的过程中,保存用户的数据,
6:cookie API
创建cookie:
在javax.servlet.http 包中有 Cookie类,它拥有接收2个参数的构造方法,可以创建一个Cookie对象。
Cookie(String name, String value) :name就是给cookie起一个名字,value是当前Cookie具体的数据。类似于一个map,通过name获取具体的值。
使用new就可以创建出一个cookie- 服务器端

获取cookie
需要使用HttpServletRequest对象中的getCookies方法,会得到一个Cookie数组,这是因为一个站点可能会存放多个Cookie数据
例如:Cookie[] cookies = request.getCookies();
得到Cookie数组之后,判断cookies数组是否存在 cookies == null,如果cookies存在,根据cookie的name去查找指定cookie

发送cookie
创建好Cookie对象之后,需要使用HttpServletResponse中的addCookie方法,将Cookie对象添加到响应中,然后发给客户端。
例如:response.addCookie(cookie);  // 将cookie写到客户端
在Cookie对象中提供了getName可以获取Cookie的key值,提供的getValue可以获取key对应的value值,同时也可以使用setValue给当前的Cookie对象设置value值。
SetPath设置cookie可以访问资源路径
SetMaxAge() - 设置cookie的生存时间 ,单位是秒

Servlet
servlet是一种服务器端的应用程序,具有独立于平台和协议的特性,可以生成动态的web页面。
它担当客户请求(web浏览器或其他HTTP客户程序)和服务器响应(HTTP服务器上的数据库或应用程序)的中间层。

Servlet的实现有三种方式   - 记住
第一种:实现Servlet接口,实现所有的方法,其中init方法,service方法,destroy方法是其声明周期方法
第二种:继承GenericServlet
第三种:继承HttpSevlet, 重写doGet和doPost方法

servlet核心API介绍
Servlet核心API其实都是围绕两个核心对象展开的,request,response
获取用户的请求参数:接受请求,接受参数
获取用户请求参数的多个值
获取请求方式
获取和创建cookie的值
获取session对象
获取转发器对象进行转发
重定向操作

过滤器的实现与配置
编写java类实现Filter接口,并实现其doFilter方法。
在web.xml文件中对编写的filter类进行注册,其实和servlet的配置是一样的。

域对象
就是一个容器,主要是用来存储数据并且数据传递
PageContext 
page域指的是pageContext,表示JSP页面,是四大作用域中最小的一个。存储的值只在当前页面有效
Request 
request域指Request,一次请求来到服务器,服务器创建,服务器这次请求响应结束后销毁request,request里面的数据只有当前的一个请求域内,也就是请求转发前后的servlet可以共享。
Session 
session域指的是session
在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。
当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。其作用域是一次会话
ServletContext
application域指的是ServletContext
ServletContext对象是作用返回最大的域对象,并且整个工程只有一个该对象 ,ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

只要是域对象都有一些共同的方法:
    request.setAttribute(String key, Object value);
    request.getAttribute(key);
    request.removeAttribute(key);

EL:expression language: 表达式语言,一般称它为EL表达式

${ key} = request.getAttribute(“key”) , key就是在域对象中存储数据时的 key 值,request.setAttribute(key,value)
注意:如果域中不存在某个key值的话,EL取出来的是一个空字符串

EL表达式语句在四个域对象中执行查询时,用key为关键字,
分别从page、request、session、application四个域中查找相应的对象,如果取到值就返回对应的value,如果没有则返回空字符串 “” ,不是null

EL的11个内置对象使用
pageContext          就是jsp中的pageContext
pageScope               jsp中的内置对象page
requestScope         jsp中的内置对象request
sessionScope            jsp中的内置对象session
applicationScope        jsp中的内置对象ServletContext

page ,request ,session ,application  类似于一个map集合,在el表达式中直接使用这个4个内置对象,然后  .  上key,就能够从不同的范围中取出数据。
如果不知道在那个范围,就直接书写key值。
param                是获取用户请求参数中的携带的数据,类似于request中的getParameter方法
paramValues            是获取用户请求参数中的携带的数据,类似于request中的getParameterValues方法  用于获取复选框中的数据
header                获取请求头中的信息,根据指定的头获取 referer
headerValues            根据某个头获取头对应的多个value值
cookie                直接获取cookie对象
initParam                获取初始化配置的参数

jstl
Jstl : JSP Standard Tag Library : JSP标准标签库
在使用jstl之前需要将jsp的包导入,然后引入标签库<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

jstl 标签库分类
core 核心标签库 (使用的最多)
fmt 完成国际化的 (很少使用)
functions jstl中的函数库 (基本不用)
sql 主要是在jsp页面上操作数据库 (基本不用)
xml 操作xml文件的(基本不用)

使用说明
JSTL的核心标签库标签共14个,使用这些标签能够完成JSP页面的基本功能,减少编码工作。
Jstl 的标签一般都会和EL表达式一起使用
c:out  value=””  输出语句 有个default 属性,如果value为空,则输出默认
c:set  var="" value="" scope="" 给域对象设置值,scope可以省略,默认在本页有效
c:remove  var="" scope="" 删除域对象中的某个值,scope可以省略
c:catch  捕获异常,不会使用
c:forTokens  items="" delims="" 使用指定的分隔符切割字符串
c:import  url="" 在当前页面上引入其他的页面内容 类似于 前面学习的jsp:include,注意不是导入
c:redirect   重定向
c:url  在页面上可以显示超链接等信息,完成页面的跳转 
c:choose标签,c:when标签,c:otherwise标签,类似于switch
用的比较多的是:c:if标签,c:forEach标签
一般和el一起使用

Java小白从0开始:知识点(3)相关推荐

  1. Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!

    Java小白的历练之路------从0到1 title: Java Essay date: 2022-09-07 08:58:32 tags: Java notes 写在前面: 免责声明:本笔记来源自 ...

  2. 【Java小白】 简易扑克牌比大小游戏

    简易扑克牌比大小游戏 背景 涉及的知识点 源代码 代码执行结果 注意事项 结尾碎碎念 背景 自学Java已有一周,决定开始做一个慕课里的小作业:简易扑克牌比大小 ps:我还真不会打牌--_-|| 游戏 ...

  3. java小白的学习自述(大三)

    自我介绍 本人是广州普通二本(2b)的大三在校生.因为过了12点又老一岁,就有感而发,想记录一下自己这一年多的java学习之旅和感想. 学习之初 我是大二开始学习编程的,因为大一比较浪,逃课,挂科什么 ...

  4. 小白学编程“Java小白”入门解疑大全

    成功的人分几种,有一种人叫做关系户,他们渠道多,广织关系网,有一种叫做平台户,他们平台有多硬,他们就有多硬,但无论是关系户还是平台户,依靠的总是别人的手.别人的嘴巴.别人辛苦创立下来的资源,归根到底, ...

  5. Java小白常问的问题大全

    Java小白在初学Java时都会遇到各种各样的问题,小编来总结一下一些常见的问题.比如,可以用%除以一个小数吗?a+=b和a=a+b的效果有区别吗?声明一个数组为什么需要花费大量时间?为什么Java库 ...

  6. 前端小白学习路线及知识点汇总(三)-- JavaScript基础

    前端小白学习路线及知识点汇总(三)-- JavaScript基础 一. JavaScript的组成 ECMAScript:由ECMA国际进行标准化的一门编程语言,往往被称为JavaScript或Jsc ...

  7. 电脑用java怎么编程,使用java编程从0到1实现一个简单计算器

    学习编程语言最重要的就是实践.很多小伙伴在学习完编程语言后,一直停留在基础阶段,只懂一大堆理论知识,而不懂得实践.那么,今天我们一起来动手做一个小计算器,回顾下学习过的知识,同时这也是很多大学计算机专 ...

  8. Java进阶3 - 易错知识点整理(待更新)

    Java进阶3 - 易错知识点整理(待更新) 该章节是Java进阶2- 易错知识点整理的续篇: 在前一章节中介绍了 ORM框架,中间件相关的面试题,而在该章节中主要记录关于项目部署中间件,监控与性能优 ...

  9. 34岁!100天!学会Java编程(Day12)——知识点串连

    知识点串连 前面开发项目时,主要依靠的是<手把手教你学Java>中零散的知识点,以及将<Java从入门到精通>当作开发词典来进行查询.晚上将后者从头到尾过一遍,对知识点进行查漏 ...

最新文章

  1. “国际软件自由日”介绍
  2. 洛谷 P4245 【模板】任意模数NTT
  3. 逆向 EasyBase64
  4. pb界面框架开发_CATIA CAA二次开发草图界面框架类:CATSketcherCommands
  5. UML(1) - 概述
  6. PHP 根据referer 跳转,PHP利用REFERER根居访问来地址进行页面跳转
  7. 在web开发领域,java已死是定局。
  8. Rob Pike:走进Go语言
  9. 2021年考研经验分享(初试408分)
  10. H3C官方培训课件大全
  11. 如何让Typecho支持有趣的 Emoji
  12. 小米路由器显示无法连接服务器错误代码,小米路由器:路由器无法上网怎么办...
  13. 85人教版高中英语第一册第十一课 AT A TAILOR'S SHOP
  14. 计算机win10分区软件,简单易用的win10分区软件:分区助手
  15. BUUctf [GXYCTF2019]Ping Ping Ping
  16. notepad++ 联想输入 如何关掉
  17. LVGL 获取光标坐标位置
  18. 【日常学习】U-net的改进
  19. “核高基”重大专项取得阶段性成果
  20. Springboot定时器——cron表达式规则

热门文章

  1. 堆叠基础配置,以及堆叠交换机其中一台设备掉电,带外是否能管理
  2. 视频直播首帧速度优化
  3. 算法复杂度-渐进分析
  4. 14 行 CSS 代码实现明暗模式
  5. Talend 对数据添加过滤
  6. 2022年最新版TMIC新品策划师题库
  7. Java毕设项目二手车车况在线评估计算机(附源码+系统+数据库+LW)
  8. BASH脚本基础:环境变量PS1介绍
  9. Web应用防火墙使用“指北”
  10. Command line is too long. Shorten command line for XXXX.testXXX or also for JUnit defau......