异常
概述:异常时java程序在运行中出现的错误
分类:
error:服务器崩溃
Exception:小瑕疵,java底层可以帮我们解决
jvm默认是如何处理异常的
1.main函数收到这个问题,有两种处理方式
自己处理问题,然后继续运行
知己没有针对问题的处理方式,只能交给调用main的jvm处理。jvm有一个默认的异常处理机制,就将该异常进行处理,并将该异常的名称和异常的信息,异常出现的位置打印在控制台上,同时程序停止运行。
throws的方式处理异常
定义功能方法时,需要把出现的问题暴露出来,让调用者去处理。通过throws把异常标识在方法上。(Exception 编译时异常 ,RuntimeException 运行时异常)
throw和throws区别*
概述:
throw:在功能方法内部出现某种情况,程序不能继续运行,需要跳转时,就用throw把异常对象抛出。
区别:
throws:用在方法上、声明后面,跟的是异常类型,可以跟很多个异常类名,用逗号隔开,表示抛出异常,有调用该方法的调用者完成
throw:用在方法內,跟的是异常的对象名称,只能抛出一个异常对象名,表示抛出异常,由方法体内地语句处理。
练习:
package com.throw异常.cn;
import java.util.Comparator;
import java.util.Objects;
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {};
public Student(String name,int age) {
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) throws ABCsf {
if(age>0&&age<150) {
this.age = age;
}else {
throw new ABCsf("非法年龄");
}
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
return 10;
}
@Override
public boolean equals(Object obj) {
// if (this == obj)
// return true;
// if (obj == null)
// return false;
// if (getClass() != obj.getClass())
// return false;
Student other = (Student) obj;
return age == other.age && Objects.equals(name, other.name);
}
public int compareTo(Student o) {
// TODO Auto-generated method stub
int num=this.age-o.age;
return num==0? this.name.compareTo(o.name):num;
}
}
package com.throw异常.cn;
public class ABCsf extends Exception {
/**作者,wz
*
*/
private static final long serialVersionUID = 1L;
public ABCsf() {};
public ABCsf(String s) {
super(s);
};
}
package com.throw异常.cn;
public class Demo1 {
public static void main(String[] args) throws ABCsf {
Student p=new Student();
p.setAge(-18);
System.out.println(p.getAge());
}
}
File类·(路径)
概述:
File更应该叫一个路径,文件路径或者文件夹路径
路径分为相对路径和绝对路径
绝对路径是一个固定的路径,从盘符开始。
相对路径相对某个位置,例如在eclipse下,指当前项目下,在dos下指的是当前路径。
File构造方法
File(String pathname);根据一个路径得到File对象。
File(String parent,String child);根据一个目录和一个子文件/目录得到File对象。
File(File parent,String child);根据一个父File对象和一个子文件/目录得到File对象。
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1=new File("xxx.txt");
System.out.println(f1.exists());//判断路径是否存在
}
}
创建功能
public boolean createNewFile();创建文件,如果文件存在,不创建
public boolean mkdir();创建文件夹,如果存在,就不创建。
public boolean mkdirs();创建文件夹,如果父文件不存在,会帮你创建出符文剑夹。
注意事项:如果你创建文件或文件夹忘了写盘符路径,那么默认在项目下。
练习:
public class Demo2 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f1=new File("yyy.txt");
System.out.println(f1.createNewFile());//创建文件
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// File f1=new File("aaa");
// System.out.println(f1.mkdir());//创建文件夹
// File f2=new File("abb.txt");
// System.out.println(f2.mkdir());//根据名称创建文件夹
File f3=new File("mm\\ss\\xx\\aaa\\vv");
System.out.println(f3.mkdirs());//根据名称创建文件夹
}
}
File重命名和删除功能
public boolean renameTo(File dest);把文件重命名为指定的文件路径。
public boolean delete();删除文件或文件夹。
注意事项:
重命名:如果路径相同,那就是改名
如果路径不同,那就是剪切
删除:java中的删除不走回收站
要删除一个文件夹,请注意改文件夹內不能包含其他文件或文件夹。
练习:
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// File f1=new File("xxx.txt");
//System.out.println(f1.createNewFile());
File f2=new File("yyy.txt");
//System.out.println(f2.createNewFile());
File f3=new File("D:\\zzz.txt");
System.out.println(f2.renameTo(f3));//改名加剪切,内容不会丢失
}
File f1=new File("xxx.txt");
//System.out.println(f1.createNewFile());//判断路径是否存在
System.out.println(f1.delete());//删除文件,文件夹里有东西就删不了
File判断功能
public boolean isDirectory();判断是否有目录
public boolean isFile();判断是否有文件
public boolean exists();判断是否存在
public boolean canRead(); 判断是否可读
public boolean canWrite();判断是否可写。
public boolean isHidden();判断是否隐藏。
练习:
public static void main(String[] args) {
// TODO Auto-generated method stub
File f1=new File("xxx.txt");
System.out.println(f1.isDirectory());//判断是否是文件夹
System.out.println(f1.isFile());//判断是否是文件
System.out.println(f1.canRead());//判断是否可读(windos默认为所有文件可读)
f1.setWritable(false);//设置当前文件不可写
System.out.println(f1.canWrite());//判断是否可写
System.out.println(f1.isHidden());//判断是否隐藏
}
File类的获取功能
public String getAbsolutePath();获取绝对路径
public String getPath();获取相对路径
public String getName();获取名称。
public long length();获取长度(字节数)
public long lastMoidfied();获取最后一次修改时间(毫秒)
public String【】 list();获取指定目录下单所有文件或文件夹的名称数组。
public File【】 listFiles();获取指定目录下单所有文件或文件夹的File数组。
注意:路径最好没有中文。
练习:
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f1=new File("xxx.txt");
System.out.println(f1.createNewFile());
System.out.println(f1.getAbsolutePath());
System.out.println(f1.getPath());
System.out.println(f1.getName());
System.out.println(f1.length());
System.out.println(f1.lastModified());
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f1=new File("C:\\Users\\eclipse-workspace\\Stu20230203\\src\\com\\file\\cn");
String[] arr=f1.list();
for (String string : arr) {
if(string.contains(".java")) {
System.out.println(string);
}
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f1=new File("C:\\Users\\eclipse-workspace\\Stu20230203\\src\\com\\file\\cn");
File[] arr=f1.listFiles();
for (File file : arr) {
System.out.println(file);
}
}
练习:入伙获取目录下后缀为.ava的文件名称。
文件名称过滤器:
public String【】 list(FilenameFilter filter);
public File【】 listFiles(FileFilter filter);
需求:判断E盘下是否有后缀名为.java文件,有就说出全称。
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
File f1=new File("C:\\Users\\eclipse-workspace\\Stu20230203\\src\\com\\file\\cn");
String[] arr=f1.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
File file=new File(dir, name);
return file.isFile()&&file.getName().endsWith(".java");
//其中isFile判断是不是一个正经文件
//getName()获取文件名称
//endswith(“。wmv”)测试此字符串是否以指定后缀结束
}
});
for (String string : arr) {
System.out.println(string);
}
}