当前位置:  编程技术>移动开发
本页文章导读:
    ▪简略介绍Java的不定长度参数        简单介绍Java的不定长度参数 本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站先看两个简单的例子,来感受一下Java的不定长度参数第.........
    ▪ 手机软件自动封装处理过程(一)工具篇        手机软件自动打包处理过程(一)工具篇 今天做了一个小项目:手机软件自打包.流程:发布一个服务,用户输入基本信息后,将信息写入手机安装程序原型中,然后调用工具,自动打包供用户下载安.........
    ▪ 开发wap项目漫笔       开发wap项目随笔 很久没有开发wap项目了,上一次开发wap项目还是03年非典的时候,开发的一款社区游戏。最近由于项目需要,临时又客串了一次waper,虽然开发周期很短,不到二周,但是.........

[1]简略介绍Java的不定长度参数
    来源: 互联网  发布时间: 2014-02-18
简单介绍Java的不定长度参数
本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站

先看两个简单的例子,来感受一下Java的不定长度参数
第一个例子:
public class VariArgs {

	public static void main(String[] args) {
		test();
		test("aaa");
		test("aaa", "bbb");
		test("aaa", "bbb", "ccc");
	}

	public static void test(String... args) {
		System.out.println(args.getClass());
		for (String arg : args) {
			System.out.println(arg);
		}
	}
}

第二个例子:
public class VariArgs {

	public static void main(String[] args) {
		test("aaa");
		test("aaa", "bbb");
		test("aaa", "bbb", "ccc");
	}

	public static void test(String arg, String... args) {
		System.out.println(arg);
		System.out.println("----------------");
		for (String s : args) {
			System.out.println(s);
		}
	}
}

   读者可以自己运行一下,这个不定长度参数的类型为String[],即字符串数组。
从上面可以看出,如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行。
    不过,不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。
    对于第一个规定,是因为如果有多于一个不定长度的参数,当真正调用这个方法的时候,JVM、将不知道前面的不定长度参数有多长, 下一个参数是从哪里开始.
    对于第二个参数也是一样,编译器不知道不定长度参数的长度,无法确定从哪里开始下一个参数。
    以下是几种不正确使用不定长度参数的例子,请不要这样写程序:
public static void test(Object... objs, Object obj);

public static void test(Object obj1, Object... objs, Object obj2);

public static void test(Object... objs1, Object... objs2);

   不定参数的方法可以重载。(大家都知道,重载就是方法名相同,而方法的参数列表不同)
   下面给出重载的示例:
public class VariArgs {

	public static void main(String[] args) {
		test("aaa");
		test("aaa", "bbb");
		test("aaa", "bbb", "ccc");
	}

	public static void test(Object... args) {
	}

	public static void test(String arg, String... args) {
	}
}

   读者如果细心的话,可以看出文章开头给出的两个例子的区别,就是第二个例子比第一个例子的test方法的参数多出了一个String arg,从感觉上没有太大的区别,这有点像编译原理的*和+的区别。第一个test方法指可以有0或N个String做参数,但第二个test方法指至少一个String做为参数。
   然后结合重载来看,把第一个例子和第二个例子合并成一个类,得到以下代码:
public class VariArgs {

	public static void main(String[] args) {
		test();
		test("aaa");
		test("aaa", "bbb");
		test("aaa", "bbb", "ccc");
	}

	public static void test(String... args) {
		System.out.println(args.getClass());
		for (String arg : args) {
			System.out.println(arg);
		}
	}

	public static void test(String arg, String... args) {
		System.out.println(arg);
		System.out.println("----------------");
		for (String s : args) {
			System.out.println(s);
		}
	}
}

    读者可以编译下这个程序,结果是编译不通过。为什么呢?程序编译到第五行时,不能确定test("aaa")该用第10行的test方法还是第17行的方法,因为两个方法都可以有相同的参数列表。都能精确匹配上参数列表,编译器在这种情况下只好报出编译不能通过的错误。所以在重载这样的方法时,注意参数列表,不要使两个方法可以有同样的参数列表。
1 楼 idealab 2009-04-22  
长见识了@!
2 楼 ajie1986 2009-07-14  
受教了。今天在自己的工程里头一次看到不定参数,感觉自己真是孤陋寡闻啊……

    
[2] 手机软件自动封装处理过程(一)工具篇
    来源: 互联网  发布时间: 2014-02-18
手机软件自动打包处理过程(一)工具篇
今天做了一个小项目:手机软件自打包.流程:发布一个服务,用户输入基本信息后,将信息写入手机安装程序原型中,然后调用工具,自动打包供用户下载安装使用.
(一)工具篇
我们平时常见到的手机软件安装平台,symbian,windows mobile和j2me
symbian下就是调用makesis.exe工具
windows mobile下就是调用Cabwiz.exe工具
j2me,原始的java.util.zip处理.
今天时间问题,随后再详细介绍.


    
[3] 开发wap项目漫笔
    来源: 互联网  发布时间: 2014-02-18
开发wap项目随笔
很久没有开发wap项目了,上一次开发wap项目还是03年非典的时候,开发的一款社区游戏。最近由于项目需要,临时又客串了一次waper,虽然开发周期很短,不到二周,但是还是学到了一些东西。
1.项目在开发中并没有遇到太多困难,但是测试的时候,由于多普达(dopod)c730的不兼容性,首页访问时就报错,曾一度无计可施。最后发现是空格的问题,根据空中网资深waper的说法,只要在一开始页头没有空格,制表符等字符,任何机型应该都可以正确显示,修改之,发现完全正确。
下面是页头的正确显示,在开发时使用了一个header.jsp页面,每个页面都需要引用它,header.jsp的页头大致显示如下:
<%@ page language="java" contentType="text/vnd.wap.wml;charset=UTF-8"%><?xml version="1.0" encoding="UTF-8"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<%@page import = "java.util.Date,
 java.text.SimpleDateFormat,
   java.util.Enumeration,
   java.util.regex.Matcher,
 java.util.regex.Pattern,
   org.apache.log4j.Logger,   
   org.springframework.web.context.support.WebApplicationContextUtils" %>
<%!
 final static Logger logger = Logger.getLogger("web");
... ...

注意第一行,在<%@ page的语句引用之后,<?xml... 要紧跟其后,否则这里会有一个空格,郁闷,就这小问题一整天才解决。
但是多普达的机器还是需要先登录移动梦网,貌似是需要先配置物理层和链路层等,取得相关参数,才可以由梦网进入wap社区页面。
无论如何,总算搞定了这款难缠的机型。

2.诺大的公司,竟然无人给提供一个过滤字符和内容的模块,只好自己临时开发了一些通用方法,个人觉得以后也有用,贴在下面:
 /**
  * 此方法过滤字符串中的引用图片的标签<img
  * 代之以[图片不能显示]
  */
 String flushImg(String sourceStr){
  if(sourceStr == null || "".equals(sourceStr.trim())){
   return null;
  }
  
  sourceStr = sourceStr.toLowerCase();
  if(sourceStr.indexOf("<img") == -1){
   return sourceStr;
  }
  
  String res = "";
  
  int prefix = -1;
  while((prefix = sourceStr.indexOf("<img")) != -1){    
   String tempStr = sourceStr.substring(prefix);
   sourceStr = sourceStr.substring(0,prefix);

   int suffix = tempStr.indexOf(">");
   if(suffix != -1){
    sourceStr = sourceStr.concat("[图片不能显示]");
    tempStr = tempStr.substring(suffix+1);
    sourceStr = sourceStr.concat(tempStr);
     
    res = sourceStr;
   }   
  }
  
  return res;  
 }
 
 /**
  * 过滤字符串中的html标签,在网上查了半天正则,最后还是自己修改出来了    
  * 一个基本没有bug的正则,今后大家google不用担心了,呵呵
  */
    String filterHtml(String str) {
     if(str == null || "".equals(str)){
      return "";
     }
     
     String regxpForHtml = "<([a-zA-Z/])([^>]*)>";  
     Pattern pattern = Pattern.compile(regxpForHtml);  
     Matcher matcher = pattern.matcher(str);  
     
     StringBuffer buffer = new StringBuffer();  
     boolean result1 = matcher.find();  
     while (result1) {  
       matcher.appendReplacement(buffer, "");  
       result1 = matcher.find();  
     }  
     
     matcher.appendTail(buffer);  
     return buffer.toString();  
   }  

3.本次开发中,由于wap社区很多模块只是从web社区取得数据,并不新增,实际上就是二者用一个数据库,但是实际开发中,由于很多地方使用了memcached作为缓存,所以形成这样一个现象,web社区修改了的数据,恰好在wap社区刚刚查看过,缓存中存在数据,所以web社区更新的记录,在wap社区不能马上体现,需要根据缓存的延时来确定。这对于用户体验有一定问题,今后开发中需要密切关注此问题。
另外,在使用memcached的时候,一般都是在memcached中保存一个列表,例如保存某个用户的日记列表,同时这个用户的所有日记也以主键->日记pojo的形式保存在了memcached中。开发时应该遵循这样一个原则,当用户新增一条数据(新增一篇日记),就需要刷新一遍日记列表,或者直接删除这个日记列表。这个日记列表,如果数量非常大的话,可以只存100条。
当新增一条数据时,修订缓存中的全部相关数据,尤其是列表数据;当更新一条数据时,也需要做相同的动作。
1 楼 flynofry 2009-05-30  
我现在也做手机移动开发快一年了,手机上面的适配问题还真是需要积累经验。以后有问题多多请你指教!
2 楼 swen00 2009-05-31  
空格,换行都会对显示造成问题,如果是tomcat服务器,在/conf/web.xml文件中配置
<init-param>
  <param-name>trimSpaces</param-name>
  <param-value>true</param-value>
</init-param>
3 楼 myseo 2009-06-05  
可以看下memcachedb
4 楼 sharong 2009-06-24  
myseo 写道
可以看下memcachedb

是memcached附带的一个产品么?是不是也是类似derby那样的内嵌数据库?有空研究下
5 楼 lyong757 2009-08-18  
我也想研究下wap服务器的架设 但是手头没有资料  不知能否给我一份资料  关于使用tomcat作为服务器如何架设wap服务器  邮箱:lyong757@163.com 

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3