您当前的位置:首页 > 互联网教程

java中常见的异常类

发布时间:2025-05-18 05:59:09    发布人:远客网络

java中常见的异常类

一、java中常见的异常类

1、从异常类的继承架构图中可以看出:Exception类扩展出数个子类,其中 IOException、RunntimeException是较常用的两种。

2、习惯上将 Error与 Exception类统称为异常类,但这两者本质上还是有不同的。Error类专门用来处理严重影响程序运行的错误,可是通常程序设计者不会设计程序代码去捕捉这种错误,其原因在于即使捕捉到它,也无法给予适当的处理,如 JAVA虚拟机出错就属于一种 Error。

3、不同于 Error类,Exception类包含了一般性的异常,这些异常通常在捕捉到之后便可做妥善的处理,以确保程序继续运行,如 TestException7_2里所捕捉到的 ArrayIndexOutOfBoundsException就是属于这种异常。

4、RunntimeException即使不编写异常处理的程序代码,依然可以编译成功,而这种异常必须是在程序运行时才有可能发生,例如:数组的索引值超出了范围。

5、与RunntimeException不同的是,IOException一定要编写异常处理的程序代码才行,它通常用来处理与输入/输出相关的操作,如文件的访问、网络的连接等。

6、当异常发生时,发生异常的语句代码会抛出一个异常类的实例化对象,之后此对象与 catch语句中的类的类型进行匹配,然后在相应的 catch中进行处理。

7、Java标准裤内建了一些通用的异常,这些类以Throwable为顶层父类。

8、Throwable又派生出Error类和Exception类。

9、错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

10、异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

二、求java考题,笔试题

This():当前类的对象,super父类对象。

Super():在子类访问父类的成员和行为,必须受类继承规则的约束

而this他代表当前对象,当然所有的资源都可以访问.

在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.

而在方法中super和this使用的方法就差不多了.只不过super要考虑是否能访问其父类的资源.

2.作用域public,protected,private,以及不写时的区别?

Public:不同包、同一包、类内都可用

Protected:不同包的子类、同一包、类内都可用

publicstatic void main(String[] args){

4. JAVA的事件委托机制和垃圾回收机制

Java事件委托机制的概念,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。

垃圾回收机制垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则次对象适合进行垃圾回收

5.在JAVA中,如何跳出当前的多重嵌套循环?

6.什么是java序列化,如何实现java序列化?(写一个实例)

序列化:处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implementsSerializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

7.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。如果这个类的修饰符是public,其类名与文件名必须相同。

8.排序都有哪几种方法?请列举。用JAVA实现一个快速排序?

排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

9. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

重写Override,子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。

重载Overloading一个类多个方法,名称相同,参数个数类型不同。

两者都是Java多态性的不同表现。

Overloaded的方法是可以改变返回值的类型。

System.out.prinln(8+8+”88”+8+8);

(方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

Overloaded的方法是可以改变返回值的类型。)

属性常量方法不可以overridding类不可以继承

11.继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?

System.out.println("FatherClassCreate");

public class ChildClass extends FatherClass{

System.out.println("ChildClassCreate");

public static void main(String[] args){

FatherClass fc= new FatherClass();

ChildClass cc= new ChildClass();

System.out.println("InterClassCreate");

InterClass ic= new InterClass();

System.out.println("OuterClassCreate");

public static void main(String[] args){

OuterClass oc= new OuterClass();

C:>java test/OuterClass InterClass Create OuterClass Create

13.用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?

14.如在COLLECTION框架中,实现比较要实现什么样的接口?

public InsertSort(int num,int mod){

System.out.println("The ArrayList SortBefore:");

al.add(new Integer(Math.abs(rand.nextInt())% mod+ 1));

System.out.println("al["+i+"]="+al.get(i));

for(int i=1;i<al.size();i++){

tempInt=(Integer)al.remove(i);

if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue()){

System.out.println(al.toString());

for(int j=0;j<MaxSize;j++){

if(((Integer)al.get(j)).intValue()>=tempInt.intValue()){

System.out.println(al.toString());

System.out.println("The ArrayList SortAfter:");

for(int i=0;i<al.size();i++){

System.out.println("al["+i+"]="+al.get(i));

public static void main(String[] args){

InsertSort is= new InsertSort(10,100);

JAVA类实现序例化的方法是实现java.io.Serializable接口

Collection框架中实现比较要实现Comparable接口和 Comparator接口

16.编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

public static void split(String source,intnum) throws Exception{

for(int i= 0; i<source.length(); i++){

byte[]b=(source.charAt(i)+"").getBytes();

15、Java编程,打印昨天的当前时刻

public class YesterdayCurrent{

public void main(String[] args){

Calendar cal= Calendar.getInstance();

System.out.println(cal.getTime());

BufferedReader in= new BufferedReader(newFileReader(f));

while((stri=in.readLine())!=null){

i= Integer.parseInt(stri.trim());

PrintWriter out=new PrintWriter(newBufferedWriter(new FileWriter(f,false)));

out.write(String.valueOf(i));//可能是编码的原因,如果直接写入int的话,将出现java编码和windows编码的混乱,因此此处写入的是String

public static void main(String[] ars){

A ab= new B();//执行到此处,结果: 1a2b

ab= new B();//执行到此处,结果: 1a2b2b

}注:类的static代码段,可以看作是类首次加载(被虚拟机加载)执行的代码,而对于类的加载,首先要执行其基类的构造,再执行其本身的构造

(1)接口可以被多重implements,抽象类只能被单一extends(2)接口只有定义,抽象类可以有定义和实现(3)接口的字段定义默认为:publicstatic final,抽象类字段默认是"friendly"(本包可见)

当功能需要累积时用抽象类,不需要累积时用接口。

通过类(Class对象),可以得出当前类的fields、method、construtor、interface、superClass、modified等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring中一切都是返射、struts、hibernate都是通过类的返射进行开发的。

20、类的返射机制中的包及核心类?

①java.lang.Class②java.lang.refrection.Method③java.lang.refrection.Field

④java.lang.refrection.Constructor⑤java.lang.refrection.Modifier⑥java.lang.refrection.Interface

21、得到Class的三个过程是什么?

①对象.getClass()②类.class或Integer.type(int) Integer.class(java.lang.Integer)③Class.forName();

①产生一个Class数组,说明方法的参数②通过Class对象及方法参数得到Method③通过method.invoke(实例,参数值数组)唤醒方法

23、如何将数值型字符转换为数字(Integer,Double)?

Integer.parseInt(“1234”) Double.parseDouble(“123.2”)

25、如何去小数点前两位,并四舍五入。

double d=1256.22d; d=d/100; System.out.println(Math.round(d)*100);

26、如何取得年月日,小时分秒?

Calendar c=Calendar.getInstance();

c.set(Calendar.DAY_OF_MONTH,31);

System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+""+c.get(Calendar.DAY_OF_MONTH));

27、如何取得从1970年到现在的毫秒数

Java.util.Date dat=new Date(); long now=dat.getTime();

28、如何获取某个日期是当月的最后一天?

当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。

取下一个月的第一天,下一个月的第一天-1

public static void main(String[] args){

Calendarc=Calendar.getInstance();

c.set(Calendar.DAY_OF_MONTH,30);

Calendarc1=(Calendar)c.clone();

System.out.println(c.get(Calendar.YEAR)+""+(c.get(Calendar.MONTH)+1)+""+c.get(Calendar.DAY_OF_MONTH));

c.add(Calendar.DAY_OF_MONTH,1);

if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH)){

System.out.println("是最后一天");

System.out.println("不是取后一天");

Import java.text. SimpleDateFormat;

SimpleDateFormat sdf=newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String str=sdf.format(dat);//把日期转化为字符串

Java.util.Date d1=sdf.parse(“yyyy-mm-dd”);//将字符串转化为日期

30、编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。

String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a=new String("中".getBytes("iso-8859-1"));

应该是String a=new String("中".getBytes("gb2312"),"iso-8859-1");

String a1=newString(a.getBytes("iso-8859-1"));

三、java加载本地文件

java加载文件的3种方式有哪些

方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。因为是用ServletContext读取文件路径,所以配置文件可以放入在web-info的classes目录中,也可以在应用层级及web-info的目录中。

方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。因为是用ServletContext读取文件路径,所以配置文件可以放入在web-info的classes目录中,也可以在应用层级及web-info的目录中。

有以下方法:getCount作用:取得上传文件的数目。原型:publicintgetCount()getFile作用:取得指定位移处的文件对象File(这是com.jspsmart.upload.File,不是java.io.File,注意区分)。

publicstaticStringSYS_PROPERTYNAME=sys.properties,你想在加载sysproperties文件,只需再增加publicstaticStringSYS_PROPERTYNAME2=sysproperties,再用上面的load方法加载即可。

定义java相应的方法,然后在dll中实现),才能使用。publicclassLibTools{static{System.loadLibrary(dll);//dll文件的名字,不包含后缀名}...//各种方法可以直接做静态方法。

在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据笔者工作中用到的读取配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。

你换个英文的文件名称试试可以不可以。看是不是中文编码的问题。如果是的你是是修改下属性filename=newString(filename.getBytes(GBK),iso8859-1);//文件名要转一下编码。

路径写的不对吧,../resources/Crawler.properties试试。

也许是文件不存在,或者在当前目录下没有找到这个文件。可以用try{}catch(){}截获这个异常。

先看看你要写的文件存在还是不存在,如果存在的话,看是不是把想写的东西写进去了,如果写进去了再看为什么没有读取出来。一步一步用排除法解决问题,这也是解决编程过程中解决问题的基本思路。

Tomcat通过使用ClassLoader来读取其他文件夹下的class文件,并将其加载到内存中,然后使用反射机制来调用其中的方法,从而实现启动。

urlclassloaderjar包是加载道指定jar中的class到内存中。根据查询相关信息显示,jar文件和目录的url的搜索路径加载类和资源,就是通过urlclassloader加载指定jar中的class到内存中。

classloader加载类时是父类委托机制的,先加载该类的父类,如果父类还有父类,则先加载父类的父类。。以此类推;还有classloader先加载java核心API,然后再加载JAVA扩展API,再加载当前类。

URLgetResource(Stringname)查找具有给定名称的资源。

但使用URLClassLoader就可以直接根据创建一个单独的.class文件,并且每当重新载入后并实例化后都是最新的方法。类似于jsp,当你在eclipse中改了一个jsp并且存储后,只要刷新页面就可以得到最新的结果而不用重新启动服务器。

java怎样读取本地文件夹下的文件

1、首先获得一个文件句柄。Filefile=newFile();file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。通过这条线路读取甲方的信息:newFileInputStream(file)目前这个信息已经读进来内存当中了。

1、首先获得一个文件句柄。Filefile=newFile();file即为文件句柄。两人之间连通电话网络了。接下来可以开始打电话了。通过这条线路读取甲方的信息:newFileInputStream(file)目前这个信息已经读进来内存当中了。

2、以下java程序的作用是将当前目录及其子目录中的.java文件收集到collection.txt文件中,并添加行号,你可以参考一下。

3、for(Stringname:names){System.out.println(name);}}}通过文件过滤器获取某个目录下的文件,例如所有的.txt、.doc文件。

方式一:采用ServletContext读取,读取配置文件的realpath,然后通过文件流读取出来。因为是用ServletContext读取文件路径,所以配置文件可以放入在web-info的classes目录中,也可以在应用层级及web-info的目录中。

在java中获得文件的路径在我们做上传文件操作时是不可避免的。

把Demo类放到任意一个目录里边,import(包)路径进来就行了,你这Demo直接丢在(类)路径下边不行的。