概述
Exception的分类:异常类
子类:
1)编译时期异常:只要不是RuntimeException中的异常都属于编译时期异常:比如:IOException(IO流中的),ParseException(解析异常)
调用者必须处理,不处理不行,需要编译通过
2)运行时期异常:RuntimeException
可能由于我们代码的逻辑不够严谨导致的问题举例,NullPointerException:空指针异常! 需要个对象进行非空判断,来防止该问题的出现!
package org.lemon.Exception;
/**
* @author zhaojiangbo
*Exception的分类:异常类
*
* 1.编译时期异常:只要不是RuntimeException中的异常都属于编译时期异常
* eg:IOException(IO流中的),ParseException(解析异常)
*
* 2.运行时期异常:RuntimeException
* NullPointerException:空指针异常! (需要对象进行非空判断,来防止该问题的出现)
*/
public class ExceptionDemo {
public static void main(String[] args) {
int a = 1;
int b = 0;
System.out.println(a/b);
}
}
处理异常分为两种方式:
1.标准格式:try...catch...finally:捕获异常!
2.throws 抛出异常
package org.lemon.Exception;
/**
* @author zhaojiangbo
*处理异常方式
* 1.标准格式:try...catch...finally:捕获异常
* 2.throws 抛出异常
* 经常使用的格式:
* try{
* }catch(异常类名 变量名){
* 输出语句处理}
*/
public class ExceptionDemo2 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
System.out.println(a / b);
} catch (Exception e) {
e.printStackTrace();
System.out.println("商不能为0");
}
}
}
多个异常处理
package org.lemon.Exception;
/**
* @author zhaojiangbo
*多个异常存在
*
* try{
* 可能会出现问题的多个语句
* }catch(异常类名1 变量名){
* 输出语句处理
* }catch(异常类名2 变量名){
* 输出语句处理
* }
*/
public class ExceptionDemo3 {
public static void main(String[] args) {
int a = 1;
int b = 0;
int[] arr = { 1, 2, 3, 4, 5 };
try {
System.out.println(a / b);
} catch (ArithmeticException e) {
System.out.println("商不能是0");
}
try {
System.out.println(arr[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("不能超过最大索引");
}
}
}
新的处理方式:
package org.lemon.Exception;
/**
* @author zhaojiangbo
*try{
* 可能会出现问题的代码
* ....
* ...
* }catch(异常类名1 | 异常类名2 ....变量名){
* 处理异常...
* }
*
* 注意事项:
* 1.针对多个异常类名之间是一种平级关系
* 2.这种格式在实际开发中,虽然有多个异常,但是针对具体的异常给出具体的处理!
*/
public class ExceptionDemo4 {
public static void main(String[] args) {
int a = 1;
int b = 0;
int [] arr = {1,2,3,4,5} ;
try{
System.out.println(a / b);
System.out.println(arr[5]);
}catch(ArithmeticException|ArrayIndexOutOfBoundsException e){
System.out.println("出现问题");
e.printStackTrace();
}
}
}
package org.lemon.Exception2;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author zhaojiangbo
* 编译时期异常:Java程序必须给予处理,否则编译不通过(必须显示处理)
* 运行时期异常:可以处理,也可以进行显示处理
*/
public class ExceptionDemo {
public static void main(String[] args) {
int a = 1;
int b = 0;
if (b != 0) {
System.out.println(a / b);
}
method();
}
// String日期"文本"格式---->Date格式: 解析
private static void method() {
String s = "2017-11-22";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = simpleDateFormat.parse(s);
System.out.println(date);
} catch (Exception e) {
System.out.println("出现解析异常");
}
}
}
常用的方法:
public String getMessage() 消息字符串
public String toString()
描述字符串:
1.当前类的全路径名称(指的是当前异常类名所在的包的全路径名称)
2. ": "(冒号和一个空格)
public void printStackTrace():
该方法是里面包含了消息字符串以及当前出现错误的异常的时候所描述哪个包下以及代码中具体的错误出现第几行
返回值是void,也就直接在控制台输出
package org.lemon.Exception2;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ExceptionDemo2 {
public static void main(String[] args) {
String s = "2017-11-22";
SimpleDateFormat sdf = new SimpleDateFormat();
try {
Date date = sdf.parse(s);
System.out.println(date);
}catch(Exception e) {
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
e.printStackTrace();
}
}
}
异常处理第二种方式:
throws:抛出异常
package org.lemon.Exception2;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author zhaojiangbo
*异常处理第二种方式:
* throws:抛出异常
* 在方法声明上抛出异常,由于,编译时期异常,调用者必须要处理
*/
public class ExceptionDemo3 {
public static void main(String[] args) throws ParseException, ArithmeticException {
// 抛出异常,必须处理
method();
try {
method2();
} catch (Exception e) {
e.printStackTrace();
}
}
// throw
private static void method2() throws Exception {
int a = 10;
int b = 0;
if (b == 0) {
System.out.println(a / b);
throw new ArithmeticException();// 跟的异常对象
} else {
System.out.println("没有问题");
}
}
private static void method() throws ParseException {
String s = "2017-11-19";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(s);
System.out.println(date);
}
}
finally经常用在数据库中或者IO流中,用来释放资源的
finally中的代码一定会执行.
finally中的不执 就是Jvm退出了---------->System.exit(0) ;
package org.lemon.ExceptionFinally;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author zhaojiangbo
*/
public class ExceptionDemo {
public static void main(String[] args) {
String s = "2017-11-22";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = simpleDateFormat.parse(s);
System.out.println(date);
}catch(Exception e) {
//e.printStackTrace();
System.out.println("解析有问题");
//System.exit(0);
}finally {
System.exit(0);
System.out.println("代码定会执行,除非Jvm退出");
}
}
}
如果catch里面有return语句,那么finally中的代码会执行;在return 前执行!
package org.lemon.ExceptionFinally;
/**
* @author zhaojiangbo
*/
public class ExceptionDemo2 {
public static void main(String[] args) {
System.out.println(getInt());
}
private static int getInt() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
} finally {
a = 40;
}
return a;
}
}
//结果是 40 finally中代码定执行 在return之前执行
自定义一个异常类,继承自Exception或者继承自RuntimeException
package org.lemon.myException;
/**
* @author zhaojiangbo
* 自定义一个类,继承自Exception或者继承自RuntimeException
*/
public class MyException extends Exception{
public MyException(){
}
public MyException(String message){
super(message) ;
}
}
package org.lemon.myException;
import java.util.Scanner;
public class Student {
public static void main(String[] args) {
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个分数:");
int score = sc.nextInt();
// 创建Teacher对象
Teacher t = new Teacher();
try {
t.check(score);
} catch (MyException e) {
e.printStackTrace();
}
}
}
package org.lemon.myException;
public class Teacher {
public void check(int score) throws MyException {
// TODO Auto-generated method stub
if (score > 100 || score < 0) {
throw new MyException("分值在0到100之间");
} else {
System.out.println("分值是正常范围...");
}
}
}
File类 描述文件或者目录(文件夹)的路径的抽象表现形式
构造方法:
public File(String pathname):给定路径名以字符串来表示当前这个文件或者文件夹(开发中推荐使用第一种构造方法)
public File(String parent,String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File对象
public File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
package org.lemon.File;
import java.io.File;
import java.io.IOException;
/**
* @author Lemon
*File 用来描述文件或者目录(文件夹)的路径的抽象表现形式
*
* 要表示当前计算机d盘下一个demo文件夹中的一个a.txt文件 File file = new File("D:\demo\a.txt") ;
*/
public class FileDemo {
public static void main(String[] args) throws IOException {
File file = new File("D:\demo");
System.out.println("mkdir:"+file.mkdir());
File file2 = new File("D:\demo\abc.txt");
System.out.println("createNewFile:"+file2.createNewFile());
File file3 = new File("D:\a\b\c\d");
System.out.println("mkdir:"+file3.mkdir());
File file4 = new File("abc.txt");//没有带盘符,默认到当前项目下创建了文件
System.out.println("mkdir:"+file4.mkdir());
}
}
public boolean mkdir()创建此抽象路径名指定的目录(文件夹)。
如果当前某个盘符下已经有了这个目录(文件夹),不会在创建了.
public boolean createNewFile():创建文件的,如果已经有这个文件了,不在创建,并且该方法本身就会编译时期异常IOExceptio throws IOException
public boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。(创建文件夹,文件夹不存在,才开始创建)
注意事项:
删除的方法不能删除带有目录或者文件的文件夹
删除多个目录,必须逐一删除!
package org.lemon.File;
import java.io.File;
/**
* @author Lemon
*public boolean delete()删除此抽象路径名表示的文件或目录
* 不能删除带有文件或者文件夹的目录
*/
public class FileDemo2 {
public static void main(String[] args) {
File file = new File("abc.txt");
System.out.println("delete:"+file.delete());
//删除多个目录,必须逐一删除
File file2 = new File("a\b\c");
System.out.println("delete:"+file2.delete());
File file3 = new File("a\b");
System.out.println("delete:"+file3.delete());
File file4 = new File("a");
System.out.println("delete:"+file4.delete());
}
}
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
1.使用这个功能:当两个抽象路径一致,那么只是重命名
2.当这两个抽象路径不一致,有剪切并且改名了...
package org.lemon.File;
import java.io.File;
/**
* @author Lemon
*public boolean renameTo(File dest) 重新命名此抽象路径名表示的文件。
* 1.当两个抽象路径一致,那么只是重命名
* 2.当这两个抽象路径不一致,有剪切并且改名
*/
public class FileDemo3 {
public static void main(String[] args) {
File file = new File("疾风剑豪.jpg");
File file2 = new File("压缩.jpg");
boolean renameTo = file.renameTo(file2);
File file3 = new File("压缩.jpg");
File file4 = new File("D:\疾风剑豪.jpg");
file3.renameTo(file4);
}
}
public boolean isDirectory():判断是否是文件夹 经常用到
public boolean canRead():判断是否可读
public boolean canWriter():判断是否可写
public boolean isHidden():判断是否是隐藏文件
public boolean isAbsolute():判断次路径名是否是绝对路径
package org.lemon.File;
import java.io.File;
/**
* @author Lemon
*File类中的判断功能:
* public boolean isDirectory():判断是否是文件夹
* public boolean isFile():判断是否是一个标准文件
*/
public class FileDemo4 {
public static void main(String[] args) {
File file = new File("abc.txt");
System.out.println(file.isDirectory());
System.out.println(file.isFile());
System.out.println(file.canRead());
System.out.println(file.canWrite());
System.out.println(file.isAbsolute());
System.out.println(file.isHidden());
}
}
public File getAbsolutePath():获取当前文件或者文件夹绝对路径
public String getPath():获取相对路径
public long length()返回由此抽象路径名表示的文件的长度
public long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间
public String getName():获取名称
package org.lemon.File;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author Lemon
* File类中的获取功能
*/
public class FileDemo5 {
public static void main(String[] args) {
File file = new File("abc.txt");
System.out.println(file.getAbsolutePath());
System.out.println(file.getPath());
System.out.println(file.length());
System.out.println(file.lastModified());
System.out.println(file.getName());
//Date---->String"日期文本格式"
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat();
String s = sdf.format(date);
System.out.println(s);
}
}
public String[] list():返回对象是一个字符串数组,当前哪个一盘符下的所有的文件以及文件夹的字符串名称数组
public File[] listFiles():返回对象是一个File数组,当前哪个盘下的所有的文件以及文件夹的File数组
package org.lemon.File;
import java.io.File;
/**
* @author Lemon
*需求:获取e盘下所有的文件夹以及文件的字符串名称数组
*/
public class FileDemo6 {
public static void main(String[] args) {
File file = new File("D:\");
String[] str = file.list();
if(str!=null) {
for(String s : str) {
System.out.println(s);
}
}
File[] listFiles = file.listFiles();
if(listFiles!=null) {
for(File f : listFiles) {
System.out.println(f);
}
}
}
}
package org.lemon.File;
import java.io.File;
/**
* @author Lemon
* 判断D盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
*/
public class FileTestDemo {
public static void main(String[] args) {
File file = new File("D:\");
File[] listArray = file.listFiles();
if(listArray!=null) {
for(File f :listArray) {
if(file.isFile()) {
if(file.getName().endsWith(".jpg")) {
System.out.println(f.getName());
}
}
}
}
}
}
package org.lemon.File;
import java.io.File;
import java.io.FilenameFilter;
/**
* @author Lemon
*判断D盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称
*
*匿名内部类方式
*/
public class FileTestDemo2 {
public static void main(String[] args) {
File file = new File("D:\");
String[] strArray = file.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// return false;
return new File(dir,name).isFile() && name.endsWith(".jpg") ;
}
});
//遍历字符串数组
for(String s : strArray){
System.out.println(s);
}
}
}
public abstract void write(int b):将指定的字节写入到输出流中
public void write(byte[] b):将指定的字节数组写入到输出流中
public void write(byte[] b, int off,int len):将字节数组的一部分写入到输出流中
package org.lemon.IO;
import java.io.IOException;
import java.io.FileOutputStream;
public class FileOutputStreamDemo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write(97);
fos.write(65);
//public void write(byte[] b):将指定的字节数组写入到输出流中
byte[] bys = {97,98,99,100,101} ;
fos.write(bys) ;
fos.write(bys, 1, 3) ;
//关闭资源
fos.close() ;
}
}
windows操作系统:换行符号:rn
Linux操操作系统:n
Mac操作系统:r
给文件追加写入数据
public FileOutputStream(File file,boolean append):第二个参数设置为true,表示写入文件的末尾处
package org.lemon.IO;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Lemon
*给文件追加写入数据
* public FileOutputStream(File file,boolean append):第二个参数设置为true,表示写入文件的末尾处
*/
public class FileOutputStreamDemo2 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("fos.txt",true) ;
//写数据
for(int x = 0 ; x <10 ; x ++){
fos.write(("helo"+x).getBytes()) ;
//换行符号
fos.write("rn".getBytes());
}
//关闭资源
fos.close() ;
}
}
package org.lemon.IO;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Lemon
* IO流中加入异常操作
*/
public class FileOutputStreamDemo3 {
public static void main(String[] args) {
FileOutputStream fos = null ;
try {
fos = new FileOutputStream("fos.txt") ;
//写数据
fos.write("woaini".getBytes()) ;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fos !=null){
try {
fos.close() ;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
设备和设备指的是:硬盘和内存之间的数据传输
IO流的分类:
按流的方向分:
输入流:读数据的
输出流:写数据的
按数据类型分:
(字节流)
字节输入流:InputStream
字节输出流:OutputStream
(字符流)
字符输入流:Reader
字符输出流:Writer
package org.lemon.IO;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author Lemon
* 需求:输出一个文本文件,给文本文件中写一句话:hello,IO,Im'coming...
*/
public class IODemo {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("fos.txt");
fos.write("hello,IO,Im'coming...".getBytes());
fos.close();
//不能再写入了
}
}
最后
以上就是自由鼠标为你收集整理的Java-11.19的全部内容,希望文章能够帮你解决Java-11.19所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复