Java基础(异常)

【异常】JAVA常见异常 受检异常需要在编译时处理,而非受检异常通常是在运行时抛出,并且不强制要求在编译时处理。这些异常在编译时必须要处理,通常需要使用 try-catch 块或在方法签名中声明。当应用程序试图通过字符串名称加载类时,如果在类路径中找不到对应的类,则抛出此异常。当方法在不适当的时刻被调用时抛出。当试图将字符串转换为数值类型时,如果字符串的格式不正确,则抛出此异常。通常在输入输出操作失败或中断时抛出,比如文件操作、网络通信等。这些异常在编译时不强制要求处理,通常在运行时抛出。当试图将对象强制转换为不兼容的类型时抛出。 阅读详情

1 异常

1.1 概述

程序在运行过程中,由于意外情况导致程序发生异常事件,默认情况下发生的异常会中断程序的运行。

在Java中,把常见的异常情况,都抽象成了对应的异常类型,那么每种异常类型都代表了一种特定的异常情况。

当程序中出现一种异常情况时,也会创建并抛出一个异常类型对象,这个对象就表示当前程序所出现的问题。

如图:
在这里插入图片描述

例如,程序中有一种异常情况是,当前使用下标从数组中取值的时候,这个下标值超过了数组下标的最大值,那么程序中就出现了异常情况,java中把这种异常情况抽象成了一个类:java.lang.ArrayIndexOutOfBoundsException,将来这个类的对象,就表示程序中出现了数组下标超过边界的异常情况。

public class Test {

    public static void main(String[] args) {
        int[] arr = {1,3,5,7};
        System.out.println(arr[2]);
        //这行代码执行时,出现异常情况,因为下标超过了数组的最大边界
        System.out.println(arr[4]);
    }

}
//运行结果:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
	at com.briup.demo.Test.main(Test.java:7)

可以看出,当前程序出现异常情况时,会创建并抛出和该异常情况对应的异常类的对象,这个异常对象中保存了一些信息,用来表示当前程序到底发生了什么异常情况。

通过异常信息,我们可以定位异常发生的位置,以及异常发生的原因

1.2 异常体系

异常体系中的根类是:java.lang.Throwable,该类下面有俩个子类型,java.lang.Error 和 java.lang.Exception

注意,Throwable表示可以被抛出的

在这里插入图片描述

  • Error,表示错误情况,一般是程序中出现了比较严重的问题,并且程序自身并无法进行处理。
  • Exception,表示异常情况,程序中出了这种异常,大多是可以通过特定的方式进行处理和纠正的,并且处理完了之后,程序还可以继续往下正常运行。

注意,我们一般说的异常,都是指的Exception

Exception中并没有定义方法,它的方法都是从Throwable中继承过来的,其中常用的方式有:

  • printStackTrace(),打印输出当前发送异常的详细信息(重要)
  • getMessage(),返回异常对象抛出是携带的信息,一般是异常的发生原因(重要)
  • printStackTrace(PrintWriter s),方法重载,可以指定字符输出流,对异常信息进行输出
  • printStackTrace(PrintStream s),方法重载,可以指定字节输出流,对异常信息进行输出

1.3 异常种类

我们平时使用的异常类型,都是Exception类的子类型,它们把异常划分成了俩种:

  • 编译时异常
  • 运行时异常

编译时异常,继承自Exception类,也称为checked exception,编译器在编译期间,会主动检查这种异常,发现后报错并提示我们要对这种异常进行处理。

运行时异常,继承自RuntimeException类,也称为unchecked exception,编译器在编译期间,不会检查这种异常,也不要求我们去处理,但是在运行期间,代码中可能会抛出这种类型的异常。

在这里插入图片描述

1.4 异常传播

如果一个方法中抛出了异常,并且一直没有进行处理,那么这个异常将会抛给当前方法的调用者,并一直向上抛出直到抛给JVM,最后JVM将这个异常信息打印输出,同时程序运行的停止。

public class Test {

    public static void main(String[] args) {
        System.out.println("hello");
        test1();
        System.out.println("world");
    }

    public static void test1(){
        test2();
    }
    public static void test2(){
        test3();
    }
    public static void test3(){
        int a = 1/0;
    }

}

//运行结果:
hello
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.briup.demo.Test.test3(Test.java:16)
	at com.briup.demo.Test.test2(Test.java:13)
	at com.briup.demo.Test.test1(Test.java:10)
	at com.briup.demo.Test.main(Test.java:5)

可以看出,test3方法中抛出了异常,因为是运行时异常,编译器不检查,这个异常在程序中没有处理,那么这个异常就抛给了test2,test2方法又将异常抛给了test1方法,test1中又将异常抛给main方法,main方法将异常抛给JVM,最后JVM将当前发生异常时,栈内存中方法的调用情况,打印输出,方便我们定位错误信息!之后JVM停止运行。

对应的栈区中,方法调用的情况:

可以看出,异常信息打印输出的内容,就是发生异常的时候,栈区中方法调用的情况!

test3方法中的第16行代码抛出异常,导致test2方法中的第13行也报错,因为test2方法中调用了test3方法

test2方法中的第13行报错,导致test1方法的第10行也报错,因为test1方法中调用了test2方法

test1方法中的第10行报错,导致main方法中的第5行也报错,因为main方法中调用了test1方法

这时候,test3方法中抛出的异常对象,就传播到了main方法中,main中也没处理,那么就把这个异常抛个JVM,那么JVM就打印输出异常信息,然后JVM停止运行!

所以程序最后停止在main方法中的第5行,test1方法的调用这句代码,下面的world也没有输出,因为JVM停止了,代码就不再往下执行了!

如果,在异常传播的过程中,任何一个地方对异常进行了处理,那么JVM不会停止,程序还会正常往下运行!

2 异常抛出

2.1 自动抛出异常

当前java代码中,出现了提前指定好的异常情况的时候,代码会自动创建异常对象,并且将该异常对象抛出。

例如,当代码中执行 int a = 1/0;的时候,代码会自动创建并抛出 ArithmeticException类型的异常对象,来表示当前的这种异常情况。(算术异常)

例如,当前代码中执行 String str = null; str.toString(); 的时候,代码会自动创建并抛出 NullPointerException 类型的异常对象,来表示当前这种异常情况。(空指针异常)

2.2 手动抛出异常

以上描述的异常情况,都是JVM中提前规定好的,我们不需要干预,JVM内部自己就会创建并抛出异常对象。

但是在其他的一些情况下,我们也可以手动的创建并抛出异常对象,其效果也是一样的。

例如,

public void test(String name){
    if(!"tom".equals(name)){
        throw new RuntimeException("用户名和预期不符!");
    }
}

注意,因为方法中抛出的是一个运行时异常,编译器不会做出检查,所以代码可以正常的编译运行,但是运行的时候,name的值不是tom的时候,代码会报错,这个错误信息是我们自己抛出的

例如,

public void test(String name){
    if(!"tom".equals(name)){
        throw new Exception("用户名和预期不符!");
    }
}

注意,以为方法中抛出的异常是编译异常,编译器会做检查,所以代码编译会报错,提示我们需要在test方法上声明出方法内抛出异常的类型,或者在方法内对这个异常进行处理!

例如,

public void test(String name)throws Exception{
    if(!"tom".equals(name)){
        throw new Exception("用户名和预期不符!");
    }
}

使用throws关键字,声明方法所抛出的异常类型即可

这个声明的目的,就是告诉test方法的调用者,你调用我的这个test方法的时候要小心啦,方法在运行的时候可能会抛出Exception类型的异常

这里描述为可能会抛出异常的原因是,只有name的值不是tom的时候才会抛出异常,其他情况没有异常!

我们在调用API中方法的时候,就需要注意这个方法是否声明了可能抛出的异常类型,例如forName方法

public final class Class{
    public static Class<?> forName(String className)throws ClassNotFoundException{
        //...
    }
}

可以看出,forName就声明了,方法在执行过程中可能会抛出 ClassNotFoundException类型的异常

同时,ClassNotFoundException属于编译异常,所以我们调用forName方法时候就要处理这个异常,或者将异常继续抛出!

思考,为什么方法内抛出异常对象使用关键字throw,方法上声明异常使用的是throws?

3 异常捕获

3.1 概述

当一个方法内,抛出了编译异常的时候,编译器在编译期间检查到,就会报错,提示我们有俩种修改方案:

  • 把这个异常在方法上进行声明抛出
  • 把这个异常再方法内进行捕获处理

例如,声明抛出

public void test(String className)throws ClassNotFoundException{
    
    Class.forName(className);
    
}

可以看出,这里我们并没有处理forName方法抛出的异常,而是将这个异常继续声明抛出,那么将来谁调用我们的test方法,谁就要处理这个异常情况

例如,捕获处理

public void test(String className){
    try {
        Class.forName(className);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

这里使用了try-catch语句块,对可能抛出异常的代码进行异常捕获处理

3.2 try-catch

try-catch语句块,就是用来对指定代码,进行异常捕获处理,并且处理完成后,JVM不会停止运行,代码还可以正常的往下运行!

捕获异常语法如下:

try{
	编写可能会出现异常的代码
}catch(异常类型 e){
	//处理异常的代码,可以是简单的输出异常信息,也可以使用日志进行了记录,也可以对数据进行修改纠正等操作
}

try:该代码块中编写可能产生异常的代码。

catch:用来进行某种异常的捕获,并对捕获到的异常进行处理。

例如,

public class Test {

    public static void main(String[] args) {
        System.out.println("hello");

        Test t = new Test();

        try {
            t.test("zs");
        } catch (Exception e) {
            //打印输出发生异常的时候,栈里面的方法调用情况,方便我们定位和修改代码
            e.printStackTrace();
        }

        System.out.println("world");
    }

    public void test(String name)throws Exception{
        if(!"tom".equals(name)){
            throw new Exception("用户名不正确");
        }
    }

}
//运行结果:
hello
world
java.lang.Exception: 用户名不正确
	at com.briup.demo.Test.test(Test.java:20)
	at com.briup.demo.Test.main(Test.java:9)

可以看出,try-catch语句处理过异常后,代码继续往下执行了,最后输出了world

3.3 捕获多种异常

如果try语句块中的多句代码,都会抛出异常,并且是不同类型的异常,那么catch语句块就有不同的写法,来处理这几个不同类型的异常。

例如,

public static void main(String[] args) {


    String className = "com.briup.demo.Student";
    String methodName = "sayHello";

    try {
        //forName声明抛出ClassNotFoundException
        Class c = Class.forName(className);
        //getMethod方法声明抛出NoSuchMethodException
        Method m = c.getMethod(methodName);
        //invoke方法声明抛出IllegalAccessException和InvocationTargetException
        m.invoke(null);
    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
        e.printStackTrace();
    }

}

这里,使用一个catch语句,里面使用 | 来表示捕获多种不同的异常类型

例如,

public static void main(String[] args) {


    String className = "com.briup.demo.Student";
    String methodName = "sayHello";

    try {
        //forName声明抛出ClassNotFoundException
        Class c = Class.forName(className);
        //getMethod方法声明抛出NoSuchMethodException
        Method m = c.getMethod(methodName);
        //invoke方法声明抛出IllegalAccessException和InvocationTargetException
        m.invoke(null);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

}

这里,使用了四个catch语句,分别对四种不同的异常类型进行捕获处理

注意,这种异常处理方式,要求多个catch中的异常不能相同,并且如果catch中的多个异常之间有子父类异
常的关系的话,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

因为如果父类型异常再最上面的话,下面catch语句代码,永远不会被执行

例如,

public static void main(String[] args) {


    String className = "com.briup.demo.Student";
    String methodName = "sayHello";

    try {
        //forName声明抛出ClassNotFoundException
        Class c = Class.forName(className);
        //getMethod方法声明抛出NoSuchMethodException
        Method m = c.getMethod(methodName);
        //invoke方法声明抛出IllegalAccessException和InvocationTargetException
        m.invoke(null);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

这里,使用了一个catch语句,但是捕获的异常类型是Exception,它最大的异常类型,由于多态的原因,Exception类型的引用e,可以捕获接收到任意类型的异常对象

3.4 finall语句

try-catch语句块,虽然可以捕获并处理异常情况,但是它也会改变代码的执行流程,例如:

public class Test {

    public static void main(String[] args) {
        System.out.println("hello");

        Test t = new Test();

        try {
            t.test("zs");
            System.out.println("briup");//注意观察,这句代码是否执行
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("world");
    }

    public void test(String name)throws Exception{
        if(!"tom".equals(name)){
            throw new Exception("用户名不正确");
        }
    }

}
//运行结果:
hello
world
java.lang.Exception: 用户名不正确
	at com.briup.demo.Test.test(Test.java:20)
	at com.briup.demo.Test.main(Test.java:9)

可以看出,以上代码中的第10行,并没有执行,因为第9行代码调用方法出现异常时,代码就从第9行跳到了11行的catch语句块,刚好吧11行的输出语句代码给跳过去了。

如图:

如果第11行是比较重要的代码,那么如何保证无论发生什么情况,它一定会被执行呢?

其实只要使用finally关键,就可以保证指定代码一定会执行,无论是否发生异常!

例如,try-catch-finally,固定搭配,类似于if-elseif-else,可拆开使用,也可以一起使用

public class Test {

    public static void main(String[] args) {
        System.out.println("hello");

        Test t = new Test();

        try {
            t.test("zs");
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            System.out.println("briup");//这句代码一定会被执行
        }

        System.out.println("world");
    }

    public void test(String name)throws Exception{
        if(!"tom".equals(name)){
            throw new Exception("用户名不正确");
        }
    }

}

//执行结果:
hello
briup
world
java.lang.Exception: 用户名不正确
	at com.briup.demo.Test.test(Test.java:21)
	at com.briup.demo.Test.main(Test.java:6)

思考,以下代码中的finally中的代码是否会被执行

public static void main(String[] args) {
    System.out.println("hello");

    try {
        int a = 1;
        if(a>0){
            return;
        }
    } finally {
        System.out.println("briup");//是否会被执行?
    }

    System.out.println("world");
}

4 自定义异常

4.1 自定义异常的原因

JavaAPI中已经存在的异常类,都是当年sun公司,提前定义好的,它们分别表示着某一种已知的异常情况。

但是,在我们开发的系统中,大多数业务功能里面总会出现一些新的异常情况,而这些异常情况,当年sun公司定义异常类型的时候,肯定是想不到的.

例如,在学生信息管理系统中,学生的年龄设置为负数、学生的成绩大于了100分,用户登录时候的密码不正确、用户访问某些接口时候的权限不足等情况,在系统中都是异常情况,而这些异常类型在JavaAPI中都是没有的。

所以,在实际开发中,我们会自定义一些异常的类型,用来表示上面描述的那些异常情况,这样做的好处就是,我们通过观察系统的运行日志,就可以很快的知道当前系统是发生了什么事情,才导致出了这些异常情况。

4.2 如何自定义异常

  • 如果要自定义一个编译时异常类型,就自定义一个类,并继承Exception
  • 如果要自定义一个运行时异常类型,就自定义一个类,并继承RuntimeException

例如,自定义编译时异常类型,通过名字可知,这是在用户登录期间发生异常时,应该创建并抛出的异常类型

public class LoginExceptin extends Exception{
    public LoginExceptin(){
        
    }

    public LoginExceptin(String message) {
        super(message);
    }
}

例如,自定义运行时异常类型,通过名字可知,这是在修改用户信息期间发生异常时,应该创建并抛出的异常类型

public class ModifyUserInfoExceptin extends RuntimeException{
    public ModifyUserInfoExceptin(){

    }

    public ModifyUserInfoExceptin(String message) {
        super(message);
    }
}

当前我们在系统的日志信息中看到 LoginExceptin 和 ModifyUserInfoExceptin 这俩种异常类型的信息时,就知道是用户在登录和修改信息的时候,出现了问题。

5 断言 assert

断言(assert),是JDK1.4的时候,增加的一个关键字。用它可以在程序中,确认一些关键性条件必须是成立的,否则会抛出AssertionError类型的错误。(了解即可)

注意,断言(assert)并不是用来代替if判断的,而是确认系统中的一些关键性条件是必须成立的,所以assert和if并不冲突,并且还可以通过给JVM传参数,来控制断言(assert)是否生效。

断言(assert)的使用方式:

assert 布尔表达式;
//或者
assert 布尔表达式 : "错误信息";

当布尔表达式为true时,断言通过,否则抛出AssertionError类型错误

所以,assert后面的布尔表达式必须true才行。(也就是说条件必须成立)

例如,

public class Test {
	
	public static void main(String[] args) {
		
		Test t = new Test();
		t.test(0);
		
	}
	
	public void test(int a) {
		
		assert a!=0 : "参数a的值不能为0";
		
		int b = 10;
		int c = b/a;
		
		System.out.println(c);
		
	}
	
}

默认情况下,JVM是没有开启断言功能的,需要通过给JVM传参打开此项功能

需要使用 -enableassertions 或者 -ea JVM参数

例如,java -ea com.briup.demo.Test

使用eclipse运行时:
在这里插入图片描述

在这里插入图片描述

此时的运行结果为:因为断言要求参数a不能为0,但实际参数传的为0

Exception in thread "main" java.lang.AssertionError: 参数a的值不能为0
	at com.briup.demo.Test.test(Test.java:14)
	at com.briup.demo.Test.main(Test.java:8)

如果去掉-ea参数的话,那么断言(assert)语句,在JVM执行代码的时候,会被直接忽略的

Java 异常处理 -- Java 语言的异常、异常链与断言 世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。 阅读详情

相关推荐

避坑指南:WSL2网络模式修改导致无法上网的解决方案(附备份还原技巧)

本文深入解析WSL2默认网络隔离机制,并提供三种安全的端口互通方案,重点推荐通过配置Windows防火墙规则实现稳定访问。同时,针对网络配置修改可能引发的无法上网问题,给出了从重置配置到系统级备份的完整恢复指南,确保开发环境安全可靠。

jj890的博客 780

java中的throw new Exception();和throw e;异常抛出

java代码如下: package com.imooc.exception; public class Throw1 {     public static void main(String[] args) {         // TODO Auto-generated method stub         Throw1 test = new Throw1();    

探索者_wmc的博客 8万+

RAG 赋能客服机器人:多轮对话与精准回复

在人工智能技术飞速发展的今天,客服机器人已成为企业提升服务效率的重要工具。然而,传统客服系统在多轮对话连贯性和精准回复能力上存在明显短板。检索增强生成(Retrieval-Augmented Generation, RAG)技术通过结合大语言模型(LLM)与外部知识库,为解决这一问题提供了创新路径。本文将深入探讨 RAG 在客服机器人中的应用,重点分析其如何实现多轮对话与精准回复,并结合实际案例与技术框架展开讨论。

shuizhudan223的博客 2140

java异常处理

super("账户余额不足!");}需要编写的程序-一个无参构造函数其余的方法可以使用IDE工具自动生成-一个带有String参数的构造函数,并传递给父类的构造函数。-一个带有String参数和Throwable参数,并都传递给父类构造函数-一个带有Throwable参数的构造函数,并传递给父类的构造函数。2、在方法适当的位置生成自定义异常的实例,并使用throw语句抛出。...

weixin_50518344的博客 482

2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整论文+代码+结果

2024国赛A题参考论文。2024国赛D题参考论文。2024国赛E题参考论文。2024国赛B题参考论文。2024国赛C题参考论文。

qq_52590045的博客 5351

AI应用架构师:引领半导体良率AI预测的变革浪潮

在半导体行业这个技术密集、资本密集且竞争异常激烈的领域,良率是决定企业盈利能力的关键指标。每提升1%的良率可能意味着数亿美元的利润增长。然而,随着制程节点不断缩小至3nm、2nm甚至更先进水平,传统的良率管理方法已难以应对日益复杂的制造流程和指数级增长的数据量。本文将深入探讨AI应用架构师如何成为这场变革的核心驱动力,通过设计和实施先进的AI预测系统,将半导体良率预测从传统的"事后分析"转变为"事前预测"和"实时优化"。

AI大模型应用之禅 403

Java中的异常(Exception)

Java中的异常Exception,分为编译时异常和运行时异常

AAAAA_9的博客 2445

基于WEB的报价管理系统的设计与实现

该系统采用B/S模式,后台运用SpringMVC和MyBatis搭建,利用MySQL数据库,来组织存储和管理数据,使用tomcat服务器向外提供服务。使用该系统对外有利于提高企业的综合竞争力,对内有利于提高成本管理和控制的水平,简化了报价流程、提高了工作效率、精简了报价机构,降低了成本。研究和掌握必要的信息采集和数据查询技术,是各个企业,事业单位信息化的一个重要标志。当前大多数企业采取的报价方式仍然是用EXCEL表格和人工的方式,这不仅不利于大量数据的总结,更不利于对销售利润的控制。

m0_60918862的博客 999

Java的throws Exception

转:https://www.cnblogs.com/feichengwulai/articles/3793261.html 1、(终极解释!!!)throwsException放在方法后边,是throwsException表示的是本方法不处理异常,交给被调用处处理(如果你不希望异常层层往上抛,你就要用throws Exception),而且被调用处必须处理。 2、throw new Exce...

hanxiaoyong_的博客 7万+

完整版:ultralytics下运行yoloworld并训练

本文介绍了Ultralytics YOLO环境的快速配置与使用流程:1) 通过conda创建Python 3.9环境并安装依赖包;2) 配置中科大镜像源加速安装PyTorch和Ultralytics;3) 准备YOLO格式数据集并修改data.yaml配置文件;4) 提供模型预测、训练和验证的常用指令,包括predict/train/val等命令参数设置。文章还包含CLIP模型下载、权重文件获取以及本地安装等注意事项,完整覆盖了从环境搭建到模型部署的全过程。

weixin_50209871的博客 1344

ANSYS APDL 异类单元连接实战:MPC方法在壳-实体装配中的应用

本文详细介绍了在ANSYS APDL中使用MPC方法实现壳单元与实体单元高效连接的技术要点。通过分析工程仿真中的常见需求,阐述了MPC方法在解决异类单元连接问题上的优势,包括网格独立性、自由度耦合和载荷传递等特性,并提供了具体的APDL命令流操作示例和实用经验技巧。

weixin_33391446的博客 178

Java初学之抛异常

有这样一道题: 下面关于try、catch和finally语句块的组合使用,正确的是  (A)try {…}  (B)try {…} finally {…} (C)try {…} catch {…} finally {…} (D)try {…} catch {…} catch {…}  答案:BCD 我们通过这个题,来详细的了解一下Java中抛异常: 任何Java代

sum_TW的博客 5444

同步调相机启动与并网控制技术方案

同步调相机起动与并网控制技术方案采用背靠背变流器系统,通过静止变频器(SFC)策略实现无原动机驱动的同步电机从静止到同步转速的平稳起动。方案详细阐述了硬件自检、模块初始化、转子位置检测等关键环节,重点解决启动转矩为零、冲击电流大等挑战。系统基于STM32或C2000系列控制器,包含网侧/机侧变流器、检测保护单元及通信接口,通过励磁脉冲和电压响应分析实现高精度转子初始定位,为后续并网提供必要条件。代码级实现涵盖了ADC自检、数字IO验证及通信端口测试等核心功能。

huanghm88的专栏 305

JAVA基础——异常详解

什么是异常?异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域的情况,称之为异常。java中异常的体系是怎么样的呢?1.Java中的所有不正常类都继承于Throwable类。Throwable主要包括两个大类,一个是Error类,另一个是Exception类;2.其中Error类中包括虚拟机错误和线程死锁,一旦Error出现了,程序就彻底的挂了,被称为程序终结者;3.Exception类,也就是通常所说的“异常”。

woaimx_1314的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java异常

super(msg);// ...try、catch和finally都不能单独使用,只能是try-catch、try-finally或者try-catch-finally。try语句块监控代码,出现异常就停止执行下面的代码,然后将异常移交给catch语句块来处理。finally语句块中的代码一定会被执行,常用于回收资源。throws:声明一个异常,告知方法调用者。throw :抛出一个异常,至于该异常被捕获还是继续抛出都与它无关。Java编程思想一书中,对异常的总结。

YLXCA的博客 1284

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java 基础 - 异常机制详解

本文综合多篇文章后,总结了Java 异常的相关知识,希望可以提升你对Java中异常的认知效率。

qq_63353796的博客 1178

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java基础:Java异常机制

异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类java.lang.Throwable作为所有异常的超类。Throwable : 它是所有错误与异常的超类(祖宗类),有两个子类 Error 和 Exception。 本篇主要记录内容包括:异常介绍、抛出异常、声明异常、捕获异常

栗筝i的博客 6307

Java异常基础

通过合理地使用Java异常处理机制,可以提高程序的健壮性和可靠性,使程序能够更好地应对各种可能出现的错误情况。

全局可见 1039

【java】认识异常,理解异常,掌握异常

文章目录 1️⃣异常的背景 1.认识异常 2.避免异常的两种方式 2️⃣异常的基本用法 1.基本语法 2.多个 catch 块 3.使用共同父类 Exception 捕获异常 4.关于异常的错误输出 5.关于异常的调用链 6.关于 finally 代码块 7.使用 try 回收资源 8.一组关键字:throw 和 throws 9.异常处理流程总结 3️⃣异常体系结构 受查异常 4️⃣自定义异常类

Welcome to my blog. 1071

Java基础之异常

1. 异常 1.1 异常概念 异常,就是不正常的意思.在生活中:医生说你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受到影响,在程序中的意思就是: 异常:指的就是程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身就是一个类,产生异常就是创建异常对象.Java处理异常的方式就是中断处理 异常指的并不是语法错误,语法错了...

限定私语的博客 1395

java 抛出异常的作用_Java 基础之异常抛出

Java 基础之异常抛出Java,基础,异常抛出在 Java 里,除了对异常的捕获外,你还可以抛出异常,还可以创造异常。抛出异常的作用就是告诉你的调用者,程序出现了不正常的情况了,得不要期望的结果了。throws 声明抛出异常在你实现的方法里,如果有你处理不了的异常,你应该选择把异常交给你的调用者,而不是让异常在你手上烂掉。比如调用者告诉你文件的路径,让你返回文件的内容,但是这个文件不存在,如果你...

weixin_39610678的博客 2778

Java基础——异常

异常(Exception) 基本概念 Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件可分为两大类: Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽、栈溢出等严重情况。Error是严重错误,程序会崩溃。 Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception分为两

Wen先森的博客 435
上一篇: java基础(泛型,枚举,反射)
下一篇: Java基础(进程与线程,线程的创建)
平平无奇的编码小天才
博客等级 码龄6年 15粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值