首页 文章 精选 留言 我的

精选列表

搜索[文档处理],共10000篇文章
优秀的个人博客,低调大师

Java 异常处理 之 finally关键字

http://www.verejava.com/?id=16992983599280 package com.exception; public class TestException3 { public static void main(String[] args) { Caculator c = new Caculator(); //java.lang.ArithmeticException 数学算法异常 c.div(10, 2); System.out.println("div 执行完了"); } } class Caculator { //两个数相除 public int div(int a, int b) { int result = 0;//局部变量需要给初始值 try { //在 try catch 定义的局部变量 不能其外部访问 //当try 里面发生异常的时候 其后面的代码 ,终止执行,直接调到 catch 执行 result = a / b; System.out.println("aaaaaaa"); return result; } catch (Exception e) { System.out.println("除数不能为0"); } finally //构造函数是初始化, finally 最后释放自由 { System.out.println("bbbbbbbbbbbb"); } System.out.println("result 返回"); return 0; } } http://www.verejava.com/?id=16992983599280

优秀的个人博客,低调大师

Android中的异步处理技术之HandlerThread

目录 前言 众所周知如果想要在Android中执行耗时操作需要新建一个线程然后在该线程中实现,但是如果出现一种需要我们频繁进行耗时操作的业务,那我们再频繁的创建线程无疑会使性能降低,而Android SDK为我们提供了一个循环线程的框架刚好可以帮助我们解决这个问题,它就是HandlerThread。 原理 HandlerThread继承了Thread,集成了Looper和MessageQueue,在内部实现了一个消息队列,队列中的消息是顺序执行的因此线程是安全的,HandlerThread内部机制确保了在创建Looper和发送消息之间不存在竞态条件,这个是通过HandlerThread.getLooper()实现为一个阻塞操作实现的,只有当HandlerThread准备好接收消息消息之后才会返回。 public class HandlerThread extends Thread { int mPriority; int mTid = -1; Looper mLooper; public HandlerThread(String name) { super(name); mPriority = Process.THREAD_PRIORITY_DEFAULT; } /** * Constructs a HandlerThread. * @param name * @param priority The priority to run the thread at. The value supplied must be from * {@link android.os.Process} and not from java.lang.Thread. */ public HandlerThread(String name, int priority) { super(name); mPriority = priority; } /** * Call back method that can be explicitly overridden if needed to execute some * setup before Looper loops. */ protected void onLooperPrepared() { } @Override public void run() { mTid = Process.myTid(); Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } Process.setThreadPriority(mPriority); onLooperPrepared(); Looper.loop(); mTid = -1; } public Looper getLooper() { if (!isAlive()) { return null; } // 如果线程已经启动那么在Looper准备好之前应该等待 synchronized (this) { while (isAlive() && mLooper == null) { try { wait(); } catch (InterruptedException e) { } } } return mLooper; } public boolean quit() { Looper looper = getLooper(); if (looper != null) { looper.quit(); return true; } return false; } public boolean quitSafely() { Looper looper = getLooper(); if (looper != null) { looper.quitSafely(); return true; } return false; } /** * Returns the identifier of this thread. See Process.myTid(). */ public int getThreadId() { return mTid; } } 实现 对外开放Handler实例 public class MainActivity extends AppCompatActivity { private HandlerThread mHandlerThread; private Handler mBgHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initHandler(); } private void initHandler() { mHandlerThread=new HandlerThread("myHandlerThread"); mHandlerThread.start(); mBgHandler=new Handler(mHandlerThread.getLooper(), new Handler.Callback() { @Override public boolean handleMessage(Message message) { switch (message.what){ case 0: // 执行操作 break; } return false; } }); } @Override protected void onDestroy() { super.onDestroy(); mHandlerThread.quit(); } } 对外隐藏Handler(需要继承HandlerThread并在onLooperPrepared方法中对Handler进行实例化) public class MyHandlerThread extends HandlerThread { private Handler mHandler; public MyHandlerThread(String name) { super(name); } @Override protected void onLooperPrepared() { super.onLooperPrepared(); mHandler=new Handler(getLooper(), new Handler.Callback() { @Override public boolean handleMessage(Message message) { switch (message.what){ case 1: Log.e("测试","executeOne"+currentThread().getName()); break; case 2: Log.e("测试","executeTwo"+currentThread().getName()); break; } return false; } }); } public void executeOne(){ mHandler.sendEmptyMessage(1); } public void executeTwo(){ mHandler.sendEmptyMessage(2); } } Activity中调用 public class MainActivity extends AppCompatActivity { private TextView tvMainactivityTest; private MyHandlerThread myHandlerThread; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvMainactivityTest = (TextView) findViewById(R.id.tv_mainactivity_test); initHandler(); } private void initListener() { tvMainactivityTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { myHandlerThread.executeOne(); } }); } private void initHandler() { myHandlerThread=new MyHandlerThread("workThread"); myHandlerThread.start(); } } 个人技术博客https://myml666.github.io/

优秀的个人博客,低调大师

Java 异常处理 之 编译期的异常

http://www.verejava.com/?id=16992977771679 package com.exception; public class TestException2 { public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.println(i); //程序 休眠 1 秒钟=1000 毫秒 //编译期的异常, 编译期的异常,是我们必须捕获 必须要放在 try{}catch{} try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } http://www.verejava.com/?id=16992977771679

优秀的个人博客,低调大师

一窥 ARM 的 AI 处理

最近,ARM 进一步公开了 ML Procesor 的一些信息。EETimes 的文章 “Arm Gives Glimpse of AI Core”[1] 和 AnandTech 的文章“ARM Details “Project Trillium” Machine Learning Processor Architecture” 分别从不同角度进行了介绍,值得我们仔细分析。 ARM 公开它的 ML Processor 是在今年春节前夕,当时公布的信息不多,我也简单做了点分析(AI 芯片开年)。 这次 ARM 公开了更多信息,我们一起来看看。首先是关键的 Feature 和一些重要信息,2018 年中会 Release。 顶层架构 与最初公布的基本框图相比,我们这次看到了更细化的模块框图和连接关系,如下图所示。 MLP 的顶层对外来看是个比较

优秀的个人博客,低调大师

java学习笔记--io流的异常处理

public static void main(String[] args) { // readTest(); copyImage(); } // 拷贝图片 public static void copyImage() { FileInputStream fileInputStream = null; FileOutputStream fileOutputStream = null; try { // 找到目标文件 File inFile = new File("F:\\美女\\1.jpg"); File outFile = new File("E:\\1.jpg"); // 建立输入输出通道 fileInputStream = new FileInputStream(inFile); fileOutputStream = new FileOutputStream(outFile); // 建立缓冲数组,边读边写 byte[] buf = new byte[1024]; int length = 0; while ((length = fileInputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, length); } } catch (IOException e) { System.out.println("拷贝图片出错..."); throw new RuntimeException(e);//读取的错误 } finally { // 关闭资源 try { if (fileOutputStream != null) { fileOutputStream.close(); System.out.println("关闭输出流对象成功..."); } } catch (IOException e) {//关闭的错误 System.out.println("关闭输出流资源失败..."); throw new RuntimeException(e); } finally { if (fileInputStream != null) { try { fileInputStream.close(); System.out.println("关闭输入流对象成功..."); } catch (IOException e) { System.out.println("关闭输入流对象失败..."); throw new RuntimeException(e); } } } } } 总结:io流抛出异常的位置有两个 1. 打开的文件的时候 文件损坏或者硬盘损坏等 主要是 抛出包装后的错误信息RuntimeException(e) 2. 流关闭放在finally中 但是关闭流的时候也会发生错误 3. 如果io流抛出异常 就无法执行接下里的任务 所以我们要try{} catch(){}finally{}

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册