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 的新特性---可变参数 ...
随机推荐
- SQLServer将一个表内指定列的所有值插入另一个表
insert into records_resolve_bak(resolve_save_addr,resolve_time,resolve_status) select resolve_save_ ...
- perl智能匹配
1.perl中~~为智能匹配,它能够智能地依据符号两側的操作数来确定操作. 如要推断某个元素是否存在于数组中,不使用智能匹配,程序像这样: my $x=2; my @array=(1,2,3); my ...
- 使用curl / wget命令上传下载FTP
curl可以在shell下轻松上传下载ftp上的文件,相比ftp命令更具有优势,因为它能在单命令条件下,下载或者上传一个ftp文件,甚至可以删除文件. 下面看实例: 1.列出ftp服务器上的目录列表: ...
- linux基础part5
linux 基础 一.网络基础 1.ifup 网卡名称:ifdown 网卡名称:ifconfig 网卡名称 ip 子网 其修改只是临时生效,一旦关机或重启命令失效,需要修改配置文件永久生效. 2.网卡 ...
- HTML 5 本地存储
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
- git错误收集总结
一.在icoed添加ssh密钥后,克隆代码库报错`Permissions 0777 for ‘/Users/username/.ssh/id_rsa’ are too open.` 1.原因:id_r ...
- shell 批量创建_备份 mysql 数据库 表
#!/bin/bash user=root password= socket=/var/lib/mysql/mysql.sock mycmd="mysql -u$user -p$passwo ...
- Oracle的控制文件和日志文件
--什么是控制文件 控制文件是数据库的一个二进制文件,它主要记录数据库的名称. 数据库的数据文件存放位置等信息. 一个控制文件只能属于一个数据库.如果控制文件丢失,这数据库就无法操作. --下面查询语 ...
- FileInputStream 把文件作为字节流进行读操作
//把文件作为字节流进行读操作 FileInputStream in = new FileInputStream(filename);//FileInputStream具体实现了在文件上读取数据