- 浏览: 377959 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (225)
- java (76)
- English (2)
- office (2)
- 架构设计 (1)
- 人在职场 (3)
- database (21)
- C# (18)
- 向往的院校 (0)
- C++ (1)
- AJAX (1)
- 操作系统 (8)
- eclipse (1)
- Spring (0)
- Linux (1)
- Javascript (6)
- 离散 (0)
- 协议 (1)
- sql server (5)
- sql server (0)
- fdf (0)
- xml (1)
- sql语句里top和distinct一起用 (1)
- 正则表达式 (7)
- 表达 (1)
- ms server (1)
- SWFObject (0)
- 线程 (2)
- Java线程 (0)
- Android & SQLite (0)
- Android (0)
- window.XMLHttpRequest (0)
- DB pool (0)
- tomcat内存溢出设置JAVA_OPTS (1)
- java bcp (1)
- 文件系统转换 (1)
- Microsoft XMLDom (1)
- tree (0)
- C# installer (0)
- 对付http cc攻击 (0)
- Ckeditor (0)
- MyEclipse (0)
- PDM (0)
- PDM OOM (0)
- asp.net (0)
- tomcat (1)
- Tomcat session (1)
- jdk (0)
- Bootstrap (0)
最新评论
-
kenail:
格式太乱了。
转 使用WebService压缩传输的心得 -
存在即为合理:
写得好乱,但是还是谢谢你的驱动
JDBC连接SQL server 2005 驱动 -
guji528:
长见识了,谢谢分享!
TL1协议(正文信息收集整理来源Internet) -
王大人:
Js window confirm()方法及其使用 -
Eastman:
SqlServer附加数据库出错,错误代码5123
public abstract List find(String hql, Object... values);
Object... values,你也可以认为是Object[]values,数组.
可变参数(Varargs)
可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是
函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);
…
在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得
不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
for (Object obj: objs)
System.out.println(obj);
}
在引入可变参数以后,Java的反射包也更加方便使用了。对于
c.getMethod("test", new Object[0]).invoke(c.newInstance(), new
Object[0])),现在我们可以这样写了
c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。
可变参数的调用
public static void closeAll(Object... objs) {//可变参数
for (Object obj : objs) {
if (obj instanceof Connection) close((Connection) obj);
if (obj instanceof Statement) close((Statement) obj);
if (obj instanceof ResultSet) close((ResultSet) obj);
}
}
UtilDB udb = new UtilDB();
try{
Connection conn= udb.makeConnection();
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rt = st.executeQuery("select * from jobs");
rt.last();
System.out.println(rt.getRow());
// rt.first(); //返回到第一条记录的位置
rt.beforeFirst(); //反回到第一条记录的前面
System.out.println("ok");
if(rt.next())
{
System.out.println(rt.getInt(1)); //rs.getInt方法, 若数据库中记录的数值为null,getInt返回的是数值“0”,而不是null!
System.out.println(rt.getInt(4));
System.out.println(rt.getRow()); //是显示游标的当前行号 ,而非表的ID号
}
udb.closeAll(new Object[]{st, rt, conn});
}catch(SQLException e)
{
e.printStackTrace();
}finally {
//udb.closeAll(new Object[]{st, rt, conn});
}
static void printArray(Object...args){
for(Object obj:args)
System.out.print(obj+" ");
System.out.println();
}
printArray(new Object[]{
new Integer(47),new Float(3.14),new Double(11.11)
});
printArray(new Object[]{"one","two","three"});
- 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(); 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);
- }
- }
- }
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 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) {
- }
- }
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);
- }
- }
- }
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行的方法,因为两个方法都可以有相同的参数列表。都能精确匹配上参数列表,编译器在这种情况下只好报出编译不能通过的错误。所以在重载这样的方法时,注意参数列表,不要使两个方法可以有同样的参数列表。
发表评论
-
tomcat安装不成功.提示是:failed to install tomcat6 service ,check your setting and permis
2018-03-08 14:55 444以管理员身份运行 命令提示符,弹出窗口 ,选择“是”,输入 ... -
把系统时间设置成跟数据库的一致
2016-08-22 16:41 0public String time(int x) { ... -
struts标签<logic:iterate>的用法
2016-01-08 16:17 0<logic:iterate>主要用来 ... -
WIN7环境下cmd javac不是内部或外部命令 .
2015-07-21 11:27 1233一般步骤如下: 网上摘抄部分: JAVA_HOME ... -
jdk环境变量配置
2014-08-25 11:01 0进行java开发,首先要安装jdk,安装了jdk后还要进行环境 ... -
[转]JDBC使用TNS连接多节点Oracle
2012-06-29 15:15 1223JDBC使用TNS连接多节点O ... -
一个简单的JDBC通用工具
2012-06-29 15:01 0一个简单的JDBC通用工具 支持多种数据库,统一方式产 ... -
Java调用BCP导入数据到数据库解决标识列ID问题
2012-06-29 14:53 1154面的一篇博文讲解了调用bcp批量导出数据,对于批量导入数据则写 ... -
java调用存储过程
2012-06-14 12:34 0在java可以使用java.sql.CallableState ... -
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接 错误解决办法
2012-06-13 12:56 3199用java连接sqlserver2005时总是出现下面这个错误 ... -
javac编译外部jar包
2012-06-12 14:23 3610这个有个很简单到解决 ... -
[转]Eclipse中将Java项目(引用了第三方包) 打包为jar
2012-06-12 14:13 1036如果自己的java project中需要引用额外的jar包作为 ... -
java 调用BCP导入文本数据到表
2012-06-04 15:53 0在dos下的导入语句bcp SMM_SQL_REPLICA.d ... -
[转]jdk和jre有什么区别?
2012-03-09 14:28 813来源 简单的说JDK是面 ... -
[转]Java线程:线程栈模型与线程的变量
2012-02-16 14:06 779Java线程:线程栈模型与线程的变量 SCJP5学 ... -
[转] Java线程:概念与原理
2012-02-16 13:29 821Java线程:概念与原理 ... -
Java线程:创建与启动
2012-02-16 13:26 541SCJP5学习笔记 一、定义线程 ... -
JSP页面用get传递参数乱码问题
2011-06-24 15:52 1275通过get 方式传递参数时,如果参数是中文 ,则会出现乱码现在 ... -
PO/VO/DAO/BO/POJO是什么(JAVA几种对象的解释)
2011-03-30 16:49 0/*PO:persistant object持久对 ... -
Spring框架下资源属性的配置器类PropertyPlaceholderConfigurer
2011-02-25 15:01 7120在applicationContext.xml里配置DB ...
相关推荐
Object[]objs=JsonUtil.instance().json2Obj(json,Object[].class); //泛型 DatagridReturn<Object> dgr=JsonUtil.instance().json2Obj(json,DatagridReturn.class,Object.class); List<Object> ...
使用可变参数,可以轻松地编写能够接受不同数量参数的方法,而无需编写多个重载版本的方法。 例如,一个简单的打印方法: ```java public void write(Object... objs) { for (Object obj : objs) { System.out....
可变参数允许一个方法接收不定数量的参数,只需在参数列表的末尾加上`...`。这使得编写接受任意数量参数的方法变得更加简单。例如: ```java public void write(Object... objs) { for (Object obj : objs) { ...
5. 可变参数(Varargs):JDK 1.5引入了可变参数,允许一个方法接收零个或多个相同类型的参数。这些参数在内部被当作数组处理。例如,`public void write(Object... objs)`方法可以接受任意数量的对象参数,简化了多...
objs.add(new MyObject("Charlie", 35)); for (MyObject obj : objs) { serializeAndAppend(obj, "objects.txt"); } List<MyObject> deserializedObjs = deserializeFromTxt("objects.txt"); for (MyObject ...
引入泛型后,Java实现了类型安全的参数化类型,即可以创建具有类型参数的类、接口和方法。这使得在编译阶段就可以检测到类型错误,避免了运行时可能出现的`ClassCastException`。 例如,在没有泛型的情况下,我们...
在Linux操作系统中,动态链接库(Dynamic Link Library,简称动态库)是系统提供的一种共享资源,它们包含了一组可重用的函数和数据,可供多个应用程序共享,极大地节省了系统资源。本文将深入探讨动态库中的一个...
private Object[] objs = new Object[16]; // 初始化数组 private int size; @Override public boolean isEmpty() { return size == 0; } // 其他方法实现... } ``` ### 链表实现栈 链表实现栈提供了更...
public Object intercept(Object obj, Method method, Object[] objs, MethodProxy proxy) throws Throwable { System.out.println("事物开始.........."); proxy.invokeSuper(obj, objs); System.out....
Object[] objs = new Object[]{"12345", 1, 4}; String s2 = (String) constrct.newInstance(objs); ``` Constructor 类提供了关于类的单个构造方法的信息,包括构造函数的名称、参数类型、访问权限等信息,并提供了...
- `List asList(Object[] objs)`: 把指定的数组转换为`List`的对象。 - `int binarySearch(T[] objs, key)`: 在数组中查找`key`的位置。 **示例**: ```java int[] arrs = {12, 54, 12, 8765, 123, 34, 54, 23, 67};...
Object[] objs = list.get(i); buff.write((objs[1].toString() + "\r\n").getBytes("UTF-8")); } buff.flush(); buff.close(); ``` 使用ServletOutputStream获取HTTP响应的输出流,通过BufferedOutputStream...
再比如,一个包含1000个null引用的Object数组Object[] objs = new Object[1000];,每个空引用占用4个字节,加上对象头,总共需要4 * 1000 + 对象头大小的内存空间。 文档也探讨了Java中各种包装类(Wrapper class)...
在循环中,`setObject(i + 1, objs[i])`用于设置SQL语句中的占位符,其中`i+1`是参数的位置,`objs[i]`是对应的值。 4. **执行插入操作**:调用`preparedStatement.executeUpdate()`执行SQL插入语句。这个方法不...
- `isNull(Object[] objs)`:判断对象数组是否为空。 - `isNull(Integer integer)`:判断Integer对象是否为零或空。 - `isNull(Collection collection)`:判断集合是否为空。 - `isNull(Map map)`:判断Map是否为空...
项目npm插件目录下找到mongoose,将这个文件的代码覆盖上去就行了 案例 OrderInfo.execPageQuery(+req.query.page, +req.query.count, where, null, {sort: ... total: objs.total, result: objs.rows }) } });
异步FIFO(Asynchronous FIFO)是数字系统设计中一种重要的数据存储结构,尤其是在高速通信、数据处理和接口设计等领域。这种FIFO与其他同步FIFO的主要区别在于其读写时钟域不同,使得数据可以在两个独立的时钟域...