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 的新特性---可变参数 ...
随机推荐
- python基础-第六篇-6.4模块混战
我们之前接触多的编程方式就是函数式编程,而且喜欢就一个文件里写完所有的程序代码,这样做在前期感觉还不错,不过一旦你的程序变复杂,在易读性和排错方面就感觉好吃力,功能界限不明显,那今天我们就来讲讲怎么用 ...
- lzugis—搭建属于自己的小型的版本号控制SVN
版权声明:本文为LZUGIS原创文章,未经同意不得转载. https://blog.csdn.net/GISShiXiSheng/article/details/28643575 对于不了解SVN的同 ...
- ubuntu安装pip和python
安装pip2sudo apt-get install pip 这样安装的是pip2不支持Python3.x,可以使用如下命令安装pip3 sudo apt-get install python3-pi ...
- Java进阶学习:JSON解析利器JackSon
Java:JSON解析利器JackSon JackSon基础 1.Maven项目引入 <!-- https://mvnrepository.com/artifact/org.codehaus.j ...
- 3.11课·········C#类
String类:.Length 字符的长度,返回一个int类型的值 .Trim() 去掉开头以及结尾的空格.TrimStart() 去掉字符串开头的空格.TrimEnd() 去掉字符串后面的空格 .T ...
- mini2440移植uboot 2014.04(四)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <mini2440移植u ...
- [IDE]Intellij Idea学习整理
一.优化 1.在IDEA的安装目录的bin目录下,找到如图所示的两个文件,根据所在系统是32位还是64位打开相应的文件. 2.以64位为例,打开idea64.exe.vmoptions. 如图修改参数 ...
- STL+位运算的文件
1.queue 队列 queue的头文件是<queue>. 定义queue对象的示例代码如: queue<int>q; 队列内存放的是int类型的数 queue<dou ...
- linux 系统监控好文
摘自: http://os.51cto.com/art/201005/200714_all.htm
- matlab画折线
figure(721);hold on;x=1:1:5;%x轴上的数据,第一个值代表数据开始,第二个值代表间隔,第三个值代表终止 a=[203.024,113.857,256.259,244.888, ...