java:获取异常的堆栈信息

做java开发的时候,经常会遇到代码抛异常后,需要把异常信息保存到数据库或者上传到云服务器做cache分析。这时候就需要获取异常的堆栈信息(详细错误信息)。有的人用e.getMessage()来获取异常信息,但是这样获取到的信息内容并不全,而且有时候为空。我们可以用下面方法来获取。 public static String getStackTrace(Throwable throwable)...
阅读(59) 评论(0)

wait()和sleep()的区别

线程在wait 后,可以被另一个拥有相同线程锁对象的线程通过调用notify方法唤醒,而 sleep不行。wait和notify能正常执行的条件是(否则会抛异常):多个线程的代码,都包在synchronized块中,并且synchronized锁的对象需要是同一个。简而言之,多线程。当线程调用了wait方法后,就会进入等待状态,需要另外一个持有同一个线程锁的线程通过notify通知强锁。如果有多个线...
阅读(45) 评论(0)

java填坑:三元操作符的类型不一致导致的问题

三元操作符是if-else的简化写法,我们在项目经常能用到他,但是有时候也容易出现问题,我们先看看下面这段代码: int i = 80; String str1 = String.valueOf(i < 100 ? 90 : 100); String str2 = String.valueOf(i < 100 ? 90 : 100.0); System.out.print...
阅读(54) 评论(0)

java:竟然有会生成固定文字“hello world”的随机数

下面代码随机生成的文字竟然是固定内容的”hello world”。System.out.println(randomString(-229985452) + " " + randomString(-147909649));public static String randomString(int i) { Random ran = new Random(i); StringBuilder...
阅读(31) 评论(0)

android:Unsupported major.minor version 52.0

错误描述使用android studio项目编译过程报如下错误:java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0错误原因Android Studio2.2必须使用JDK8及以上版本。解决方式将电脑jdk版本改为1.8即可。...
阅读(132) 评论(0)

vue: WebStorm设置快速编译运行

WebSorm是一款优秀的前端开发工具,而Vue项目可以使用Node进行编译运行,平常我们可以通过命令行部署项目进行调试。本文介绍设置Webstorm进行快速部署Vue项目。第一步点击启动快捷按钮旁边的向下小箭头,在列表中选择Edit选项:第二步打开启动设置页面后,点击左上角的加号添加新的运行方式:第三步在弹出的选择框中,选择node.js启动模式:第四步在新打开的设置页面中,在红色圈中的地方设置如...
阅读(105) 评论(0)

Vue.js更改调试地址端口号

Vue项目一般使用自带的脚手架工具vue-cli和webpack打包方式进行项目构建运行。开发中,我们在控制台输入命令行npm run dev部署项目后,默认开启的页面调试地址是8080端口。但是有时候我们在进行多个项目开发需要同时部署多个vue项目,甚至有的还需要启动后台项目,这时就需要修改Vue项目的启动端口(不然会报端口被占用的错误,一个端口号只能一个进程占用)。本文像大家讲解如何找到Vue项...
阅读(111) 评论(0)

数据库优化:表的优化

一个好的数据库设计方案对于数据库的性能往往会起到事半功倍的效果。需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的内容。1. 将字段很多的表分解成多个表(垂直分割)对于字段较多的表,如果有些字段的使用频率很低,则垂直分割该表,将原来的一个表分解为两个表。垂直分割遵循以下原则: 把不常用的字段单独放在同一个表中 把大字段独立放入一个表中 把经常使用的字段放在一同一个表中 2. 水平分...
阅读(50) 评论(0)

Java基础面试题 (一)

1、面向对象的三个特征封装,继承,多态。这个应该是人人皆知,有时候也会加上抽象。2、多态的好处允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用).主要有以下优点: 可替换性:多态对已存在代码具有可替换性 可扩充性:增加新的子类不影响已经存在的类结构 接口性:多态是超类通过方法签名,向子类提供 一个公共接口,由子类来完善或者重写它来实现的...
阅读(581) 评论(2)

Base64编码

Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用’=’,因此编码后输出的文本末尾可能会出现1或2个’=’。   为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。...
阅读(568) 评论(0)

Java property 的加载读取

方法一Properties properties = new Properties(); InputStream stream = PropertiesUtil.class.getClassLoader().getResourceAsStream("setting.properties"); properties.load(stream); 方法二public static URL get...
阅读(554) 评论(0)

类加载器:ClassLoader与Class的区别

1、类加载器java字节码(类)的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验、解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制。JVM中用来完成上述功能的具体实现就是类加载器,类加载器读取.class字节码文件将其转换成java.lang.Class类的一个实例。每个实例表示一个java类。通过该实例的newInstan...
阅读(1164) 评论(0)

自定义view:view的绘制流程

view的绘制流程当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw。...
阅读(1413) 评论(0)

android自定义view系列:认识activity结构

标签: android 自定义view activity开发中虽然我们调用Activity的setContentView(R.layout.activity_main)方法显示View视图,但是view的显示并不是由Activity来完成的,整个过程涉及到了Window、DecorView、ViewRoot。四者之间关系复杂,共同协作完成视图的显示以及与用户交互...
阅读(1448) 评论(0)

快速实现:删除和预览当前选择需要上传的图片

有时候我们在做文件上次时有这么一个需求: 可以预览以及删除当前选中的图片...
阅读(1124) 评论(0)
40条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:112313次
    • 积分:1574
    • 等级:
    • 排名:千里之外
    • 原创:39篇
    • 转载:1篇
    • 译文:0篇
    • 评论:20条