关于Java的部分小知识点

  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

  1. flush():表示刷新缓冲区,刷新之后可以再次的写数据,但是close之后是不可以写数据的。
    如果我们写的数据是比较少是可以不用刷新的,但是如果是写的数据很多,建议是写一部分刷新一部分,然后在close.

  2. 转换输入流和输出流的便捷类。(原因:在使用转换流的时候流的名称是比较长的饿,操作起来不是很方便,并且不用指点编码方式,因此java提供了针对转化流提出了便捷类)
    (1) 转换输入流 inputStreamReader 对应的便捷类 FileReader
    (2) 转换输出流 outputStreamWriter 对应的便捷类 FileWriter
    (3) 高效的字符输入流:BufferedReader
    (4) 高效的字符输出流:BufferedWriter

  3. 高效字符输入流特有的功能
    (1):readLine():一次读取一行,line是表示一行,不包含换行符。
    (2):newLine():里面带有换行,在window中或者一些高级的编辑器中都做了兼容。

  4. 使用字符流复制文本文件的五种方式
    (1) 使用便捷类一次读取一个字符(FileReader)
    (2) 使用便捷类一次读取一个字符数组(FileReader)
    (3) 使用高效的字符流一次读取一个字符(BufferedReader)
    (4) 使用高效的字符流一次读取一个字符数组(BufferedReader)
    (5) 使用高效的字符流一次读取一行(BufferedReader)

  5. 数据输入流和数据输出流(输入和读取一些基本的数据)
    (1) 数据输入流(DataInputStream)
    (2) 数据输出流(DataOutputSream)

  6. 内存操作流
    (1) 操作字节数组
    (2) 操作字符数组
    (3) 操作字符串

  7. 打印流
    (1) 字节打印流 PrintStream
    (2) 字符打印流 PrintWriter
    **特有的功能(可以操作任意数据类型)

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

  9. 网络模型的七层结构
    (1) 物理层:定义物理设备的标准
    (2) 数据链路层:从物理层接收MAC地址进行封装和节封装
    (3) 网络层:主要是从下一层获取到IP地址进行封装和解封装
    (4) 传输存:传输数据的端口和协议,从下一层接收到的数据进行分段和传输,当数据到达目的地的时候将数据进行重组。
    (5) 会话层:主要是接收和发送请求
    (6) 表示层:将数据进行解释,也就是将计算机能看懂的语言转化为我们能够看得懂的东西。
    (7) 应用层:将数据展示在应用终端上。

  10. 网络编程的三要素
    (1) IP地址:计算机在网上的位置
    (2) 端口号:标识我们的计算机的应用程序,分为物理端口和逻辑端口,物理端口一般指的是网卡,逻辑端口是标识进程的,在0~65535中是物流端口。
    (3) 协议:数据传输规则
    (4) UDP协议的特点:不需要建立连接,传输的速度快,不安全,不可靠,有大小的限制,一般是64k.
    TCP协议的特点:需要建立连接,传输的速度慢,安全,可靠。没有大小的限制。

  11. 网络编程(套接字编程,Socket编程)
    (1) 基本的原理:Socket=IP地址+端口号。
    (2) 应用程序的两端都有Socket,然后数据按照某种协议使用IO流的方式进行数据的传输。

  12. TCP协议
    开发步骤
    客户端 (1) 创建TCP通讯协议对象(Scoket)
    (2) 获取输出流对象
    (3) 写数据
    (4) 释放资源
    服务端 (1) 创建服务对象(ServerSocket)
    (2) 监听客户端
    (3) 获取输入流对象
    (4) 读取数据
    (5) 释放资源

  13. 进程以及多线程概述。
    (1) 什么是进程:就是现在正在运行的程序
    (2) 多进程是可以提高CUP的利用率
    (3) 什么是线程:一个程序有多个任务,每一个任务就是一个线程。线程存在的意义是提高应用程序的使用效率。他们的执行时随机的。
    (4) 并发:就是在同一个时间点上执行。
    (5) 并行:同一个时间段上执行。

  14. JVM的运行原理
    当我们使用Java命令来运行程序的时候,程序要运行时就启动了一个JVM,而JVM就相当于一个进程,
    在JVM启动时就自动开启了一个线程,而此时的线程就是一个主线程,主线程是在main方法中的,JVM是多线程的,至少存在两个线程
    一个是主线程,一个是垃圾回收线程。

  15. 多线程的实现方式。(方式一)
    (1) 方式一
    *** 定义一个类,让这个类继承Tthread
    *** 冲写run()方法。重写run()方法的目的是将需要运行的代码放在里面。
    *** 创建这个类的对象。
    *** 启动线程。
    (2) 获取线程的名称
    *** getName():获取线程的名称
    *** setName():设置线程名称
    *** 通过构造方法,来写名称
    (3) 线程的调度模型
    *** 分时调度
    *** 抢占式调度
    *** 线程的最大优先级是10.最小是1,默认是5.
    *** 线程的优先级的大小是表示抢占CUP的概率增大了,并不是一定获得了CUP的执行权。
    *** 休眠线程 selp(),由于是静态方法,可以直接调用。
    *** 加入线程 join() ,等待该线程停止之后在执行其他的线程。在启动之后再加入线程才能起作用。
    *** 线程礼让 yiled(),礼让的时间非常短暂,如果这时候其他的线程还没有抢占CUP,那么就继续此线程继续和其他线程抢占。
    *** 守护线程 setDameon(),如果其他的线程执行完了之后,剩余的线程都是守护线程,那么JVM就会直接退出。
    *** 线程中断,是打断线程受阻状态,让程序继续执行,但是程序会抛出一个异常。

  16. 多线程的实现方式二
    (1)实现步骤
    *** 创建一个类,让这个类去实现Runable,
    *** 重写run()方法。
    *** 创建该类的对象
    *** 创建Thread类的对象,然后把3中的对象作为参数传递给Thread.
    *** 使用Start()方法启动线程。
    (2) 两种线程实现方式的比较
    *** 两种方式都能实现多线程,但是第二种方式相对比第一种方式要好,因为第一种方式是单继承的,而第二种方式是通过
    实现Runable接口来实现的,在接口中,继承是可以单继承,也可以是多继承,这样一定程度上避免了单继承带来的局限性。
    (3) 获取当前线程对象
    *** Thread currentThread
    *** sleep 线程休眠

  17. 判断一个多线程是否存在问题的标准
    (1) 是否是多线程
    (2) 是否存在共享数据
    (3) 是否存在多条语句来共同操作数据(可以打乱)
    *** 解决方案
    把多条数据看做一个整体,当一个线程执行这个整体的时候,其他的线程不能只想这个整体,那就需要使用到(同步)代码块。
    *** 使用到 synchronized(new object){},同步代码块解决安全问题,主要取决于同步代码块中的对象Object,这个Object需要带成员变量出声明为静态的。

  18. 同步代码块
    (1) 同步代码块解决线程安全问题主要是取决于同步代码块中的对象。要求多个线程必须使用的是同一个对象。对象有的时候也被称之为同步锁(监视器),它的弊端是效率低。
    (2) 同步代码块锁对象是(任意对象)
    (3) 同步方法的锁的对象是(this)
    (4) 静态同步方法锁的对象是(线程类对应的字节码对象)

  19. 反射
    *** 什么是反射
    反射是在Java运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法。
    对于任意一个对象,都能够调用它的任意一个方法和属性。
    这种动态获取和动态调用对象的方法的功能叫做Java语言的反射着机制。
    想要剖析一个类必须要先获得这个类的字节码文件。而剖析一个类就是使用的Class中的方法。
    (1) 类加载器的分类
    *** Bootstrap ClassLoader:是根加载器,主要是负责Java中核心部分类的加载
    *** Extension ClassLoader:扩展类加载器,是负责JRE的扩展类加载
    *** System ClassLoader:系统类加载器,负责在JVM启动之后加载Java命令的class文件。,以及classpath环境变量指定的jar包和路径。
    (2) 获取字节码文件的方式
    *** getClass()方法
    *** 通过静态的class
    *** 通过Class中静态的成员方法获取

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,562评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,066评论 0 62
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,169评论 11 349
  • performSelector的原理以及用法??? 1、ios框架的搭建,功能模块的设计; 2、设计模式,和数据 ...
    iPhone阅读 167评论 0 0
  • 课程笔记文集地址:Udemy课程:The Complete iOS 9 Developer Course - Bu...
    sing_crystal阅读 528评论 0 0