java基础知识笔记.docx

上传人:b****8 文档编号:12992196 上传时间:2023-06-10 格式:DOCX 页数:24 大小:24.03KB
下载 相关 举报
java基础知识笔记.docx_第1页
第1页 / 共24页
java基础知识笔记.docx_第2页
第2页 / 共24页
java基础知识笔记.docx_第3页
第3页 / 共24页
java基础知识笔记.docx_第4页
第4页 / 共24页
java基础知识笔记.docx_第5页
第5页 / 共24页
java基础知识笔记.docx_第6页
第6页 / 共24页
java基础知识笔记.docx_第7页
第7页 / 共24页
java基础知识笔记.docx_第8页
第8页 / 共24页
java基础知识笔记.docx_第9页
第9页 / 共24页
java基础知识笔记.docx_第10页
第10页 / 共24页
java基础知识笔记.docx_第11页
第11页 / 共24页
java基础知识笔记.docx_第12页
第12页 / 共24页
java基础知识笔记.docx_第13页
第13页 / 共24页
java基础知识笔记.docx_第14页
第14页 / 共24页
java基础知识笔记.docx_第15页
第15页 / 共24页
java基础知识笔记.docx_第16页
第16页 / 共24页
java基础知识笔记.docx_第17页
第17页 / 共24页
java基础知识笔记.docx_第18页
第18页 / 共24页
java基础知识笔记.docx_第19页
第19页 / 共24页
java基础知识笔记.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java基础知识笔记.docx

《java基础知识笔记.docx》由会员分享,可在线阅读,更多相关《java基础知识笔记.docx(24页珍藏版)》请在冰点文库上搜索。

java基础知识笔记.docx

java基础知识笔记

目录

1、链表4

1、HashMap4

1.1、HashMap内部算法5

2、Iterator接口6

3、Collections 工具类6

4、for-each 循环7

2、异常8

2.1     异常的继承结构8

2.2     异常捕获9

2.3     throws9

3、异常(续)10

3.1     try-catch 和 throw10

3.2     throw10

3.3     异常包装11

3.4     自定义异常11

4、io12

5、File13

5.1  流 Stream15

5.2InputStream/OuputStream15

5.3FileInputStream/FileOutputStream16

5.4BufferedInputStream/BufferedOutputStream16

5.6ObjectInputStream/ObjectOutputStream16

6 字符编码17

6.1     Java的char类型字符,采用 Unicode 编码19

6.2     Java的编码转换运算19

7  Reader/Writer19

8InputStreamReader/OutputStreamWriter20

9   BufferedReader21

10   PrintWriter、PrintStream21

11  io小结21

8   线程22

8.1     创建线程22

8.2     继承 Thread22

8.3     线程的方法23

8.3     多线程数据访问冲突24

8.4     线程同步 (步调一致)24

8.4.1 同步锁24

8.5     synchronized24

8.6     生产者、消费者25

8.7     等待和通知25

9   网络26

9.1     Socket通信26

9.2     ServerSocket27

9.3     客户端Socket27

 

1、链表

1、HashMap

●  哈希表、散列表

●  存键值对数据

 

key

value

9527

"唐伯虎"

9528

"华夫人"

9529

"如花"

 

●  作用:

快速查找数据

用键,快速定位数据,提取对应的值

 

●  键:

⏹  不重复

⏹  无序

⏹  要同时重写 hashCode() 和 equals()

◆  equals()相等,hashCode()必须相同

◆  equals()不等,hashCode()尽量不同

●  方法:

⏹  put(键, 值)

⏹  get(键)

⏹  remove(键)

⏹  size()

⏹  keySet()

取出所有的键,封装到一个Set类型集合

1.1、HashMap内部算法

●  内部用 Entry[] 数组存放数据

●  默认的初始容量 16

●  调用 key.hashCode() 获得键的哈希值

●  用哈希值和数组长度,计算一个下标值 i

●  把键值对封装成Entry对象

●  放入下标 i 位置

⏹  空位置,直接放入

⏹  有数据,依次equals()比较是否相等

◆  找到相等的,覆盖值

◆  没有相等的,用链表连接在一起

⏹  负载率、加载因子(数据量/容量) 0.75

◆  新建容量翻倍的新数组

◆  所有数据重新执行哈希运算,重新计算位置,放入新数组

⏹  jdk1.8

◆  链表长度到8,转成红黑树

◆  红黑树数据减少到6,转回链表

●  Object 的 hashCode() 方法

⏹  默认用内存地址作为哈希值

2、Iterator接口

●  迭代器的父接口

●  方法

⏹  hasNext()

⏹  next()

⏹  remove()  移除刚刚取出的数据

 ●  迭代遍历期间,不能直接使用集合增删数据

3、Collections 工具类

●  Collections.addAll(集合,值1, 值2, 值3...)

●  Collections.sort(List)

●  Collections.binarySearch(List, 目标值)

●  Collections.max()

●  Collections.min()

●  Collections.swap(List,i,j)

4、for-each 循环

●  数组下标遍历、集合的迭代遍历的语法简化

●  数组

 for(inti=0;i

   Strings=a[i];

//处理s

}

 foreach简化语法:

 for(Strings:

a){

 //处理s

}

 ●  集合的迭代遍历

for(Iteratorit=list.iterator();it.hasNext();){

   Strings=it.next();

   //处理s

}

 foreach简化语法:

for(Strings:

list){

   //处理s

}

2、异常

●  封装错误信息的对象

●  错误信息:

⏹  类名

⏹  提示消息

⏹  行号

2.1     异常的继承结构

Throwable

    |-Error  系统级错误

    |-Exception 可修复的错误

         |- 其他Exception

         |-RuntimeException

               |-NullPointerException

               |-ArrayIndexOutOfBoundsException

               |-NumberFormatException

               |-ArithmeticException

               |-ClassCastException

               |-... 

2.2     异常捕获

try{

}catch(AExceptione){

}catch(BExceptione){

}catch(父类型Exceptione){

}finally{

   不管出错不出错,都会执行

}

2.3     throws

●  为方法设置异常的抛出管道

voidf()throwsA,B,C{

 }

●  方法中抛出异常,必须有对应类型的管道才能抛出

●  异常处理两种方式(必须二选一):

⏹  捕获

⏹   添加管道抛出

3、异常(续)

3.1     try-catch 和 throw

●  catch 捕获异常

⏹  修复异常

●  throw

⏹  向前抛,让前面代码处理

●  一般底层异常,要抛到上层处理

●  经验少,不知道该 catch 还是 throw,选throw

3.2     throw

●  手动抛出异常,执行异常的抛出动作

AExceptione=newAException();

thorwe;

3.3     异常包装

●  捕获的异常对象,包装成另一种类型,再抛出

try{

}catch(AException e){

  thrownewBException(e);

}

●  使用场景:

◆  不能抛出的异常,包装成能抛出的类型,再抛出

◆  异常简化

●  方法重写时,子类方法,异常不能比父类方法多

3.4     自定义异常

●  现有的异常类型,不能表示具体业务中的错误

●  自定异常,用新的异常类型名称,来表示错误

◆  转账失败

ZhuanZhangShiBaiException

◆  用户名错误

UsernameNotFoundException

◆  密码错误

WrongPasswordException

●  自定义异常

◆  起一个合适的类名

◆  选择一个合适的父类

◆  添加合适构造方法

4、io

●  io

Input/Output

输入 / 输出

●  java.io 包

File

InputStream/OutputStream

FileInputStream/FileOutputStream

BufferedInputStream/BufferedOutputStream

ObjectInputStream/ObjectOutputStream

Reader/Writer

InputStreamReader/OutputStreamWriter

BufferedReader

PrintWriter、PrintStream

5、File

●  封装一个磁盘路径字符串,对这个路径可以执行一次操作

●  可以封装:

◆  文件的路径

◆  文件夹的路径

◆  不存在的路径

●  文件、文件夹属性方法

◆  length()

文件的字节量,文件夹无效

◆  exists() 是否存在

◆  isFile() 是否文件

◆  isDirectory() 是否文件夹

◆  lastModified() 最后修改时间毫秒值

◆  getName() 文件、文件夹名

◆  getParent() 父文件夹

◆  getAbsolutePath() 完整路径

◆  ....

●  创建、删除方法

◆  createNewFile()

新建文件,

文件已经存在,不会新建文件,返回false

文件夹不存在,会出现异常

◆  mkdirs()

新建多层文件夹

◆  delete()

删除文件,删除空文件夹

◆  File.createTempFile()

在系统临时目录中,创建临时文件

●  文件夹列表方法

◆  list()

返回String[] 数组

["a.txt",  "b.txt",  "c.txt"]

◆  listFiles()

返回 File[] 数组

5.1  流 Stream

●  把数据的读写操作,抽象成数据在管道中流动

●  流只能单方向流动

◆  输入流,用来读取数据

◆  输出流,用来输出数据

●  数据只能从头到尾顺序读写一次

5.2InputStream/OuputStream

●  字节流的抽象父类

●  write(intb)

int四个字节中,只输出末尾的一个字节值

●  write(byte[]buff)

输出数组中全部字节值

●  write(byte[]buff,start,length)

输出数组中从 start 开始的 legnth 个字节值

●  read()

读取一个字节值,再补三个0字节,转成int

读取结束,再读取,返回 -1 

●  read()

5.3FileInputStream/FileOutputStream

●  直接插在文件上,直接读写文件数据

●  创建对象

◆  newFileOutputStream(文件)

不管文件是否存在,都会新建空文件;

文件夹不存在,会出现异常

◆  newFileOutputStream(文件, true)

如果文件已经存在,追加数据

5.4BufferedInputStream/BufferedOutputStream

●  缓冲流,提供一个内存缓冲区,提高单字节读写效率

●  BufferedInputStream

预读一批数据,缓存在它内部数组中

●  BufferedOutputStream

输出的数据,暂时缓存在它内部数组中,缓存满会批量输出,或者手动 flush() 刷出

5.6ObjectInputStream/ObjectOutputStream

●  对象序列化和反序列化流

●  writeObject(Objectobj)

●  readObject()

●  不序列化的成员变量

⏹  static

属于类,不随对象被序列化输出

⏹  transient

临时,只在程序运行期间,在内存中存在,不会随对象被序列化持久保存

●  序列化版本id

⏹  控制旧版本的数据,不能恢复成新版本的类型

staticfinalserialVersionUID=7

⏹  自己不定义,编译器会添加版本id

◆  根据类的定义信息,计算产生一个版本值

6 字符编码

●  ASC-II

0 到 127

英文字符、标点,控制指令字符

●  iso-8859-1,Latin-1

160 到 255

西欧字符

●  CJK (中日韩)等

⏹  双字节编码

⏹  256 到 65535

●  GBK

⏹  国标码

⏹  2万+ 中文

●  Unicode

⏹  统一码、万国码

⏹  100万+

⏹  常用字符表,双字节

⏹  生僻字符表,三字节或以上

●  UTF-8

⏹  UnicodeTransformationFormat

Unicode 传输格式

⏹  英文,单字节

⏹  某些字符,双字节

⏹  中文,三字节

⏹  特殊符号,四字节

●  GBK

a中  --  61  d6d0

●  Unicode

a中  --  0061  4e2d

●  UTF-8

a中  --  61  e4b8ad

6.1     Java的char类型字符,采用 Unicode 编码

6.2     Java的编码转换运算

●  Unicode--> 其他编码

 

s="abc中文";

//转成系统默认编码

byte[]a=s.getBytes();

//转成指定的编码

s.getBytes("UTF-8");

●  其他编码 -->Unicode

//从默认编码转换

s=newString(byte[]);

//从指定的编码转换

s=newString(byte[],"UTF-8");

7  Reader/Writer

●  字符流的抽象父类

●  方法

⏹  write(intc)

int四个字节中,末尾两个字节是char类型字符的字节值,只处理末尾两个字节的输出

⏹  write(char[]buff)

⏹  write(char[]buff,start,length)

⏹  write(Strings)

 

 

8InputStreamReader/OutputStreamWriter

●  编码转换流

●  InputStreamReader

读取其他编码,转换成 Unicode

●  OutputStreamWriter

Unicode转成其他编码输出

9   BufferedReader

●  字符缓冲流,提高单个字符读写效率

●  readLine()

⏹  读取一行字符串,返回值不含末尾换行符

10   PrintWriter、PrintStream

●  打印输出流

●  任何类型数据,都可以转成字符串输出

out.write(97)  -->61

out.print(97)  -->3937

●  方法

⏹  print()

⏹  println()

●  PrintStream 只能接字节流

●  PrintWriter 能接字节流,也能接字符流

11  io小结

●  File

⏹  文件目录属性

⏹  创建删除

⏹  目录列表

●  字节流

⏹  FileIn...

⏹  BufferedIn...

⏹  ObjectIn...

⏹  PrintStream

●  字符流

⏹  InputStreamReader/OutputStreamWriter

⏹  BufferedReader  readLine()

⏹  PrintWriter   println()

8   线程

●  进程

⏹  在操作系统中,并行运行的任务

●  线程

⏹  进程内部并行执行的子任务

8.1     创建线程

●  继承 Thread

●  实现 Runnable 

8.2     继承 Thread

●  定义 Thread 子类

●  重写 run() 方法

●  线程启动后,并行执行 run() 方法中的代码

8.3     线程的方法

●  Thread.currentThread()

获得正在执行这行代码的线程对象

●  Thread.sleep(毫秒值)

让当前线程暂停指定的毫秒时长

●  start()

●  getName()

●  setName(name)

●  interrupt()

打断一个线程的暂停状态,

被打断的线程,会出现 InterruptedException

●  join()

当前线程暂停,等待被调用的线程执行结束

main线程执行:

     t.join()

     main暂停,等待t线程结束

●  getPriority()

●  setPriority(优先级)

线程优先级 1 到 10,默认是5

●  setDaemon(true)

把线程,设置成后台线程、守护线程

虚拟机等待所有前台线程结束,自动退出

不会等待后台线程结束

8.3     多线程数据访问冲突

●  一个线程修改数据

●  另一个线程同时访问数据

●  访问到修改了一半的数据,称为“脏数据”

8.4     线程同步 (步调一致)

●  一个线程修改数据时,另一个线程等待

●  一个线程访问数据时,修改线程等待

8.4.1 同步锁

●  Java中任何对象上,都有唯一的一个同步锁

●  让多个线程执行时,争夺同一个对象的锁

●  抢到锁可以执行,抢不到锁,要等待

8.5     synchronized

●  同步

●  synchronized(对象){

代码

}

⏹  争夺指定对象的锁

●  synchronizedvoidf(){

代码

}

⏹  争夺当前对象的锁 this

●  staticsynchronizedvoidf(){

代码

}

⏹  争夺“类”的锁 R1.class

8.6     生产者、消费者

●  线程间的通信模型

●  生产者线程,产生数据,放入一个数据容器

●  消费者线程,从数据容器,获取数据进行处理

8.7     等待和通知

●  Object 的方法

⏹  wait()

⏹  notify()

⏹  notifyAll()

 

●  线程在被调用的对象上等待

●  向在被调用的对象上等待的线程发出通知

●  等待和通知方法,必须在同步代码块内才能调用

●  等待和通知的对象,必须是加锁的对象

synchronized(a){

   a.wait()

   a.notifyAll()

}

●  wait() 外面,通常使用循环检查条件

●  notify() 只通知所有等待线程中的一个

●  notifyAll() 通知所有等待的线程

9   网络

●  win+r, 输入cmd

●  执行命令:

ipconfig

ping192.168.31.xxx

如果ping不通,对方要关闭防火墙

9.1     Socket通信

●  Socket 网络套接字

●  IP地址

●  端口

9.2     ServerSocket

服务器端Socket

●  在服务器端,选择一个端口,等待客户端发起连接

●  启动服务

ServerSocketss=newServerSocket(端口);

●  等待客户端发起连接,并建立连接通道,

返回的 Socket 对象,是连接通道的服务器端插头

Sockets=ss.accept();

9.3     客户端Socket

●  新建Socket对象,连接指定服务器的指定端口

Sockets=newSocket(ip, 端口);

●  从Socket获得双向的流

in=s.getInputStream()

out=s.getOutputStream()

●  设置接收数据的等待超时时长

s.setSoTimeout(毫秒值)

等待接收数据超时后,会出现SocketTimeoutException

10   反射 Reflect

●  框架底层代码都是通过反射执行

config.txt

day1802.A;f1

day1802.B;f2

day1802.C;f3

●  使用方法区加载的“类”,执行反射操作

●  反射可以:

⏹  获得类的定义信息

◆  包名、类名

◆  成员变量定义信息

◆  构造方法定义信息

◆  方法定义信息

⏹  反射创建对象

⏹  反射调用成员

10.1     获得“类对象”(三种方式)

●  Classc=A.class

●  Classc=Class.forName("day1802.A")

●  Classc=a.getClass()

10.2     获得包名类名

●  c.getPackage().getName()

●  c.getName() 完整类名

●  c.getSimpleName() 简写类名

10.3     成员变量的定义信息

●  getFields()

获得所有可见的变量,包含从父类继承的变量

●  getDeclaredFields()

获得本类定义的变量,包括私有,不包含继承的变量

●  getField(变量名)

●  getDeclaredField(变量名)

10.4     构造方法的定义信息

●  getConstructors()

获得所有可见的构造方法

●  getDeclaredConstructors()

获得所有构造方法,包括私有

●  getConstructor(参数类型列表)

●  getDeclaredConstructor(参数类型列表)

10.5     方法的定义信息

●  getMethods()

获得所有可见的方法,包含从父类继承的方法

●  getDeclaredMethods()

获得所有本类定义的方法,包括私有,

不包含继承的方法

●  getMethod(方法名,参数类型列表)

●  getDeclaredMethod(方法名,参数类型列表)

10.6     反射创建对象

●  执行无参构造

Objectobj=c.newInstance()

●  执行有参构造

//1. 获得构造方法

Constructort=c.getDeclaredConstructor(int.class,String.class);

//2. 创建对象,并执行这个构造方法

Objectobj= t.newInstrance(5,"sdfsd");

10.7

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2