首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,086 阅读
2
类的加载
742 阅读
3
Spring Cloud OAuth2.0
726 阅读
4
SpringBoot自动装配原理
691 阅读
5
集合不安全问题
587 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
Mybatis
Spring
html5
蘇阿細
累计撰写
389
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Linux
容器
Docker
Kubernetes
Python
FastApi
页面
统计
关于
搜索到
51
篇与
的结果
2020-11-25
多线程
Process(进程):程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念进程是执行程序的一次执行过程,它是一个动态的概念,是系统资源分配的单位一个进程中至少有一个线程,也可以包含若干个线程很多多线程是模拟出来的,真正的多线程是指有多个cpu,即多核。如果是模拟出来的多线程,即在单个cpu的情况下,在同一个时间点,cpu只能执行一个代码,因为切换得很快,所以就有同时执行的错觉Thread(线程):线程是独立执行的路径在程序运行时,即使没有自己创建线程,后台也会有多个线程,如主线程,gc线程main()称之为主线程,为系统的入口,用于执行整个程序在一个进程中如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,其执行的先后顺序不能人为干预对同一份资源操作时,会存在资源抢夺的问题,需要加入并发控制线程会带来额外的开销,如cpu调度时间,并发控制开销等每个线程在自己的工作内存交互,内存控制不当会造成数据不一致普通方法调用和多线程调用run()方法:只有主线程一条执行路径调用start()方法:多条执行路径,主线程和子线程并行交替执行小结1、继承Thread类子类继承Thread类具备多线程能力启动线程:子类对象.start()不建议使用:避免OOP单继承局限性2、实现Runnable接口实现接口Runnable具有多线程能力启动线程:传入目标对象+Thread对象.start()推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用//一份资源 TestThread t = new TestThread(); //多个代理 new Thread(t1,"多线程测试01").start(); new Thread(t1,"多线程测试02").start(); new Thread(t1,"多线程测试03").start();3、实现Callable接口实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象创建执行服务:ExecutorService ser = Executors.newFixedThreadPool(3); //3为线程池数量提交执行:Future result = ser.submit();获取结果:Boolean rs1 = result.get();关闭服务:ser.shutdownNow();
2020年11月25日
43 阅读
0 评论
0 点赞
2020-11-25
Lambda表达式
Lambda表达式(Jdk1.8之后出现)λ希腊字母,英文名称为Lambda避免匿名内部类定义过多其本质是函数式编程(params) ->expression[表达式] (params) ->statement[语句] (params) ->{statement}例:a->System.out.println("Lambda表达式测试-->"+a);new Thread(()-> System.out.println("Lambda表达式测试")).start();简化步骤实例:定义函数式接口,实现类--->静态内部类--->局部内部类--->匿名内部类(逐步简化)package com.lambda.demo01; /** * @Author suaxi * @Date 2020/11/25 11:21 */ public class TestLambda01 { //3、静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("I like lambda2"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //4、局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("I like lambda3"); } } like = new Like3(); like.lambda(); //5、匿名内部类,没有类的名称,必须借助接口 like = new ILike() { @Override public void lambda() { System.out.println("I like lambda4"); } }; like.lambda(); //6、用lambda简化 like = ()->{ System.out.println("I like lambda5"); }; like.lambda(); } } //1、定义一个函数式接口 interface ILike{ void lambda(); } //2、实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("I like lambda1"); } }Lambda表达式总结:package com.lambda.demo01; /** * @Author suaxi * @Date 2020/11/25 16:24 */ public class TestLambda02 { public static void main(String[] args) { DisLike disLike = null; /*//1、lambda表达式简化 DisLike disLike = (int a) ->{ System.out.println("lambda表达式测试"+a); }; //简化1:参数类型 disLike = (a) ->{ System.out.println("lambda表达式测试"+a); }; //简化2:简化括号 disLike = a -> { System.out.println("lambda表达式测试"+a); }; //简化3:去掉花括号 disLike = a -> System.out.println("lambda表达式测试"+a); disLike.dlike(1);*/ //多个参数时 disLike = (a,b) ->{ System.out.println("lambda表达式测试"+a); System.out.println("lambda表达式测试"+b); }; disLike.dlike(1,2); //总结: //1、lambda表达式只有在一行代码的情况下才能简化为一行,如果有多行,则需用代码块包裹 //2、函数式接口是前提 //3、多个参数也可以去掉参数类型(要去掉就都去掉),有多个参数的时候不能像简化3一样去掉括号, // 单个参数时可以简化括号,多个参数时必须加上括号 } } interface DisLike{ void dlike(int a,int b); }
2020年11月25日
196 阅读
0 评论
0 点赞
2020-11-23
UDP
类似于发短信,不用连接,只需要知道接收端的地址发送消息发送端package com.network.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * @Author suaxi * @Date 2020/11/23 11:03 * UDP发送消息,不需要连接服务器 */ public class UpdClientDemo01 { public static void main(String[] args) throws Exception { //1、建立一个socket DatagramSocket datagramSocket = new DatagramSocket(); //2、建立包 String mgs = "故乡的樱花开了!"; InetAddress localhost = InetAddress.getByName("localhost"); int port = 8888; //数据 数据的长度起始 要发送给谁 DatagramPacket datagramPacket = new DatagramPacket(mgs.getBytes(), 0, mgs.length(),localhost,port); //3、发送包 datagramSocket.send(datagramPacket); //4、关闭流 datagramSocket.close(); } } 接收端package com.network.lesson03; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * @Author suaxi * @Date 2020/11/23 11:18 * UDP接收端,还是要等待客户端的连接 */ public class UpdServerDemo01 { public static void main(String[] args) throws Exception { //开放端口 DatagramSocket datagramSocket = new DatagramSocket(8888); //接收数据包 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length); datagramSocket.receive(datagramPacket); //阻塞接收 System.out.println(datagramPacket.getAddress().getHostAddress()); //接收地址 System.out.println(new String(datagramPacket.getData(),0,datagramPacket.getLength())); //数据包消息 //关闭连接 datagramSocket.close(); } } 循环发送消息package com.network.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; /** * @Author suaxi * @Date 2020/11/23 11:34 * 发送消息 */ public class UdpSenderDemo01 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(8888); //准备数据,控制台读取输入的数据System.in BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); while (true){ String data = bufferedReader.readLine(); byte[] bytes = data.getBytes(); DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress("localhost", 8889)); datagramSocket.send(packet); if (data.equals("bye")){ break; } } datagramSocket.close(); } } package com.network.chat; import java.net.DatagramPacket; import java.net.DatagramSocket; /** * @Author suaxi * @Date 2020/11/23 11:34 * UDP聊天咨询Demo(循环接收) */ public class UdpReciverDemo01 { public static void main(String[] args) throws Exception { DatagramSocket datagramSocket = new DatagramSocket(8889); while (true){ //准备接收包裹 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length); datagramSocket.receive(datagramPacket); //阻塞式接收包裹 byte[] data = datagramPacket.getData(); String reciveData = new String(data, 0, data.length); System.out.println(reciveData); //断开连接 if (reciveData.equals("bye")){ break; } } datagramSocket.close(); } } 在线咨询,两者都是发送方,也都可以是接收方发送端package com.network.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; /** * @Author suaxi * @Date 2020/11/23 14:37 */ public class TalkSend implements Runnable{ DatagramSocket datagramSocket = null; BufferedReader bufferedReader = null; private int fromPort; private String toIP; private int toPort; public TalkSend(int fromPort, String toIP, int toPort) { this.fromPort = fromPort; this.toIP = toIP; this.toPort = toPort; try { datagramSocket = new DatagramSocket(fromPort); bufferedReader = new BufferedReader(new InputStreamReader(System.in)); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { String data = bufferedReader.readLine(); byte[] bytes = data.getBytes(); DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length, new InetSocketAddress(this.toIP, this.toPort)); datagramSocket.send(packet); if (data.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } datagramSocket.close(); } } 接收端package com.network.chat; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /** * @Author suaxi * @Date 2020/11/23 14:43 */ public class TalkRecive implements Runnable{ DatagramSocket datagramSocket = null; private int port; private String mgsFrom; public TalkRecive(int port,String mgsFrom) { this.port = port; this.mgsFrom = mgsFrom; try { datagramSocket = new DatagramSocket(port); } catch (SocketException e) { e.printStackTrace(); } } @Override public void run() { while (true){ try { //准备接收包裹 byte[] bytes = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(bytes, 0, bytes.length); datagramSocket.receive(datagramPacket); //阻塞式接收包裹 byte[] data = datagramPacket.getData(); String reciveData = new String(data, 0, data.length); System.out.println(mgsFrom+":"+reciveData); //断开连接 if (reciveData.equals("bye")){ break; } } catch (IOException e) { e.printStackTrace(); } } datagramSocket.close(); } } 具体实现:package com.network.chat; /** * @Author suaxi * @Date 2020/11/23 14:46 */ public class TalkStudent { public static void main(String[] args) { //开启两个线程 new Thread(new TalkSend(7777,"localhost",8888)).start(); new Thread(new TalkRecive(9999,"老师")).start(); } } package com.network.chat; /** * @Author suaxi * @Date 2020/11/23 14:48 */ public class TalkTeacher { public static void main(String[] args) { new Thread(new TalkSend(7778,"localhost",9999)).start(); new Thread(new TalkRecive(8888,"学生")).start(); } }
2020年11月23日
93 阅读
0 评论
0 点赞
2020-11-22
通信协议
网络通信协议:速率,传输码率,代码结构,传输控制……TCP/IP协议簇(实际上是一组协议)TCP:用户传输协议UDP:用户数据报协议TCP与UDP对比:TCP:连接、稳定三次握手,四次挥手最少需要三次,保证稳定链接 A:咋地! B:干啥? A:干一架 A:我要走了 B:你要走了吗 B:你真的要走了吗 A:走了客户端、服务端传输完成,释放连接。效率低UDP:不连接,不稳定客户端、服务端:没有明确的界限不管有没有准备好,都可以发给你DDOS(饱和攻击)TCP客户端:1、连接服务器socket2、发送消息package com.network.lesson02; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; /** * @Author suaxi * @Date 2020/11/20 17:37 * 客户端 */ public class TcpClientDemo01 { public static void main(String[] args) { Socket socket = null; OutputStream os = null; //1、要知道服务器的地址、端口号 try { InetAddress serverIp = InetAddress.getByName("127.0.0.1"); int port = 8888; //2、创建一个socke连接 socket = new Socket(serverIp, port); //3、发送消息、IO流 os = socket.getOutputStream(); os.write("故乡的樱花开了".getBytes()); } catch (Exception e) { e.printStackTrace(); }finally { if (os!=null){ try { os.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 服务器1、建立服务端口ServerSocket2、等待用户连接3、接收客户端发送的消息(管道流)package com.network.lesson02; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /** * @Author suaxi * @Date 2020/11/20 17:38 * 服务端 */ public class TcpServerDemo01 { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; InputStream is = null; ByteArrayOutputStream baos = null; try { //1、建立服务器地址 serverSocket = new ServerSocket(8888); while (true){ //2、等待客户端连接 socket = serverSocket.accept(); //3、读取客户端消息 is = socket.getInputStream(); //管道流 baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length=is.read(buffer))!=-1){ baos.write(buffer,0,length); } System.out.println(baos); } } catch (IOException e) { e.printStackTrace(); }finally { if (baos!=null){ try { baos.close(); } catch (IOException e) { e.printStackTrace(); } } if (is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (socket!=null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } if (serverSocket!=null){ try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 文件上传服务端package com.network.lesson02; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; /** * @Author suaxi * @Date 2020/11/22 11:26 * 文件上传服务端 */ public class TcpServerDemo02 { public static void main(String[] args) throws IOException { //1、创建服务 ServerSocket serverSocket = new ServerSocket(8889); //2、监听客户端的连接 Socket socket = serverSocket.accept();//阻塞式监听,会一直等待客户端连接 //3、获取输入流 InputStream is = socket.getInputStream(); //4、文件输出 FileOutputStream fileOutputStream = new FileOutputStream("recive.jpg"); byte[] bytes = new byte[1024]; int length; while ((length=is.read(bytes))!=-1){ fileOutputStream.write(bytes,0,length); } //通知客户端文件接收完毕 OutputStream os = socket.getOutputStream(); os.write("文件上传成功!".getBytes()); //5、关闭资源 fileOutputStream.close(); is.close(); socket.close(); serverSocket.close(); } } 客户端package com.network.lesson02; import java.io.*; import java.net.InetAddress; import java.net.Socket; /** * @Author suaxi * @Date 2020/11/22 11:26 * 文件上传客户端 */ public class TcpClientDemo02 { public static void main(String[] args) throws Exception { //1、创建一个socket连接 Socket socket = new Socket(InetAddress.getByName("127.0.0.1"),8889); //2、创建一个输出流 OutputStream os = socket.getOutputStream(); //3、读取文件 FileInputStream fileInputStream = new FileInputStream(new File("test.jpg")); //4、写出文件 byte[] bytes1 = new byte[1024]; int length1; while((length1=fileInputStream.read(bytes1))!=-1){ os.write(bytes1,0,length1); } //通知服务器已经上传完毕 socket.shutdownOutput(); //确定服务器接收完毕,才断开连接 InputStream inputStream = socket.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] bytes2 = new byte[1024]; int length2; while ((length2=inputStream.read(bytes2))!=-1){ baos.write(bytes2,0,length2); } System.out.println(baos.toString()); //5、关闭资源 baos.close(); inputStream.close(); fileInputStream.close(); os.close(); socket.close(); } }
2020年11月22日
211 阅读
0 评论
0 点赞
2020-11-20
端口
端口表示计算机上的一个程序进程不同的进程有不同的端口号,用来区分软件规定范围0~65535(TCP/UDP的规范是一样的)单个协议下端口号不能冲突端口分类:公有端口0~1023HTTP:80HTTPS:443FTP:21SSH:22Telent:23程序注册端口:1024~49151,分配给用户或者程序Tomacat:8080MySQL:3306Oracle:1521RDP:3389动态、私有:49152~65535netstat -ano #查看所有的端口 netstat -ano|findstr "5900" #查看指定的端口 tasklist|findstr "8696" #查看指定端口的进程package com.network.lesson01; import java.net.InetSocketAddress; /** * @Author suaxi * @Date 2020/11/20 17:21 */ public class TestInetSocketAddress { public static void main(String[] args) { InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080); System.out.println(inetSocketAddress); System.out.println(inetSocketAddress.getAddress()); System.out.println(inetSocketAddress.getHostName()); //地址 System.out.println(inetSocketAddress.getPort()); //端口 } }
2020年11月20日
157 阅读
0 评论
0 点赞
2020-11-20
IP
ip地址:InetAddress唯一定位一台网络上的计算机127.0.0.1:本机localhostip地址的分类ipv4/ipv6IPV4:4个字节组成,0~255,约42亿个IPV6:128位,8个无符号整数,例如240e:1234:abcd:0010:2b58:9900:add2:b156公网(互联网)--私网(局域网)ABCD段package com.network.lesson01; import java.net.InetAddress; import java.net.UnknownHostException; /** * @Author suaxi * @Date 2020/11/20 16:54 */ public class TestInetAddress { public static void main(String[] args) { try { //查询本机地址 InetAddress host1 = InetAddress.getByName("localhost"); System.out.println(host1); //查询网站ip地址 InetAddress host2 = InetAddress.getByName("www.baidu.com"); System.out.println(host2); //常用方法 System.out.println(host2.getAddress()); System.out.println(host2.getCanonicalHostName()); //规范的名字 System.out.println(host2.getHostAddress()); //ip System.out.println(host2.getHostName()); //域名或自己电脑的名字 } catch (UnknownHostException e) { e.printStackTrace(); } } }
2020年11月20日
76 阅读
0 评论
0 点赞
2020-11-20
面向对象小结
1、类与对象类是一个模板:抽象 对象是一个具体的实例2、方法定义 调用3、对应的引用引用类型:基本类型(8种)对象是通过引用来操作的:栈------>堆4、属性:字段Field 成员变量默认初始化: 数字: 0 0.0 char: u0000 boolean: false 引用: null修饰符 属性类型 属性名 = 属性值private String name = null;5、对象的创建和使用必须使用new关键字创建对象,构造器:Person person = new Person();对象的属性 person.name;对象的方法 person.sleep();6、类静态的属性 属性动态的行为 方法封装、继承、多态1、封装高内聚、低耦合高内聚:类的内部数据操作细节自己完成,不允许外部干涉低耦合:仅暴露少量的方法给外部使用封装(数据的隐藏)通常,应该禁止直接访问一个对象中数据的直接表示,而应通过操作接口来访问,这称为信息的隐藏1、提高程序的安全性2、隐藏代码的实现细节3、统一接口4、系统可维护性2、继承继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模JAVA类中只有单继承,没有多继承继承是类和类之间的一种关系,除此之外,还有依赖、组合、聚合等在继承关系中,一个为子类(派生类),一个为父类(基类),子类继承父类,使用关键字extends来表示子类和父类之间,从严格意义上来说应该具有 “is a” 的关系super注意点:1、super调用父类得构造方法,必须在构造方法的第一个2、super只能出现在子类的方法或构造方法中3、super和this不能同时调用构造方法与 this 的区别代表的对象不同this:本身调用者这个对象super:代表父类对象的引用前提this:没有继承也可以使用super:只能在继承条件下使用构造方法this():本类的构造super():父类的构造重写重写:需要有继承关系,子类重写父类的方法方法名必须相同参数列表必须相同修饰符:范围可以扩大,但不能缩小 public>protected>default>private抛出的异常:范围,可以被缩小,但不能扩大 ClassNotFoundException --> Exception(大)重写,子类的方法和父类必须要一致,方法体不同为什么需要重写?父类的功能,子类不一定需要,或者不一定满足3、多态同一方法可以根据发送对象的不同而采用多种不同的行为方式一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)多态注意事项:1、多态是方法的多态,和属性没有关系2、父类和子类有联系 类型转换异常 ClassCastException3、存在条件:继承关系,方法需要重写,父类引用指向子类 Father f = new Son();以下情况不能被重写static方法,属于类,不属于任何一个方法final 终类(不能被继承)private 方法(私有的)类型转换:1、父类引用指向子类2、子类 > 父类(向上转换)3、父类 > 子类(向下转换)需要强转4、方便方法的调用,减少重复的代码抽象类abstract可以用来修饰方法,也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法,修饰类时同理。抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。抽象类不能使用new关键字来创建对象,它是用来让子类继承的。子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。//1、不能new这个抽象类,只能靠子类去实现它:约束 //2、抽象类中可以写普通方法 //3、抽象方法必须在抽象类中 //抽象的抽象:约束接口接口的本质就是规范,定义的是一组规则,体现了现实世界中“如果你是......则必须能......”的思想。作用:1、约束2、定义一些方法,让不同的人实现3、public abstract4、public static final5、接口不能被实例化,接口中没有构造方法
2020年11月20日
166 阅读
0 评论
0 点赞
2020-11-19
Exception与Error
异常什么是异常(Exception)?指程序运行过程中出现的不期而至的各种状况,例如:找不到文件,网络连接失败,非法参数等1、检查性异常,用户错误或问题引起的异常2、运行时异常,与检查性异常相反,运行时异常可以在编译时被忽略3、错误(Error),错误不是异常,而是脱离程序员控制的问题在Exception分支中有一个重要的子类RuntimeException(运行时异常)ArrayIndexOutOfBoundsException 数组下标越界NullPointerException 空指针异常ArithException 算数异常MissingResourceException 丢失资源ClassNotFoundException 找不到类等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理这些异常一般是由程序逻辑错误引起的,应尽量避免package com.exception; /** * @Author suaxi * @Date 2020/11/19 16:16 */ public class Test { public static void main(String[] args) { int a = 1; int b = 0; try { // 监控区域 System.out.println(a/b); }catch (Error e){ //catch(想要捕获的异常类型) System.out.println("Error"); e.printStackTrace(); //打印错误的栈信息 }catch (Exception e){ System.out.println("Exception"); }catch (Throwable t){ System.out.println("Throwable"); }finally { System.out.println("finally"); } } public void a(){ b(); } public void b(){ a(); } } package com.exception; /** * @Author suaxi * @Date 2020/11/19 16:36 */ public class Test01 { public static void main(String[] args) { try { new Test01().test(1,0); } catch (ArithmeticException e) { e.printStackTrace(); } } public void test(int a,int b) throws ArithmeticException{ if (b==0){ throw new ArithmeticException(); //主动抛出异常 } } } ErrorError类对象由JAVA虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行所需的内存资源时,将出现OutOfMemoryError,这些错误出现时,JVM一般会选则线程终止还有发生在虚拟机试图执行应用时,如类定义错误(NoClassDefFoundError)、链接错误(LinkageError)。这些错误是不可检查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。Exception与Error的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,JVM一般会选择终止线程;Exception通常情况下是可以被程序处理的,在程序中应尽可能的去处理这些异常。
2020年11月19日
97 阅读
0 评论
0 点赞
1
...
5
6
7