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 的新特性---可变参数 ...
随机推荐
- SDOI2017第一轮
本蒟蒻表示终于$AC$了$SDOI2017\text{第一轮}$! 兴奋! 附上各个题的题解: $DAT1$: $T1$: BZOJ4816: [Sdoi2017]数字表格 $T2$: BZOJ481 ...
- 【转载】解决Apache2+PHP上传文件大小限制的问题
原文出处:http://evol1216.blog.163.com/blog/static/13019958020106783623528/ 在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大 ...
- Vue:实践学习笔记(1)——快速使用
Vue:实践学习笔记(1)——快速使用 Vue基础知识 0.引入Vue 官方地址:Vue的官方下载地址 Vue推荐博客:keepfool 在你的程序中快速引入Vue: <!-- 开发环境版本,包 ...
- ButterKnife 原理解析
一.使用方法 1.添加依赖. implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewhart ...
- 牛客小白月赛1 D 多项式乘法 【循环】
题目链接 https://www.nowcoder.com/acm/contest/85/D 思路 因为数据范围较小 ,所以 可以直接 一个一个乘 AC代码 #include <cstdio&g ...
- jquery 如何获取单选框的值
jquery 如何获取单选框的值 获取单选框的值有三种方式: 1.$('input:radio:checked').val():2.$("input[type='radio']:chec ...
- jenkins实现自动部署
主机A搭建gitlab.gitlab下载:https://www.gitlab.cc/downloads/ (gitlab中文网) 主机B搭建jenkinsjenkins下载:https://j ...
- 《程序员代码面试指南》第三章 二叉树问题 判断t1 树中是否有与t2 树拓扑结构完全相同的子树
题目 判断t1 树中是否有与t2 树拓扑结构完全相同的子树 java代码 package com.lizhouwei.chapter3; /** * @Description: 判断t1 树中是否有与 ...
- Redis的管理
一.redis持久化 redis是内存数据库,一切的数据都是存储到内存中的,我们知道,当服务器意外关机,那么在内存中的数据都将丢失,但是redis为我们提供持久化功能,这样就能把数据保存到硬盘上.re ...
- 20165101 学习基础和C语言基础调查
学习基础和C语言基础调查 技能学习心得 看了15级学长学姐丰富的技能之后,我感到很惭愧.我的课外技能可以说是很糟糕.唱歌的话,小时候还可以用假声唱一下,变声之后就是高音上不去,低音下不来.体育更是差劲 ...