
java
RickyXE
这个作者很懒,什么都没留下…
展开
-
JNI学习:在Java中保存Native对象引用
在学习Android Framework源码时,发现部分类中声明了这个变量:private int mPtr; // used by native code那么native层是怎么使用这个变量的呢?以Framework中的MessageQueue为例,它的Native模块源码为/frameworks/base/core/jni/android_os_MessageQueue.cpp查看其中的代码,可以发现这几个调用:// Java 层的MessageQueue构造函数中,会调用Native中的这原创 2020-05-29 15:51:47 · 1331 阅读 · 0 评论 -
JNI入门教程:最小环境HelloWorld实战
JNI是Android应用开发中不太常涉及的技术,但在Framework层中却被广泛使用。作为一名Android应用开发人员,学习JNI知识,对理解整个系统原理还是有很大帮助的。学习JNI有很多途径:可以直接阅读Framework源码。这种方案不太好上手验证,因为Framework代码要配置的编译环境还是比较复杂的,而且编译后没法直接运行测试,需要Root系统其次也可以下载安装NDK,直接在Android Studio里开发项目。这种方式也有比较多的环境配置工作,并且操作起来比较麻烦。因此这篇文原创 2020-05-26 17:54:45 · 536 阅读 · 0 评论 -
在Idea Community版中远程调试Tomcat Web工程
最近将开发的项目从Eclipse迁移到了IDEA社区版,虽然写代码爽快不少,但还是缺少一些Eclipse中的常用功能。因此考虑将两者结合起来使用:通过IDEA开发项目代码利用Eclipse中的Server插件部署Tomcat,开启远程调试通过IDEA连接调试端口,进行远程调试网上大部分有关Tomcat远程调试的文章,都是修改Tomcat启动文件。这个改动在Eclipse中也可以很方便的...原创 2019-05-30 17:32:41 · 1654 阅读 · 0 评论 -
Java中的动态代理
在实际的项目开发中,会大量的用到代理模式。这一设计模式又与面向切面编程(AOP)紧密相关。 Java中可以通过静态代理或动态代理两种方式实现代理模式。其中静态代理容易理解,但由于需要编写大量代理类及代理方法代码,非常不利于维护;而动态代理的代理类在运行时生成,也不用编写大量重复性代码,相比静态代理有很大的优势。动态代理涉及一个重要的接口InvocationHandler以及一个重要的类Proxy,原创 2017-05-03 19:05:53 · 552 阅读 · 0 评论 -
将异步API改成同步调用
有时候为了满足需求,我们需要在自己的类中进行线程管理/开启线程,并回调我们自己封装好的回调方法。例如:public void someTask() { new Thread() { @Override public void run() { int n = yourObject.someApi(); onGetR原创 2017-01-16 01:02:13 · 8172 阅读 · 0 评论 -
Java线程中的wait(),notify()与sleep()
在Java中可以通过wait()与notify()或notifyAll()实现线程协作。简要总结有如下几点: 1.wait()让线程进入等待状态,并释放锁(而sleep等待的同时并不释放锁) 2.notify()通知wait的线程尝试获取对象锁,在此线程任务执行完后,wait的线程就会重新获得锁,继续运行。 3.wait与notify均是Object的方法,调用这两个方法需要在synchron原创 2016-09-28 00:33:08 · 727 阅读 · 0 评论 -
Java中的ReentrantLock
Java中的ReentrantLock基本功能与synchronized代码块相当,但是提供了一些高级特性。首先来看一下ReentrantLock的基本使用:public class LockTest { ReentrantLock mLock = new ReentrantLock(); int num = 0; Runnable mRunnableOne = new Runna原创 2016-10-05 18:50:38 · 458 阅读 · 0 评论 -
二分查找
public class BinarySearch { // 二分查找的前提是所查找的数组已经有序。在查找过程中, // 每次取出中间的元素,与目标数值比较,若相等则直接返回; // 若不等,则根据排序规则在一侧中继续查找,直到这一侧元素仅剩一个时, // 若与目标元素相等,则直接返回;否则表明数组中没有待查找元素。 public static int bina原创 2016-10-13 00:25:25 · 518 阅读 · 0 评论 -
冒泡排序
冒泡排序的思路很简单——从头至尾遍历数组元素,若前一项大于(或小于)后一项,则交换相邻两项。单次遍历整个数组可将某一个元素排列到正确位置,因此需要遍历元素数量n次。在代码中体现也就是内外两层循环,内层循环负责遍历中两两元素的交换操作,外层负责遍历次数控制。首先看版本1:/** * 冒泡排序效率最低写法,没有任何优化步骤 * @param arrayToSort */public static原创 2016-07-17 16:10:38 · 385 阅读 · 0 评论 -
快速排序
快速排序的思路是选定一个标志元素,将比这个元素小的所有元素放在一边,比其大的放在另外一边。然后发分别对两个子数组进行同样的操作,直到子数组元素数为1时,整体数组就排好序了。原创 2016-08-04 00:22:58 · 299 阅读 · 0 评论 -
归并排序
归并排序的步骤就是分组->合并,这两步均是递归进行,直到所操作的子组仅有一个元素为止。例如一个数组:6, 3, 1, 9, 2, 7, 4, 5首先分成两组:[6, 3, 1, 9] [2, 7, 4, 5]对于左边,再次分组:[6, 3] [1, 9]再对左边分组:[6] [3]因为各自仅包含一个元素了,这一个元素组成的字数组就是有序的了。接下来向上递归合并:[6] [3] -> [3, 6][原创 2016-08-06 14:31:00 · 440 阅读 · 0 评论 -
Java中实现自定义的注解处理器(Annotation Processor)
在之前的《简单实现ButterKnife的注解功能》中,使用了运行时的注解实现了通过编写注解绑定View与xml。由于运行时注解需要在Activity初始化中进行绑定操作,调用了大量反射相关代码,在界面复杂的情况下,使用这种方法就会严重影响Activity初始化效率。而ButterKnife使用了更高效的方式——Annotation Processor来完成这一工作。Annotation Pr原创 2016-07-25 19:42:49 · 21899 阅读 · 6 评论 -
Java中使用正则表达式
在Java中使用正则表达式非常方便,使用 Pattern与Matcher两个类就可以满足需求。Pattern 用来存储所使用的正则表达式Matcher 用来对目标字符串执行正则表达式的匹配例如,我们有一个字符串: “In winter the nights are long and cold.”现在我们想要匹配”long and cold”:String testString = "I原创 2015-11-26 16:17:05 · 599 阅读 · 0 评论 -
Java中的枚举与values()方法
Java枚举中的values()方法在编写Java程序时经常会用到枚举类型,今天我们就来看一下枚举中常用到的values()方法。首先,我们在Eclipse中编写一个简单的类:public class EnumTest { private enum Directions { NORTH, SOUTH, EAST, WEST }}在这里,我们定义原创 2015-09-24 11:10:47 · 39805 阅读 · 10 评论