第五天Java基础(异常、线程)

侧杆试验 - 高速撞击 - 显式动力学 - ANSYS Workbench 显式动力学是一种时间积分方法,用于在速度很重要时执行动态模拟。显式动力学考虑快速变化的条件或不连续事件,例如自由落体、高速撞击和施加的负载。由于这些“非线性动力学”已集成到模拟中,因此显式动力学是模拟高度瞬态物理现象的首选。有些侧面碰撞是指车辆侧向撞上路边的坚硬物体,如树木或电线杆。这通常是由于驾驶员失去控制、超速、误判拐角或在湿滑路面上打滑造成的。 阅读详情

1.异常(Excption)

1.1 异常分类

1.Exception:编译异常
2.RuntimeException:运行异常
3.Error:错误

1.2异常的两种处理方式

1.抛出异常,JVM处理异常,如果发现异常直接中断程序,控制台打印异常。

throws ParseException {
	//把异常交给JVM处理
}

2.自行处理异常

	try {
            date = sf.parse("1999-1203000");
        }catch (ParseException e){
            e.getErrorOffset();
        }

3.异常抛出的处理流程
在这里插入图片描述

1.2 关键字(throw)

1.写在方法内部
2.new的对象必须是Exception或是其子类

throw new NullPointerException("抛异常");

3.我们必须对方法传递过来的参数进行合法性的校验,如果不合法就抛异常。

1.3Object非空判断

Objects.requireNonNull(obj,“异常描述”);//该方法对对象进行非空校验,如果为空直接抛异常。

1.4关键字(throws)

1.必须写在方法声明处。
2.声明的对象必须是Exception或是其子类。
3.方法抛出多个异常对象,throws也必须声明多个异常。
4.必须处理异常。(自己处理,或者jvm中断程序)

1.5关键字(try_catch)

1.try中可能会抛出多个异常对象,那么就需要使用多个catch,来捕获异常,
2.try代码中一但出现异常,就会执行catch去处理错误,然后继续执行后续代码。

1.6Throwable类中定义的三个异常处理方法

1.getMessage();//返回简短信息
2.toString();//详细信息
3.printStackTrace();//全面信息

 try {

        }catch (Exception e){
            e.getMessage();//简短
            e.toString();//详细信息
            e.printStackTrace();//全面信息
        }

1.7(关键字)finally

try{}catch(){}finally{
	//无论是否出现异常都会执行
	//主要用于资源释放
}

1.8 异常的注意事项

1.如果异常类型出现父子关系,那么子类必须写在前面。
2.父类可以同时接收子类的异常。
3.如果finally中出现return关键字返回的结果都是finally中的结果
4.父类异常怎么了,子类异常就怎么样

1.9 自定义的异常类

1.自定义的异常类一定要继承Exception / RuntimeException
2.Exception 编译期异常
3.RuntimeException 运行异常

2 多线程

2.1 并发,并行

1.并发:多个事件在同一个时间段内发生。(交替执行)
2.并行:多个事件在同一个时刻内发生。(同时执行)

2.2 线程,进程

1.进程:进入到内存中的程序。
2.线程:线程是属于进程中的一个执行单元。

2.3 线程调度

1.分时调度:平均分配cpu使用时间
2.抢占式调度:工具优先级分配cpu使用时间

2.4 主线程

1.执行主方法的线程

2.5 多线程(Thread)常用的方法

1.getName();//获取线程名称
2.start();//开启线程
3.run();//重写线程方法
4.currentThread();//获取当前执行的线程,静态
5.Thread.currentThread().getName();//获取当前执行的线程,并打印名称
6.setName();//设置线程名称
7.在线程的子类中创建一个带参构造方法String name,super(name)把线程名字传递给Thread,也可以设置线程名。
8.Thread.sleep(1000);//线程暂停时间

2.6 多线程(Runnable)常用的方法

1.runnable开启线程的方式
实现Runnble接口,RunnbleImpl run = new RunnbleImpl();
创建Thread的构造方法,把run传进去,Thread t = new Thread(run);
然后开启线程
2.Runnable的好处
避免单继承的局限性
增强了程序的扩展性,降低类耦合性,把设置任务和开启线程进行分离

2.7 匿名内部类,简化线程代码

1.new Thread(){ run(){ … } }.start();
2.new Thread(new Runnale(){ run( … ) }).start();

2.8 线程安全问题

1.多线程在操作同一个资源时,会出现线程安全问题。
2.如何解决,同步技术
synchronized(锁对象){
//代码块
}

int count = 100;
    Object obj = new Object();
    @Override
    public void run() {
        while(true){
            synchronized(obj){
                if(count>0){
                    System.out.println(Thread.currentThread().getName()+",在买第"+count+"张票!");
                    --count;
                }else{
                    break;
                }
            }
        }
    }

3.如何解决,同步方法
也是synchronized关键字,把产生线程安全问题的代码放入其中
同步方法:public synchronized void xxx(){}
其锁对象是this
4.静态同步方法:public static synchronized void xxx(){}
其锁对象是本类的class属性,class文件对象。
5.lockes锁 :
lockes锁比synchronized 锁 好一点。
其中两个方法比较重要
lock();//获取锁
unlock();//释放锁

Lock l =new ReentrantLock();
l.lock();//获取锁
l.unlock();//释放锁

3.线程状态

1.新建状态 new
2.运行状态 Runnable
3.阻塞状态 Blocked
4.死亡状态 Terminated
5.休眠状态 Timed_waiting
6.无限等待 Waiting
运行状态的线程可以通过
Object.wait()方法进入无限等待状态
可以通过Object.notify()恢复运行状态,或者是休眠状态

4.等待唤醒案例

public static void main(String[] args) {
        Object o = new Object();
        new Thread(){
            @Override
            public void run() {
                    while(true){
                        synchronized (o){
                            System.out.println("老板我要包子一个!");
                            try{
                                o.wait();
                            }catch(InterruptedException e){
                                System.out.println(e.getMessage().toString());
                            }
                            System.out.println("-------------------------------");
                            System.out.println("吃包子!");
                        }
                    }
            }
        }.start();
        new Thread(){
            @Override
            public void run() {
                while(true){
                    try{
                        Thread.sleep(5000);
                    }catch(InterruptedException e){
                        System.out.println(e.getMessage().toString());
                    }
                    synchronized (o){
                        System.out.println("包子好了!");
                        o.notify();
                    }
                    System.out.println();
                }
            }
        }.start();
    }

5.Object类中wait带参数的方法

1.obj.wait(5000);//相当于Thread.sleep(5000);
2.唤醒线程的两种方法,obj.notify();//唤醒一个等待线程,obj.notifyall();//唤醒所有等待的线程

5.线程通信

1.主要通过锁对象调用,obj.notify();和obj.wait();

6.等待与唤醒

1.等待与唤醒机制必须在同步锁当中。

 @Override
            public void run() {
                    while(true){
                        synchronized (o){
                            System.out.println("老板我要包子一个!");
                            try{
                                o.wait();
                            }catch(InterruptedException e){
                                System.out.println(e.getMessage().toString());
                            }
                            System.out.println("-------------------------------");
                            System.out.println("吃包子!");
                        }
                    }
            }
///////////////////////////////////////////////
 @Override
            public void run() {
                while(true){
                    try{
                        Thread.sleep(5000);
                    }catch(InterruptedException e){
                        System.out.println(e.getMessage().toString());
                    }
                    synchronized (o){
                        System.out.println("包子好了!");
                        o.notify();
                    }
                    System.out.println();
                }
            }

5.线程池(Executors)

1.使用线程池的工厂类Executors里面提供的newFixedThreadPool生产一个指定数量的线程池
2.创建一个类来实现Runable,重写run();
3.调用ExecutorService中的方法submit,传递线程任务,开启线程执行run方法

ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(new RunnableImpl);
es.shutdown();//销毁线程池
# 5.线程池(Executors)

6.Lambda表达式

1.主要简化匿名内部类的写法

		new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("普通写法");
            }
        }).start();
        new Thread(() -> {
            System.out.println("Lambda表达式");
        }).start();

2.省略规则
(参数列表):括号中参数列表类型,可以省略
(参数列表):括号中的参数只有一个,那么类型的()都可以省略
(一些代码):如果代码只有一行,无论是否有返回值都可以省略({},return,分号)注意一定要一起省略

 new Thread(()-> System.out.println("sss")).start();
 //////////////////////////////
 Arrays.sort(arr, (Pan o1, Pan o2) -> o1.getAge() - o2.getAge());

3.Lambda的使用前提
使用必须具有接口,且接口必须仅有一个抽象方法
方法的参数或者局部变量必须为接口类型

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境 工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安 阅读详情

相关推荐

当NetApp 7-mode遇到单控制器故障:HA模式手动修复全记录

本文详细记录了NetApp 7-mode存储系统在单控制器故障时的应急修复过程,包括HA配置重建、磁盘初始化和业务恢复等关键步骤。通过实战案例解析如何解决`VIA Interconnect is down`等典型问题,为企业级存储系统的高可用保障提供实用指南。

yolo5detector的博客 247

3-22-Java学习第五天 P278-P344 异常 线程 File

...

qq_40723205的博客 131

利用HipSTR从二代测序数据中精准解析短串联重复序列(STR)的遗传多态性

本文详细介绍了如何利用HipSTR工具从二代测序(NGS)数据中精准解析短串联重复序列(STR)的遗传多态性。通过三步走策略,HipSTR能够高效识别STR区域、估算重复次数并判定基因型,适用于法医鉴定、疾病研究和细胞系鉴定等多个领域。文章还提供了实战操作指南和常见问题解决方案,帮助研究者充分利用NGS数据开展STR分析。

weixin_28702105的博客 483

Java进阶第五天

1、异常 1.1 异常类和处理方式 (1)异常是一个类,发生异常时会创建一个异常对象并抛出。 (2)异常不是语法错误,语法错误编译不通过,不会产生字节码文件,不会运行    Throwable父类    Error子类 不能处理,只能尽量避免    Exception子类  编译期(写代码时)异常            RuntimeException 运行期异常 (3)两种处理方式:1、抛出异常,给虚拟机处理,虚拟机会中断程序,将异常打印出来           2、try-catch 处理之后抛出异常但

Prayer96的博客 516

EEGLAB合辑 | 第一节 往EEGLAB导入数据

1、学习Matlab EEGLAB图形界面建立在强大的Matlab脚本语言之上。要使用EEGLAB构建宏命令和执行自定义和自动化处理的全部功能,就需要能够在Matlab中操纵EEGLAB数据结构。由于时间限制,这个wiki没有提供关于Matlab脚本语言的介绍。相反,用户需要在开始研究之前熟悉Matlab。 2、安装EEGLAB和教程文件 首先下载包含教程数据集的EEGLAB(30MB),附下载地址。 (https://sccn.ucsd.edu/eeglab/downloadtoolbox.php) 解压

nvsirgn的博客 5134

迪文屏【0】——从零搭建工程:图片显示、文本变量配置与串口数据交互实战

本文以迪文屏T5L系列为例,详细介绍了从零搭建HMI工程的完整流程。内容涵盖硬件软件准备、DGUS工程创建、背景图片显示、文本变量配置,并重点演示了如何通过串口指令实时修改屏幕数据变量,实现动态交互。旨在帮助开发者快速掌握迪文屏开发的核心步骤与数据交互方法。

alpha的博客 349

Java学习第五天-线程专项学习:三大线程创建方式

多线程学习 程序:是一个静态的概念,是指令和数据的有序集合; 进程:是一个动态的概念,是执行一次程序的过程,是系统资源分配的单位 线程:是电脑CPU调度和执行的基本单位,每一个进程中至少得有一个线程,且每个进程可以含有多个线程 单核同一时间只能执行一个线程,线程开启不一立即执行,由CPU调度执行 三种线程创建方式一:继承Thread类(重点) 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用start()

weixin_59795751的博客 172

告别Sourceforge安装器!手把手教你下载MinGW-w64离线包并配置环境变量(Windows 10/11)

本文详细介绍了如何在Windows 10/11系统上通过下载MinGW-w64离线包并配置环境变量,完全绕过Sourceforge安装器的问题。从选择正确的版本、解压到本地目录,到设置系统环境变量和验证编译环境,手把手指导开发者快速搭建稳定的GCC编译环境,解决常见的安装困扰。

weixin_30896825的博客 337

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-高级编程之API类库Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆数字操作类Math数学计算类Random随机数生成类BigDecimal大数字操作类日期操作类DateSimpleDateFormat正则表达式类国际化程序实现开发支持类库A...

java 580

SPI协议详解(图文并茂+超详细)

先说串口 因为之前写过一篇UART,通用串行异步通讯协议,UART的相关资料 因为UART没有时钟信号,无法控制何时发送数据,也无法保证双发按照完全相同的速度接收数据。因此,双方以不同的速度进行数据接收和发送,就会出现问题。 如果要解决这个问题,UART为每个字节添加额外的起始位和停止位,以帮助接收器在数据到达时进行同步; 双方还必须事先就传输速度达成共识(设置相同的波特率,例如每秒9600位)。 传输速率如果有微小差异不是问题,因为接收器会在每个字节的开头重新同步。相应的协议如下图所示; 如果您注意到

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 33万+

Qt 调用YOLO模型(代码)

本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。

轩宇的博客 260

第五天:Java 异常处理最佳实践,项目中怎么优雅捕获异常

项目中,业务逻辑异常(如用户不存在、订单已取消、参数非法)与系统异常(如NPE、IO异常)混在一起,会导致代码混乱、排查困难,因此需要自定义业务异常,单独处理业务相关的异常,提升代码可读性和可维护性。继承自RuntimeException(非受检异常):自定义业务异常优先继承RuntimeException,无需显式通过throws声明,简化代码;若继承Exception(受检异常),会增加代码冗余,每次抛出都需处理,不符合业务异常的使用场景。

xmhnl的博客 400

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3206

java笔记第五天

Day05 昨日回顾 循环的嵌套(三角形,99乘法表) 方法 定义 修饰符 返回值类型 方法名称(参数列表){语句;return} 调用 方法名称(); 无参 重载 求和运算getSum() 方法名相同 参数列表不同(个数,数据类型,顺序) 与返回值类型无关 数组 定义:数据类型[] 数组的名称 = new 数据类型[数组的长度]; 分类:动态初始化 数据类型[] 数组的名称 = new 数据类型[数组的长度]; 静态初始化 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};

weixin_46362959的博客 213

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

学习java基础知识的第五天

java面试题

accumulation_33的博客 163

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

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

小白学Java第五天、第六天

说起线程就不得不提起进程,说起进程就不得不提起程序程序是指令和数据的有序集合,是一个静态概念。进程则是执行程序的一次执行过程,他是一个动态的概念。是系统资源分配的单位通常在一个进程中可以有若干个线程,当然一个进程中至少有一个线程,线程是CPU调度和执行的单位处理多线程问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象这时候就需要线程同步,线程同步是一种等待机制,多个需要同时此对象的线程进入这个对象的等待池形成队列,等待前面的线程使用完毕,下一线程再使用。

dragon__ran的博客 1425

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java date加一天_java入门基础介绍

发送你要查询的内容的编号给我!我将为你解答!例如发送:1.1第一天、java开发环境的搭建和第一个java程序的运行:1.1jdk的安装1.2第一个java程序——hello world1.3java的运行原理1.4集成开发环境(IDE)介绍第二天、变量、数据类型和运算符:2.1变量的声明和数据类型2.2基本数据类型的变量2.3Java的表达式和运算符2.4运算符的优先级别第三天、程序流程控制:3...

weixin_39965514的博客 201

java第5天_java基本知识的第五天

大写的话,就是相当于不匹配相应的内容这里说的是搜索和替换、说这个正则表达式如何去匹配,以及字符串如何去切分的问题。这里的话,就是说如何去匹配相应的东西,如何去切分相应的东西,相应的替换自己也知道。以下讲的是加密和解密这里应该说的是: URLEncoder和decoder的作用,就是把文本转化为编码,它是不能够用于加密和解密的,只是用来把文本变成编码而已把文本变成编码 然后供浏览器和服务器处理这里说...

weixin_35934037的博客 67

如何在短时间内高效的学习Java基础?

上述课程表是以每天学习6最少小时为基础设定的学习内容,如果各位小伙伴可以根据自己每天能学习、吸收的知识,进行排序。

黑马程序员官方博客 237

java第五天

函数的重载 当定义的功能相同时,但参与运算的未知内容不同。 当函数名相同时,通过参数列表不同(参数列表数量或者参数类型)来区分多个同名的函数, public static void a(int n1) { System.out.print("重载函数1"); }...

cidaibian1932的博客 108

零基础如何学习Java?Java学习路线图

课程内置大量的案例实战,初学者可以学练合一,对 Java 语言形成完整体系,并能得到自己的心得,足以轻松应对薪酬 30万+ 的 Java 基础面试。20 天学会 Java - 1. Java 课程简介​www.zhihu.com/education/video-course/1483149993460109313正在上传…JDK8-15新特性 → 编程强化 → 数据库强化 → 安全框架SpringSecurity → 报表技术 →。VelocityTools → 工作流Activiti7……

黑马程序员官方博客 498

对象导论笔记-第五天 对象生命期 异常处理 并发

1.10对象的创建和生命期 在使用对象时,最关键的问题之一便是它们的生成和销毁方式。每个对象为了生存都需要资源,尤其是内存。当我们不再需要一个对象时,它必须被清理掉,使其占有的资源可以被释放和重用。 对象的数据位于何处?怎样控制对象的生命周期? C++认为效率控制是最重要的议题,所以给程序员提供了选择的权利。可以通过将对象置于堆栈(automatic variable)或限域变量(sco...

RoyAkon's FreeStyle 146

java详细教程,Java详细基础教程

资源介绍【课程目录】第一天01 基本常识02 Java的跨平台性03 安装04 环境变量配置05 环境变量配置技巧06 环境变量临时配置方式07 Hello.World08 classpath配置09 Hello.World的组成部分10 注释第二天01 标识符02 常量03 进制的特点04 进制转换(十进制和二进制05 进制转换(八进制和十六进制06 进制转换(负数二进制07 变量08 类型转换...

weixin_39552768的博客 198

女Java年底被裁努力面试第五天

生产者将消息放入队列,消费者(consumer) 监听 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失,这里可以设置成手动的ack,但如果设置成手动ack,处理完后要及时发送ack消息给队列,否则会造成内存溢出)当有新任务提交时,如果线程池中有空闲线程,则复用空闲线程执行任务;:SingleThreadExecutor 是一个只有单个工作线程的线程池,保证所有任务按照指定顺序(FIFO,LIFO,优先级)执行。

xu_tongtong的博客 359

Java基础详细大纲_java入门基础介绍大纲!

发送你要查询的内容的编号给我!我将为你解答!例如发送:1.1第一天、java开发环境的搭建和第一个java程序的运行:1.1jdk的安装1.2第一个java程序——hello world1.3java的运行原理1.4集成开发环境(IDE)介绍第二天、变量、数据类型和运算符:2.1变量的声明和数据类型2.2基本数据类型的变量2.3Java的表达式和运算符2.4运算符的优先级别第三天、程序流程控制:3...

weixin_39914752的博客 144

第五天

主要特性 Java语言是简单的: Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 Java语言是面向对象的: Java语言提供类、接口和继承等面向对象...

weixin_43525516的博客 146
上一篇: 第四天Java基础02(集合)
下一篇: 第七天Java基础(File、递归、IO流)
RestartJava
博客等级 码龄7年 1粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值