JAVA 1.5 局部特性(可变参数/ANNOTATION/并发操作)
1: 可变参数
可变参数意味着可以对某类型参数进行概括,例如十个INT可以总结为一个INT数组,当然在固定长度情况下用数组是很正常的
这也意味着重点是可变,不定长度的参数
PS1:对于继承和重写我没有多做测试,具体可以参考 http://www.cnblogs.com/lanxuezaipiao/p/3190673.html
PS2:可变的参数只可以放在参数列表最后一位,所以函数里只能有一个可变参数
- public class Cal {
- public static Integer add( Integer... args)
- {
- Integer result = 0;
- for (Integer integer: args)
- {
- result += integer;
- }
- return result;
- }
- static public void main(String[] arg)
- {
- System.out.print(add(1,2,3,4,5));
- }
- //out put = 15
- }
2:ANNOTATION
Annotation给我的感觉就是让开发更加的简便,在原有基础上可以做更多的修饰。
最常见的就是 @override @deprecated 可以明确的指出当前 函数 / 类 / 成员 的一些特性,而且可以给与一定操作,例如告诉你不能使用等等
同时在反射Reflect包中出现了与annotation有关的函数,例如 是否annotation 、 查询annotation的成员值
这个和 IOC 配合起来可以起到很好的效果 example roboguice(可以在github里搜到)
为参数 inject 指定类
- @InjectView(R.id.name) TextView name;
- @InjectView(R.id.thumbnail) ImageView thumbnail;
- @InjectResource(R.drawable.icon) Drawable icon;
- @InjectResource(R.string.app_name) String myName;
- @Inject LocationManager loc;
例如在spring里是在XML文件内对各种类绑定来绑定去,虽然都统一在一个地方,但是看起来也挺费劲的
改用annotation可以在类出现的地方看到配置参数,我觉得更加的人性化
3. 并发操作
1.CopyOnWriteArrayList
传统的ArrayList 不是线程安全的,如果一个线程在读一个线程在写 会出现ConcurrentModificationException
所以CopyOnWriteArrayList就诞生了,在读取部分是和ArrayList差不多,不存在并发问题,主要是在写入的部分,
CopyOnWriteArrayList采取的方法是先把整个数组复制一份,执行ADD操作,然后再把新数组塞回去,那么在运行着的旧数组是不会被影响到的所以不会报错
明显的缺点就是每个操作需要复制完整的数组,所以这个类适用于多读少写的场合
2.concurrent里的 atomicXXX
一般执行并发控制靠的都是锁,其中的缺点就是建立锁和释放锁都需要耗费相当的CPU资源,而且很多时候根本就没人和你抢
这种情况下用atomic就比较适合了
以compareAndSet作为例子,先获取值(正常取值),然后用compareAndSet对当前值进行对比
1, 如果值没变化,那么就变成新的设定值
2, 如果值发生了变化,返回false,再继续取值去
- public class NonblockingCounter {
- private AtomicInteger value;
- public int getValue() {
- return value.get();
- }
- public int increment() {
- int v;
- do {
- v = value.get();
- while (!value.compareAndSet(v, v + 1));
- return v + 1;
- }
- }
关于非阻塞的算法,请看这边 http://www.ibm.com/developerworks/cn/java/j-jtp04186/
JAVA 1.5 局部特性(可变参数/ANNOTATION/并发操作)的更多相关文章
- Java JDK5新特性-可变参数
2017-10-31 00:19:07 可变参数:定义方法的时候不知道该定义多少个参数 格式:修饰符 返回值类型 方法名(数据类型... 变量名){} 注意:这里的变量其实是一个数组 ...
- java基础篇1之可变参数,增强for循环,自动装箱
1.java中可变参数应用 例如 add(int x,int... args) 1)只能放在参数列表的最后面 2)...位于变量类型和变量名之间,前后有无空格都可以 3)调用可变参数的方法时,编译器为 ...
- java基础(20):Map、可变参数、Collections
1. Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤 ...
- 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和
返回本章节 返回作业目录 需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和. 实现思路: 定义可变形参方法,参数类型是int类型. 定义变量 sum 接受最终的和. 通过 for ...
- Java面向对象_增强for可变参数与代码块
1.foreach循环 for(类型 变量名称:数组或集合){ //输出操作 } 2.可变参数:根据需要自动传入任意个数的参数,就是可变参数. 语法:返回值类型 方法名称(数据类型...参数名称){ ...
- Java在方法中定义可变参数类型
学习目标: 掌握可变参数的应用 学习内容: 1.定义 在方法中传递数组有一种更简单的方式--方法的可变参数,其本质是一个语法糖,目的是让开发者写代码更简单. 2.语法 [修饰符] 返回值类型 方法名称 ...
- Java进阶知识点:不可变对象与并发
一.String的不可变特性 熟悉Java的朋友都知道,Java中的String有一个很特别的特性,就是你会发现无论你调用String的什么方法,均无法修改this对象的状态.当确实需要修改Strin ...
- JDK5的新特性:泛型、可变参数、静态导入
数组可以在创建的时候就指定存放的数据类型,这样放入不同类型的时候就会发生编译错误. 而集合却可以存储多种不同类型,这样的话如果是遍历的时候在集合中装了好多不同的数据类型的时候,十分容易发生类型转换错误 ...
- Java 中可变参数
可变参数 Java 中可变参数 现在需要编写一个求和的功能,但是不知道有几个参数,在调用的时候才知道有几个参数,请问这如何实现呢? Java 给我们提供了一个 JDK 1.5 的新特性---可变参数 ...
随机推荐
- linux c编程:进程环境
一 进程终止: ⼀个进程可以登记若⼲个(具体⾃⼰验证⼀下)个函数,这些函数由exit⾃动调⽤,这些函数被称为终⽌处理函数, atexit函数可以登记这些函数. exit调⽤终⽌处理函数的顺序和atex ...
- SSH 占用数据库连接不释放问题
SSH框架的项目在訪问数据库的时候.訪问完毕后一直占用链接,不释放.导致过了一段时间后,server没挂,就是有訪问数据库的连接是时候.一直卡住 解决的方法: 1.配置spring相应的hiber ...
- 【机器学习算法-python实现】svm支持向量机(3)—核函数
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/gshengod/article/details/24983333 (转载请注明出处:http://b ...
- JPA 多表分页查询
业务场景:大学生毕业后统计毕业去向.学生实体和毕业去向实体一对一关系. 实体: @Entity @Data @Table(name = "t_s_student") public ...
- [原创]关于设置linux中vim 显示行号
1.更改所有账户配置 直接更改/etc/vimrc vim /etc/vimrc 在vimrc文件的最后添加 set nu 即可 wq退出. 这样,不论使用哪个账号登陆,vim打开后都显示行号 2.为 ...
- mac活动监视器闪退
输入:rm -rf ~/Library/LaunchAgents/com.apple.Yahoo.plist即可!
- O(1) 快速乘
有一些毒瘤题,数据大小不光会炸\(int\),有时甚至会炸\(long long\).这时一个\(O(1)\)的防爆乘就很重要了 \(a*b%p\)可以转化为\(a*b-[a*b/p]*p\) 这里用 ...
- UOJ136 开学前的作文
描述 红包是一个萌萌的男孩子. 红包由于 NOI 惨挂,直到前不久依然无心写作业.如今快开学了,他决定好好完成作业. 对于可以交电子稿的作文,红包有特殊的完成技巧,大致流程是依次选中一段内容→按下 C ...
- a note of R software write Function
Functionals “To become significantly more reliable, code must become more transparent. In particular ...
- error: reference to 'max' is ambiguous
1. 自定义的变量名 与 库中的 重名了