关于Java的部分小知识点

来源:互联网 发布:砂浆拉伸粘结强度数据 编辑:程序博客网 时间:2024/05/21 11:36
  1. 程序运行中可能产生的问题(异常的分类)

    (1):严重的问题是Erro

    (2):非严重的问题Exception

    **编译期异常: 就是发生在编译期

    **运行期异常:就是发生在运行期

    (3):jvm对异常的处理方式,如果是main出现了问题

    那么main可以使用自己的方式处理,如果main方法不做处理那么就将问题抛给 调用者。

    处理方式一:使用try...catch(try中的代码越少越好;在catch中要给出处理方式,哪怕是一条输出语句,如果catch中的异常是平级

    关系,那么与顺序无关,如果是有继承关系的,尽量不要放到大的catch中进行处理)

    处理方式二:使用throws

    (4):throws使用在方法之上的,用户异常的声明

    throw是抛出一个异常,是用在方法中的,它不仅可以抛出编译期异常,还可以抛出运行期异常。

    (5):finally:在代码中适中要执行的。一般存放的是释放资源的代码。被执行的前提是jvm不能退出。

    2.final,finally,finalize之间的区别。

    (1):final是一个修饰符,可以用来修饰类,方法,变量。

    (2):finally是try...catch中的一部分,是始终被执行的代码,前提是jvm没有退出。

    (3):finalize是与垃圾回收期有关,是Object中的一个方法。

    3.自定义异常

    就是自己定义异常,一般的情况下java中的异常可以满足大部分程序中出现的异常,但是有时候这些异常

    满足不了我们的需求,这个时候需要我们自己定义异常。

    (1):使用方法,第一步,写一个类继承Exception或者是RunTimeException,第二步是在类中写出无参数和有参数的构造方法。

    (2):异常的注意事项:子类抛出的异常不能抛出比父类更大的异常,或者不抛出异常。子类不能抛出父类不存在的异常。或者不抛出异常。如果父类没有抛出异常,子类重写方法时不能抛出,只能在内部try...catch 。

    4.IO流

    (1):File类,file可以表示一个文件或者文件夹。

    (2):关于File的方法,创建文件还是文件夹不是根据文件的后缀名来区别的,而是根据调用的方法来来创建的。如果没有写具体的路径,那么所创建的文件夹或者文件就在本项目中,

    需要刷项目才能看到。如果想要创建指定目录下的文件夹或者文件需要自己不全路径。

    (3):File中的delete方法是不走回收站的。只能删除单级文件夹,不能删除多级。

    (4):重命名,renameTo,如果目标文件的路径是一致的,那么就是重命名,如果目标文件的路径不是一致的,那么就是先重命名后剪切。

    (5):判断功能:

    (6):file中获取功能相关的方法。

    5.递归算法

    递归算法:方法定义种调用本方法。递归一定要有出口,如果没有出口那就是死递归。而且递归的次数不能太多,如果次数太多就会栈内存溢出。

6.递归练习

(1)看见文件的路径首先要做的就是将路径封装为File对象。

(2)获取File文件或者文件夹对应的数组.

(3)遍历当前的数组,判断数组中的每一个元素、

**当前的元素是文件

判断文件的后缀名是否是以.java结尾

**当前的元素是文件夹,那么调用方法继续遍历。

7.IO流

什么是输入输出:输入和输出是站在内存的角度来看的。将硬盘上到内存中是输入(将硬盘上的数据输入到内存中,是对应的读取),从内存到硬盘上是输出(将内存中的数据写到硬盘上,是一个写的动作)。一般来讲我们平时所说的输入和输出

都是站在内存的角度来说的 。

8.IO流的分类

(1):按照数据的流向来分

**输入流

**输出流

(2):按照数据的类型来分

**字节流(可以操作任何数据)

**字符流(主要是针对中文,一个中文占两个字节,操作起来很方便)

(3):在开发中到底是使用字节流还是使用字符流,如果可以用Windwons自带的记事本打开,并且是可以、

读懂的,就使用字符流来操作,如果无法读懂那么就使用字节流来操作。

(4):按照操作数据类型

**字节输入流:inputStream

**字节输出流: outputStream

**字符输入流: Reader

**字符输出流: Writer

(5):需要注意的是流在使用完了一定要将流关闭,关闭的原因是将这个流的对象变成垃圾;通知系统释放关于该文件的资源,同时也防止了内存泄漏。。一旦流

被关闭了就不能对流进行操作了,因为它已经变成垃圾了。

(6):关于流的使用步骤

**创建流的对象

**调用读或者是写的方法

**关闭流

9.FileOutputStream中的方法

(1): write(byte [] bytes):一次写一个字节数组

(2): write(byte [] bytes ,int off,int len):一次写一个字节数组的一部分

(3): write(int by): 一次写一个字节。

(4):如果想要完成追加写入,在创建对象的时候传入一个boolean类型的值。

10.高效的字节输入输出流(一次读取一个字节数组)

(1):BufferedInputStream:高效的字节输入流。

(2): BufferedOutputStream:高效的字节输出流。

(3): 具体的使用步骤

**创建对象

**调用输入或者输出的方法

**释放资源

11.字符流

(1)字符流=字节流+编码表

(2)编码:就是将一个字符串转换为一个字节数组

**使用到的方法

getBytes(),默认使用的是GBK编码方式

getBytes(String charsetName),指定字符集将string编码到byte中。

(3)解码:就是将一个字节数组转换为一个字符串

**使用到的方法

String(byte[]bytes),解码指定的字节数组然后转换为字符串。默认是使用的是GBK.

String(byte[] bytes,String charsetName),指定解码方式,将字节数组转换为字符串。

******使用什么方式编码就使用什么方式解码。如果编码和解码的方式不统一,那么就会乱码。

(4)转化流

字符输入流 inputStreamReader

字符输出流 outputStreamWriter

12.flush():表示刷新缓冲区,刷新之后可以再次的写数据,但是close之后是不可以写数据的。

如果我们写的数据是比较少是可以不用刷新的,但是如果是写的数据很多,建议是写一部分刷新一部分,然后在close.

13.转换输入流和输出流的便捷类。(原因:在使用转换流的时候流的名称是比较长的饿,操作起来不是很方便,并且不用指点编码方式,因此java提供了针对转化流提出了便捷类)

(1) 转换输入流 inputStreamReader 对应的便捷类 FileReader

(2) 转换输出流 outputStreamWriter 对应的便捷类 FileWriter

(3) 高效的字符输入流:BufferedReader

(4) 高效的字符输出流:BufferedWriter

14.高效字符输入流特有的功能

(1):readLine():一次读取一行,line是表示一行,不包含换行符。

(2):newLine():里面带有换行,在window中或者一些高级的编辑器中都做了兼容。

15.使用字符流复制文本文件的五种方式

(1) 使用便捷类一次读取一个字符(FileReader)

(2) 使用便捷类一次读取一个字符数组(FileReader)

(3) 使用高效的字符流一次读取一个字符(BufferedReader)

(4) 使用高效的字符流一次读取一个字符数组(BufferedReader)

(5) 使用高效的字符流一次读取一行(BufferedReader)

16.数据输入流和数据输出流(输入和读取一些基本的数据)

(1) 数据输入流(DataInputStream)

(2) 数据输出流(DataOutputSream)

17.内存操作流

(1) 操作字节数组

(2) 操作字符数组

(3) 操作字符串

18.打印流

(1) 字节打印流 PrintStream

(2) 字符打印流 PrintWriter

**特有的功能(可以操作任意数据类型)

19.随机访问流

(1) RandomAccessFile: 父类是Object ,内部维护这一个数组。最大的特点是可以读取也可以写数据,数据类型是任意类型的。

关于Java的部分小知识点

20.网络模型的七层结构

(1) 物理层:定义物理设备的标准

(2) 数据链路层:从物理层接收MAC地址进行封装和节封装

(3) 网络层:主要是从下一层获取到IP地址进行封装和解封装

(4) 传输存:传输数据的端口和协议,从下一层接收到的数据进行分段和传输,当数据到达目的地的时候将数据进行重组。

(5) 会话层:主要是接收和发送请求

(6) 表示层:将数据进行解释,也就是将计算机能看懂的语言转化为我们能够看得懂的东西。

(7) 应用层:将数据展示在应用终端上。

21.网络编程的三要素

(1) IP地址:计算机在网上的位置

(2) 端口号:标识我们的计算机的应用程序,分为物理端口和逻辑端口,物理端口一般指的是网卡,逻辑端口是标识进程的,在0~65535中是物流端口。

(3) 协议:数据传输规则

(4) UDP协议的特点:不需要建立连接,传输的速度快,不安全,不可靠,有大小的限制,一般是64k.

TCP协议的特点:需要建立连接,传输的速度慢,安全,可靠。没有大小的限制。

22.网络编程(套接字编程,Socket编程)

(1) 基本的原理:Socket=IP地址+端口号。

(2) 应用程序的两端都有Socket,然后数据按照某种协议使用IO流的方式进行数据的传输。

23.TCP协议

开发步骤

客户端

(1) 创建TCP通讯协议对象(Scoket)

(2) 获取输出流对象

(3) 写数据

(4) 释放资源

服务端

(1) 创建服务对象(ServerSocket)

(2) 监听客户端

(3) 获取输入流对象

(4) 读取数据

(5) 释放资源

24.进程以及多线程概述。

(1) 什么是进程:就是现在正在运行的程序

(2) 多进程是可以提高CUP的利用率

(3) 什么是线程:一个程序有多个任务,每一个任务就是一个线程。线程存在的意义是提高应用程序的使用效率。他们的执行时随机的。

(4) 并发:就是在同一个时间点上执行。

(5) 并行:同一个时间段上执行。

25.JVM的运行原理

当我们使用Java命令来运行程序的时候,程序要运行时就启动了一个JVM,而JVM就相当于一个进程,

在JVM启动时就自动开启了一个线程,而此时的线程就是一个主线程,主线程是在main方法中的,JVM是多线程的,至少存在两个线程

一个是主线程,一个是垃圾回收线程。

26.多线程的实现方式。(方式一)

(1) 方式一

*** 定义一个类,让这个类继承Tthread

*** 冲写run()方法。重写run()方法的目的是将需要运行的代码放在里面。

*** 创建这个类的对象。

*** 启动线程。

(2) 获取线程的名称

*** getName():获取线程的名称

*** setName():设置线程名称

*** 通过构造方法,来写名称

(3) 线程的调度模型

*** 分时调度

*** 抢占式调度

*** 线程的最大优先级是10.最小是1,默认是5.

*** 线程的优先级的大小是表示抢占CUP的概率增大了,并不是一定获得了CUP的执行权。

*** 休眠线程 selp(),由于是静态方法,可以直接调用。

*** 加入线程 join() ,等待该线程停止之后在执行其他的线程。在启动之后再加入线程才能起作用。

*** 线程礼让 yiled(),礼让的时间非常短暂,如果这时候其他的线程还没有抢占CUP,那么就继续此线程继续和其他线程抢占。

*** 守护线程 setDameon(),如果其他的线程执行完了之后,剩余的线程都是守护线程,那么JVM就会直接退出。

*** 线程中断,是打断线程受阻状态,让程序继续执行,但是程序会抛出一个异常。

27.多线程的实现方式二

(1)实现步骤

*** 创建一个类,让这个类去实现Runable,

*** 重写run()方法。

*** 创建该类的对象

*** 创建Thread类的对象,然后把3中的对象作为参数传递给Thread.

*** 使用Start()方法启动线程。

(2) 两种线程实现方式的比较

*** 两种方式都能实现多线程,但是第二种方式相对比第一种方式要好,因为第一种方式是单继承的,而第二种方式是通过

实现Runable接口来实现的,在接口中,继承是可以单继承,也可以是多继承,这样一定程度上避免了单继承带来的局限性。

(3) 获取当前线程对象

*** Thread currentThread

*** sleep 线程休眠

28.判断一个多线程是否存在问题的标准

(1) 是否是多线程

(2) 是否存在共享数据

(3) 是否存在多条语句来共同操作数据(可以打乱)

*** 解决方案

把多条数据看做一个整体,当一个线程执行这个整体的时候,其他的线程不能只想这个整体,那就需要使用到(同步)代码块。

*** 使用到 synchronized(new object){},同步代码块解决安全问题,主要取决于同步代码块中的对象Object,这个Object需要带成员变量出声明为静态的。

29.同步代码块

(1) 同步代码块解决线程安全问题主要是取决于同步代码块中的对象。要求多个线程必须使用的是同一个对象。对象有的时候也被称之为同步锁(监视器),它的弊端是效率低。

(2) 同步代码块锁对象是(任意对象)

(3) 同步方法的锁的对象是(this)

(4) 静态同步方法锁的对象是(线程类对应的字节码对象)

30.反射

*** 什么是反射

反射是在Java运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。

对于任意一个对象,都能够调用它的任意一个方法和属性。

这种动态获取和动态调用对象的方法的功能叫做Java语言的反射着机制。

想要剖析一个类必须要先获得这个类的字节码文件。而剖析一个类就是使用的Class中的方法。

(1) 类加载器的分类

*** Bootstrap ClassLoader:是根加载器,主要是负责Java中核心部分类的加载

*** Extension ClassLoader:扩展类加载器,是负责JRE的扩展类加载

*** System ClassLoader:系统类加载器,负责在JVM启动之后加载Java命令的class文件。,以及classpath环境变量指定的jar包和路径。

(2) 获取字节码文件的方式

*** getClass()方法

*** 通过静态的class

*** 通过Class中静态的成员方法获取

关于Java的部分小知识点

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!