抛出异常

使用throws声明抛出异常

Throws 通常用于方法声明,当方法中可能存在异常,却不想在方法中对异常进行处理时,就可以在声明方法时使用throws声明抛出的异常,然后再调用该方法的其他方法中对异常进行处理。语法格式如下:

数据类型 方法名(形参列表) throws 异常类1,异常类2,…异常类n

{

方法体;

}

使用throw语句抛出异常

有时希望程序自行抛出异常,可以使用throws语句来实现。Throws语句通常用在方法中,在程序中自行抛出异常,使用throw语句抛出的时异常类的实例,通常与if语句一起使用。

其语句格式如下:

Throw new Exception(“对异常的说明”);

自定义异常

创建自定义异常

创建自定义的异常类需要继承自Exception类,并提供含有一个String类型形参的构造方法,该形参就是异常的描述信息,可以通过getMessage()方法获得。

异常的使用原则

在程序中使用异常,可以捕获程序中的错误,但是异常的使用也要遵循一定的规则。下面是异常类的几项使用原则:

  1. 不要过多地使用异常,这样会增加系统的负担。
  2. 在方法中使用try…catch语句块捕获异常时,要对异常做出处理。
  3. Try…catch语句块的范围不要太大,这样不利于对异常的分析。
  4. 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或子异常。、

文件的创建与删除

可以使用File类创建一个文件对象,通常使用以下3种构造方法来创建文件对象。

  1. File(String pathname);
  2. File(String parent,String child);
  3. File(File f,String child);

带缓存的输入/输出流

缓存可以说是I/O的一种性能优化。缓存流为I/O流增加了内存缓存区。有了缓存区,使得再流上执行skip()、mark()和reset()方法成为可能。

数据输入/输出流(DataInputStream类与DataOutputStream类)允许应用程序以与机器无关的方式从底层输入流中读取基本Java数据类型。也就是说,当读取一个数据时,不必在关心这个数值应当时什么字节。

输入/输出

输入流

InputStream类是字节输入流的抽象类,是所有字节输入流的父类。

在swing中常用的布局管理器:流布局管理器、边界布局管理器、网格布局管理器。

重点章节:高级事件处理

键盘事件

当向文本框中输入内容时,将发出键盘事件(KeyEvent)。KeyEvent类负责捕获键盘事件,可以通过为组件添加实现了KeyListener接口的监听器类来处理相应的键盘事件。

KeyListener接口总共有3个抽象方法,其接口的具体定义如下:

鼠标事件

所有组件都能发出鼠标事件(MouseEvent),MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现了MouseListener接口的监听器类来处理相应的鼠标事件。

MouseListener接口共有5个抽象方法,具体定义如下:

窗体事件

在捕获窗体事件(WindowEvent)时,可以通过3个事件监听器接口来实现,分别为WindowFocusListener、WindowStateListener和WindowListener。

首先时捕获窗体焦点变化事件

捕获窗体状态变化事件

捕获其他窗体事件

选项事件

多线程

Java语言提供并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程。

一个进程是一个包含有自身地址的程序,每个独立执行的程序都成为进程。也就是正在执行的程序。一个线程则是进程中的执行流程,一个进程中可以同时包括多个线程,每个线程也可以得到一小段程序的执行事件,这样一个进程就可以具有多个并发执行的线程。

实现线程的两种方式

在java中主要提供了两种方式实现线程,分别为继承java.lang.Thread类与实现java.lang.Runnable接口。

实现Runnable接口

注意:启动一个新的线程,不是直接调用Thread子类对象的run()方法,而是调用Thread子类的start()方法,Thread类的start()方法产生一个新的线程,该线程运行Thread子类的run()方法。

线程的生命周期

线程具有生命,其中包括出生状态、就绪状态、运行状态、等待状态、休眠状态、阻塞状态和死亡状态7种状态。

虽然多线程看起来像同时执行,但事实上在同一时间点上只有一个线程被执行,只是线程之间切换较快,所以才会使人产生线程是同时进行的假象。

线程的加入

当某个线程使用join()方法加入到另一个线程时,另一个线程会等待该线程执行完毕再继续执行。

线程的礼让

Thread类种提供了一种礼让方法,使用yield()方法表示,它只是给当前正处于运行状态下的线程一个提醒,告知它可以将资源礼让给其他线程,但这仅仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。

Yield()方法使具有同样优先级的线程有进入可执行状态的机会,当当前线程放弃执行权时会再度回到就绪状态。对于支持多任务的操作系统来说,不需要调用yield()方法,因为操作系统会为线程自动分配CPU时间片来执行。

线程同步

Java提供线程同步的机制来防止资源访问的冲突。

线程同部机制

如何解决资源共享的问题?基本上所有解决多线程资源冲突问题都会采用给定时间只允许一个线程访问共享资源,这时就需要给共享资源上一道锁。这就好比一个人上洗手间,这个人进入洗手间后将门锁上,当他出来时再将锁打开,然后其他人才可以进入。

         1.同步块

在java中提供了同步机制,可以有效地防止资源冲突。同步机制使用synchronized关键字。

将资源放置在同步块中。这个同步块也被称为临界区,其语法格式如下:

         2.同步方法

同步方法就是在方法前面修饰synchronized关键字的方法,其语法格式如下:

线程间的通信

Java笔记(第五篇)的更多相关文章

  1. Java系列--第五篇 基于Maven的SSME之Token及Parameterized单元测试

    本来在第四篇要说完的,但是写着写着,我觉得内容有点多起来了,所以就另开这篇,在这里专门讲述Token的定义,JSP自定义标签以及如何用Parameterized的来做单元测试. 1,新建包com.va ...

  2. Java【第五篇】基本语法之--数组

    数组概述 数组是多个相同类型数据的组合,实现对这些数据的统一管理数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量数组中的元素可以是任何数据类型,包括基本类型和引 ...

  3. java核心技术第五篇之事务和MVC模式

    第一部分:事务1.事务的简介: 1.1 在一组操作中(比如增加操作,修改操作),只有增加和修改操作都成功之后,这两个操作才能真正的成功. ,如果这两个操作中,有一个失败了,这两个操作都失败了. 1.2 ...

  4. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  5. Effective java笔记(五),枚举和注解

    30.用enum代替int常量 枚举类型是指由一组固定的常量组成合法值的类型.在java没有引入枚举类型前,表示枚举类型的常用方法是声明一组不同的int常量,每个类型成员一个常量,这种方法称作int枚 ...

  6. Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题

    一.二进制,位运算,移位运算 1.二进制 对于原码, 反码, 补码而言, 需要注意以下几点: (1).Java中没有无符号数, 换言之, Java中的数都是有符号的; (2).二进制的最高位是符号位, ...

  7. Java笔记(十五)……面向对象IV多态(polymorphism)

    概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...

  8. [Python笔记]第五篇:递归

    本篇主要内容:递归以及冒泡排序 参考文章:(http://www.cnblogs.com/balian/archive/2011/02/11/1951054.html) 递归的概念 递归的概念很简单, ...

  9. Java 学习 第五篇;面向对象

    1:基本数据类型的拆装: 基本变量类型 通过 new WrapperClass(primitive) 创建包装类对象: 包装类的对象 通过 WrapperInstance.XXXValue() 获取包 ...

  10. R学习笔记 第五篇:数据变换和清理

    在使用R的分组操作之前,首先要了解R语言包,包实质上是实现特定功能的,预先写好的代码库(library),R拥有大量的软件包,许多包都是由某一领域的专家编写的,但并不是所有的包都有很高的质量的,在使用 ...

随机推荐

  1. 第8课.第一个ARM裸板程序(点亮led)及申引

    1.原理图 2.芯片手册 3.几条汇编代码 1.ldr:读内存 ldr R0, [R1] 假设R1的值是x,读取地址x上的数据(4字节),保存到R0中 ldr R0, =0x12345678 (4字节 ...

  2. 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

    题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...

  3. echarts中国地图描绘

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8&qu ...

  4. Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子

    [学习笔记] Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子在eclipse oxygen上创建一个普通的java项目,然后把spark-a ...

  5. 使用pycharm开发web——django2.1.5(三)创建models并进入交互界面shell做一些简单操作

    这里model可以认为是数据对象本身 相当于在写java代码时候model目录下创建的实体类,models.py 中可以包含多个实体类,感觉这个操作挺骚的 下面是polls app里面的models, ...

  6. CodeBlocks 配置

    CodeBlocks 配置 Code::Blocks 17.12 时间:2019.6 下载网址 http://www.codeblocks.org/downloads/26 ,这里选择的是 mingw ...

  7. 【AtCoder】AGC004

    AGC004 A - Divide a Cuboid 看哪一维是偶数,答案是0,否则是三个数两两组合相乘中最小的那个 #include <bits/stdc++.h> #define fi ...

  8. idea配置glassFish启动项目

    将项目打成war包形式. 然后配置glassFish +号配置启动包 此处配置启动路径 ........ 路径也可以在localhost:4848 --->中的Applicaton中去配置

  9. python学习-8 用户有三次机会登陆

    用户登陆(三次机会) count = 0 while count < 3: user = input('请输入账号:') pwd = input('请输入密码:') ': print(" ...

  10. python — 函数基础知识(一)

    目录 1 面向过程编程与函数式编程 2 函数的基本结构 3 函数的参数 1 面向过程编程与函数式编程 截至目前我们所接触.所写的编程为:面向过程式编程[可读性差/可重用性差] # 面向过程编程 use ...