TIJ读书笔记08-数组的初始化和可变长参数形参
数组
相同类型的,用一个标识符名称封装到一起的一个对象序列或者基本数据类型序列叫数组.(多么严谨的概念)
数组的声明
int[] a1
和int a1[]
都可以表示一个数组. 前者是java风格的,后者是C/C++风格的.但是java数组不允许指定数组的大小. 因为对于java来说,这个标识符就是一个引用. java觉得这玩意儿就是一个引用,指定一个引用的大小是件很傻的事情.
对于数组,初始化动作可以出现在任何地方.
数组的初始化和赋值
初始化的时候可以使用{}
来进行. 使用这个就相当与一个new. 这时候才是给这个数组分配空间. 这个时候会把分配空间和赋值一起完成了. 当然也可以使用new关键字.
public class ArrayInit {
static int[] a1 = {1,2,3,4,5};
static int[] a2 = new int[6];
public static void main(String[] args) {
for(int eachItem1:a1){
System.out.print(eachItem1+" ");
}
System.out.println();
for(int eachItem2:a2){
System.out.print(eachItem2+" ");
}
}
}
对于非基本数据类型,想想数组的定义,貌似也是可以搞成一个数组的,只要它是同一种数据类型.
public void test2(){
Dog[] dogs1 = {new Dog("Husky"),new Dog("Samoyed"),new Dog("Alaskan Malamute")};
Dog[] dogs2 = new Dog[3];
dogs2[0]=new Dog("Husky");
dogs2[1]=new Dog("Samoyed");
dogs2[2]=new Dog("Alaskan Malamute");
System.out.println(Arrays.toString(dogs1));
System.out.println(Arrays.toString(dogs2));
}
可变参数列表
java中所有的类有个老祖宗叫Object. 不管你是一个Dog还是一个Person,都是一个Object.那么如果,把一个object数组作为形参,那么这个函数是不是就可以变成一个可变参数列表的函数了呢?
public static void test3(Object[] obj){
for(Object eachObj:obj){
System.out.println(eachObj);
}
}
@Test
public void test4(){
ArrayInit.test3(new Object[] {new Integer(1),new Integer(2),new Integer(3)});
}
既然可以这么搞,那java干脆整个关键字吧,于是一个很形象的关键字诞生了...
于是上面这段代码就可以写成
public static void test3(Object...obj){
for(Object eachObj:obj){
System.out.println(eachObj);
}
}
@Test
public void test4(){
ArrayInit.test3(new Object[] {new Integer(1),new Integer(2),new Integer(3)});
}
当然除了Object还可以是其他类型. 但是,可变参数列表一定要放在形参列表的最后,且只能有一个. 如果多了的话很有可能会产生歧义. 所以干脆别整那么多.
TIJ读书笔记08-数组的初始化和可变长参数形参的更多相关文章
- Noah的学习笔记之Python篇:函数“可变长参数”
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- TIJ读书笔记02-控制执行流程
TIJ读书笔记02-控制执行流程 TIJ读书笔记02-控制执行流程 if-else 迭代 无条件分支 switch语句 所有条件语句都是以条件表达式的真假来决定执行路径,也就是通过布尔测试结果来决 ...
- TIJ读书笔记03-初始化和构造器
TIJ读书笔记03-初始化和构造器 初始化和清理是涉及安全的两个问题,如果对象不能正确的初始化会引起很多错误,比如空指针异常等,如果不能恰当及时的清理,会占用过多资源. 构造器在创建一个类的实例的 ...
- TIJ读书笔记06-终结清理和垃圾回收
TIJ读书笔记06-终结清理和垃圾回收 finalize()方法 垃圾回收器如何工作 java的垃圾回收是由jvm来控制的.所以需要java程序员参与的部分不是很多. 但是在这里需要明白一点,java ...
- TIJ读书笔记05-this关键字
TIJ读书笔记05-this关键字 概述 this的用法 static方法 概述 两个对象同时调用一个方法,那么jvm怎么知道是哪个方法调用的呢. 我们在书写的时候会写成a.fun(1) 或者b.fu ...
- TIJ读书笔记04-方法重载
TIJ读书笔记04-方法重载 为什么会有方法重载 方法签名 如何区分重载 关于基本类型的重载 为什么会有方法重载 OOP的编程方式就是让程序的逻辑更加接近现实世界的逻辑. 而在现实世界中,自然语言本身 ...
- TIJ读书笔记01-操作符
TIJ读书笔记01-操作符 概述 关系操作符和逻辑操作符 位操作符 类型转换 概述 操作符 操作符接受一个或多个参数,并生成一个新值. 换句话说操作符作用于操作数,生成一个新值.有些操作符会改变操 ...
- Java 数组 可变长参数 实例
可以把类型相同但个数可变的参数传递给方法,方法中的参数声明如下: typeName...parameterName (类型名...参数名) 在方法声明中,指定类型后紧跟着省略号...,只能给方法指定一 ...
- python学习笔记-函数与可变长参数
一.函数 1. def test(x): y=x+1 return yprint(test) #这是打印函数在内存中的地址 过程:就是没有返回值的函数 在python中过程也是函数,就算没哟返回值,也 ...
随机推荐
- css&js实现顶部banner滚动提示效果
以一个小例子来展示滚动提示的代码部分: try.html <div id="scrollobj" > <span class="scrollTxt&qu ...
- 1、datatable与datagrid之间的绑定
1.前台代码: 插入一个datagrid控件,设置几列. 这里有两点要注意: 1)为了显示所要查询的日期,我将前台的列名与后台查询出来的日期绑定了,用了x:Name这个属性 2)与后台datatabl ...
- java类型转化之SimpleDateFormat-时间转化
关于Date,时间戳(long),String类型之间的相互转换,主要是用到类SimpleDateFormat. 先介绍SimpleDateFormat类的一些常见格式: 1.参数: code des ...
- ANSI C中关于FILE流的一些
ANSI C只是一个定义,定义了一个借口与标准,具体实现将是不同的. 刚看到I/O的时候就对于Stream非常的迷惑,这是什么玩意.后面才明白,这只是一个抽象出来的概念而已.对于一个Stream,它具 ...
- ES6 - for...of
for...of是一种用来遍历数据结构的方法,可遍历的对象包括:数组,对象,字符串,节点数组等 我们先来看一下现在存在的遍历方式: var arr=[1,2,3,4] (1)for循环 缺点:代码不够 ...
- web安全之sql注入原理
sql注入的原理: 将(恶意)的SQL命令注入到后台数据库引擎执行的能力,把信息返回到页面 sql注入产生的原因: 过滤不严谨,导致产生的sql注入. sql注入产生的地方: ...
- mybatis中的mapxml的语法
<select id="a" resultMap="map"> select * from `table` where (po_type='1') ...
- CSS 知识点
1:display:block:比较常用于<a><span>这两个标签——因为这两个标签非块元素,如果不用display:block定义一下,因为a标签没有结构,就是没有宽高, ...
- Vmware vsphere webservice sdk 连接打开慢的问题
还在为VimService实例化速度慢的问题烦恼吗?这有一篇文章可以帮你解决问题,英文水平所限,就不翻译了,原文地址http://kb.vmware.com/selfservice/microsite ...
- Durid(一): 原理架构
Durid是在2013年底开源出来的,当前最新版本0.9.2, 主要解决的是对实时数据以及较近时间的历史数据的多维查询提供高并发(多用户),低延时,高可靠性的问题.对比Druid与其他解决方案,Kyl ...