10月 102017
 

本来以为这样的回形是有规律可循的,但是找了好长时间没找到,看来只能用遍历了。

x,y的使用有些乱,读者自己理一下吧

结果展示:

 

 Posted by on 2017-10-10
3月 202017
 

一、jni背景知识

  jni是Java Native Interface的缩写,jni并不是Android开发的特性,而是在java的早期版本中就已经支持了,用于java层和Native层进行通讯的中间桥梁,大部分情况下使用c和c++进行编写,也可以使用其他的语言编写,只要满足约定的接口就可以。

二、Jni的副作用

  Jni有以下副作用:

1、不再具有跨平台可移植性,如果移植到其他平台,需要开发Native层的相关代码

2、Native层的程序如果有问题将会导致java层的程序崩溃

三、开发步骤简述(Ubuntu 16 + openjdk-8-jdk)

  1、在java代码中定义Native函数,比如java文件名为JniTest.java

  2、使用javac编译java文件,javac JniTest.java

  3、使用javah工具传入java类名,生成native层的头文件,javah JniTest,此时目录下会有一个JniTest.h

  4、新建一个JniTest.cc的文件,并添加如下内容:

  5、将navtive层的代码编译成so库,命令如下:

  6、在java层使用System.loadLibrary(“jnitest”);加载动态库,并调用函数,见第1中的java代码

 

参考链接:

https://baike.baidu.com/item/JNI/9412164?fr=aladdin

 

 Posted by on 2017-03-20
8月 292016
 

直接上代码

Calendar calendar = Calendar.getInstance();

//显示当前时间
System.out.println(calendar.getTime());

//各种日期格式化
SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);

String str = format.format(calendar.getTime());
System.out.println(str);

format = new SimpleDateFormat(“yyyyMMdd”);
str = format.format(calendar.getTime());
System.out.println(str);

format = new SimpleDateFormat(“yyyy/MM/dd”);
str = format.format(calendar.getTime());
System.out.println(str);

format = new SimpleDateFormat(“yyyy/M/d”);
str = format.format(calendar.getTime());
System.out.println(str);

//获取时间戳
str = String.valueOf(calendar.getTimeInMillis());
System.out.println(“时间戳: ” + str);

//减去一天
calendar.add(Calendar.DAY_OF_YEAR, -1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//减去一个月
calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//减去一年
calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, -1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//只获取日期,不包含时间
calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//获取本月的第一天
calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

//时间戳字符串转日期时间
calendar = Calendar.getInstance();
str = String.valueOf((calendar.getTimeInMillis() – 60 * 1000) ); //减去一分钟
calendar.setTimeInMillis(Long.parseLong(str));
format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);
str = format.format(calendar.getTime());
System.out.println(str);

 Posted by on 2016-08-29

当continue遇上finally

 分类:Java, Java语言 阅读 (1,488)  当continue遇上finally已关闭评论
6月 292016
 

当continue遇上finally,continue执行后仍会执行finally中的代码,如下代码:

运行输出结果:

 

 Posted by on 2016-06-29

Java位操作优先级问题一例记录

 分类:Android, Java, Java语言 阅读 (862)  Java位操作优先级问题一例记录已关闭评论
6月 262016
 

今天在对数据进行位操作和加操作混合运算的时候,发现得到的结果不对

int result = src << 4 + 10;

后来发现加法操作符的优先级要高于位操作,所以造成此问题。

附Java操作符的优先级表如下:

 Posted by on 2016-06-26
6月 202016
 

一共有三种方法可以实现StringBuilder的清空

  1. New一个新的StringBuilder
  2. 使用StringBuilder的delete方法
  3. 使用StringBuilder的setLength方法

下面通过代码验证三种方法的效率

测试了十几次,选了一次比较有代表性的结果:

由结果可见setLength是最快的,delete不相上下,new是最慢的

 Posted by on 2016-06-20
3月 152016
 

1. 使用enum类型:

  在Java中有 enum类型可以用于枚举,但是每个enum的类型都是做为一个类来处理,对于要求效率较高的程序不是一个很好的选择,android官方也不推荐在应用开发中使用此类型。

2. 定义整形常量

  就是定义static final的整形值,这样虽然效率高,但是不方便查看代码和进行方法参数的描述,如下面的代码虽然加了注释,但是如果常量很多,还是无法轻松定位到想要查看的常量,有多个名称相似的常量时还容易混淆,甚至使用了错误的常量。

  如下是常量做为方法的参数时的描述

3. 在一个类中定义静态常量

  将常量定义到一个类中,容易限制这些常量的范围,便于查看,而且在使用常量方法的方法描述里易于写注释,如下是常量的定义

  而在方法描述中,只链接到Const.NoteType即可

 

6月 202015
 

注意:在Java8中默认使用StringBuilder进行字符串进行拼接

下面代码对字符串进行10000次加号连接和StringBuilder连接操作:

最后得到的结果如下:

由此可见效率差了80倍

注意:

  1. StringBuffer为线程安全的字符串操作类,由于需要处理多线程同步问题,效率比StringBuilder要低
 Posted by on 2015-06-20
4月 112015
 

今天看java的垃圾回收,突然想到java的垃圾回收和排档(或者食堂)的餐盘回收有点类似。

食堂的餐盘回收一般会有以下几种方式:一是用餐者自行将餐盘放回回收处,二是食堂有专门的服务员来回收餐盘。

java的垃圾回收机制和第二种很相似,有垃圾回收器这个“服务员”来回收程序运行中产生的不再使用的对象。

服务员会定时的检查放在餐桌上的盘子,看是否还有人在使用,如果没人使用就会进行回收

 Posted by on 2015-04-11