- 博客(21)
- 收藏
- 关注
原创 Java方法传值和传址分析
前段时间跟同学讨论了java中方法是传值还是传址的问题。 得出一个结论:java中一直是传值。 先看一段代码:public class Main{ public static void main(String[] args) { int i = 1; System.out.println(i); add(i); S
2016-04-26 17:10:54 841 2
原创 Android检测IBeacon热点
IBeacon是BLE的一种,搜索iBeacon基站关键在于设备扫描到的scanRecord数组,识别是否有下面加粗斜体的02 15这两个数字。如果有,搜索到的蓝牙设备就是IBeacon。 // AirLocate: // 02 01 1a 1a ff 4c 00 02 15 # Apple’s fixed iBeacon advertising prefix // e2 c5 6d b5
2016-03-06 16:31:18 1688
原创 Android中Server组件的简要启动过程
读书笔记,摘自《Android系统源代码情景分析》。自己将书中文字的意思画成了示意图,觉得更好理解,不过如果哪里画的不对,请大家指正。只是宏观上的示意图,并没有深入源代码。 Server组件有两种启动模式,一种是在新进程中启动,一种是在进程内启动。 下面看在新进程中启动: 下面是在进程内启动:
2016-03-05 10:43:19 384
原创 Android中Activity的简要启动过程
这是一篇读书笔记,内容全部来自于老罗的《Android系统源代码情景分析》。只是将书中的内容从文字版变成了图片版本。本文并没有深入分析整个过程的代码,只是从宏观的角度画出了大致的过程。 Activity的启动情况分为两种,一种是根Activity的启动,就是一开始从桌面程序Launcher启动应用的情况。另一种是子Activity的启动,就是在应用程序中新建一个Activity的过程。 下面先看
2016-03-03 20:41:53 331
原创 activity,Fragment,Service的生命周期图
摘自谷歌官网,为了以后方便查看,放到博客里面。 首先是Activity的生命周期。 下面是Fragment的生命周期图。 Service的生命周期图:
2016-03-03 17:03:47 437
原创 java对象实例化过程分析
我们平时经常随手就new一个对象出来,但是找对象真的这么简单吗?看看下面的分析~ 首先看一下类的生命周期 图中从1到3的过程统称为连接,而1-5这5个过程合起来称为类加载。在一个对象可以使用之前,需要经过类加载和实例化,也就是我们今天的主题“new一个java对象的过程”。那虚拟机在什么时机进行类加载呢?Java 虚拟机规范并没有对其做严格的定义,不同的JVM有不同的实现。而初始化的时机JV
2016-02-29 00:23:17 1710
原创 java动态代理学习
有一个类A,我们不想直接调用A的方法,而想要通过类B来间接调用A的方法。这时候A就叫做被代理类或者委托类(委托了任务的类),而B叫做代理类。 看下面的代码public class A{ public void method1() { System.out.println("A类的method1执行"); }}public class B{ A
2016-02-20 23:31:26 298
原创 java自定义注解学习
很多的类库和框架都用到了java的Annotation(注解),所以今天来学习一下怎么自定义注解。 一、Annotation的分类 1、标准注解:@Override, @Deprecated, @SuppressWarnings,这是java自带的注解 2、元注解:@Retention, @Target, @Inherited, @Documented,这是用来定义注解的注解 3、自定义注解
2016-02-20 22:19:46 279
原创 java反射学习
java反射可以让我们在运行时获得一个类的属性,方法等一系列信息。而Class类是用来描述一个类的详细信息的类。 每一个类都有一个对应的.class字节码文件。当程序运行时,java虚拟机会将这个.class文件加载,然后在堆上创建一个Class对象。而当我们new一个新的对象的时候,虚拟机就是用这个Class对象来新建一个对象,只是过程对于用户是透明的。 所以反射的第一步,就是要获取到这个Cl
2016-02-20 17:39:54 554
原创 java实现二分检索树
二分检索树的左子树比根小,右子树比根大。这里用二分检索树实现了一个符号表,包括常用的api。package symbolForm;import simpleStructure.Queue;public class BST<K extends Comparable<K>, V> implements SymbolForm<K, V>{ private Node root; privat
2016-02-19 20:48:29 397
原创 用递归实现排列组合(java代码)
全排列递归算法思想:假设求abcdefg的全排列,先将第一个字母确定为a,然后求bcdefg的全排列就行了,然后将a与b交换位置,重复上述过程,直到a和g交换。 全组合递归算法思想:假设求abcdefg的全组合,分两种情况,一、将a放入组合中,再求出剩下的bcdefg的组合。二、不将a放入组合,求出剩下的bcdefg的组合。 下面看代码:package practise;public class
2016-02-19 18:00:08 4602
原创 android后台任务(三):Loader
Loader也是android运行后台任务的方法之一,并且是谷歌推荐的,可以使用CursorLoader,也可以自定义Loader来实现异步任务,下面是使用方法。 一、编写一个自定义Loader继承自AsyncTaskLoader //我是在Activity内部编写,所以是静态内部类 private static class MyLoader extends android.supp
2016-02-18 19:07:17 642
原创 android后台任务(二):IntentService
大多数情况下,IntentService是简单后台任务的理想选择,Asynctask使用容易出现内存泄漏。 首先,新建一个IntentService的类:package com.example.asus.practise;public class MyIntentService extends IntentService{ //固定写法 public MyIntentServi
2016-02-17 21:41:19 367
原创 android后台任务(一):Handler
一般网络请求,I/O操作这样费时的网络请求需要在工作线程进行而不是在UI主线程,不然会造成UI的卡顿。但是android不能在非UI线程更新UI,所以我们一般使用Handler来处理这些操作结果的回调显示。 先看看一般的简洁使用,这里直接post一个runnable,而不使用handleMessage,更加简洁。package com.example.asus.practise;public cl
2016-02-17 20:38:39 535
原创 java单例模式的5种实现
下面的单例实现都是线程安全的。 一、package practise;public class Singleton1{ public static final Singleton1 INSTANCE = new Singleton1(); private Singleton1(){}}这是比较简单的单例模式,在类加载初始化的时候就实例化INSTANCE,所以可能在没有使用IN
2016-02-17 16:01:12 354
原创 java实现无向图的深度优先搜索和广度优先搜索
先实现无向图的数据结构。package graph;import simpleStructure.Bag;/** * 用邻接表做的图 * 用了一个Bag数组,数组的索引是顶点,索引的内容Bag里面存放与该顶点相邻的顶点 * @author Administrator * */public class Graph implements GraphItf{ private Bag
2016-02-16 19:32:03 1239 1
原创 用NFA实现正则表达式匹配(java代码)
看了一些高评论的博客,看起来都是很高深,我也写个看起来高深的。 用NFA实现正则表达式匹配,需要的类,有向图和有向图的深度遍历。下面NFA的实现。package stringFind;import digraph.Digraph;import digraph.DirectDFS;import simpleStructure.Bag;import simpleStructure.Stack2;
2016-02-16 14:52:11 1537
原创 堆排序的java实现
堆排序是用大顶堆或者小顶堆的性质来实现排序。 先解释一下优先队列,优先队列就是从这个队列里面出来的数字总是这个队列里面数字最大或者最小的那一个,而堆就是一个优先队列的具体实现,大顶堆是一个完全二叉树,父节点大于等于子节点,所以他的顶(根)是最大的,小顶堆反之。 所以我们先实现一个大顶堆。package sort;/** * 使用二叉堆的优先队列,每个节点大于等于两个子节点 * 并且是完全二叉
2016-02-16 14:34:37 236
原创 归并排序的java实现
归并排序的思想是,要是一个数组中的数字是两串已经排好序的,那把这两串儿数字并成一串数字,那这个数组就排好序了,所以又要先排好左右两边的子数组,这是一个明显的递归,直接看代码。AbstractSort在我的另一篇快排实现中有。package sort;public class MergeSort extends AbstractSort{ Comparable[] aux; @Over
2016-02-16 14:18:14 357
原创 快速排序的java实现
排序中快速排序和归并排序的平均时间复杂度的nlogn,所以是比较常用的两种排序。 快速排序的主要思想是递归的“切分”一串儿数字,切分就是选取一个数组中的数字,把数组中比这个数字小的放左边,大的放右边,这就完成了一次切分。然后再将切分点左边的和右边的子数组切分,如此反复,直到要切分的数组长度为1,整个数组就排好序了。 看代码。 先写个AbstractSort,实现一些基本通用的功能,在归并排序中
2016-02-16 14:00:39 327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人