Foreach
int []a=new int[]{1,2,3,4,5,6,7,8};
for (int item : a)
{
System.out.println(item);
}
1. 当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。
自动装箱/拆箱大大方便了基本类型数据和它们包装类的使用。
•自动装箱:基本类型自动转为包装类.(int >> Integer)
•自动拆箱:包装类自动转为基本类型.(Integer >> int)
int a = 3;
Collection<Integer> c = new ArrayList<Integer>();
c.add(3);//将int类型的3转换为Integer类型并放到集合当中
c.add(a + 3);
for(Integer i : c)
{
System.out.println(i);
}
HashMap<String ,Integer> hashMap=new HashMap<String ,Integer>();
for(String itemString :args)
{
hashMap.put(itemString,(null==hashMap.get(itemString)?1:hashMap.get(itemString)+1));
}
Iterator<Map.Entry<String,Integer>> iterator=hashMap.entrySet().iterator();
while (iterator.hasNext())
{
Map.Entry<String,Integer> entry=(Entry<String,Integer>) iterator.next();
System.out.println("单词 "+entry.getKey()+" 出现的次数 :"+entry.getValue());
}
2. Integer类有一个缓存,它会缓存介于-128~127之间的整数。
当生成缓冲中的数字,就指向缓存中的数字,不再生成新的Integer对象,所以i1==i2
当超出缓存中的数字,则生成新的Integer对象 所以i3!=i4
Integer i1=100;
Integer i2=100;
Integer i3=200;
Integer i4=200;
System.out.println(i1==i2);
System.out.println(i3==i4);
/**
* Returns an {@code Integer} instance representing the specified
* {@code int} value. If a new {@code Integer} instance is not
* required, this method should generally be used in preference to
* the constructor {@link #Integer(int)}, as this method is likely
* to yield significantly better space and time performance by
* caching frequently requested values.
*
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
3. 可变参数:可变参数本质上就是一个数组,对于某个声明了可变参数的方法来说,我们既可以传递离散的值,也可以传递数组对象。但如果将方法中的参数定义为数组,那么只能传递数组对象而不能传递离散的值。
4. 可变参数必须要作为方法参数的最后一个参数,即一个方法不可能具有两个或两个以上的可变参数。
private static int sum(String str, int... nums)
{
System.out.println(str);
int sum = 0;
for (int num : nums)
{
sum += num;
}
return sum;
}
public static void main(String[] args)
{
int result = sum("a", new int[] { 1, 2 });
System.out.println(result);
result = sum("b", 1, 2, 3, 4);
System.out.println(result);
}
5. 枚举(Enum):我们所定义的每个枚举类型都继承自java.lang.Enum类,枚举中的每个成员默认都是public static final的。
6. 而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。
枚举应用实例
public enum AccessRight
{
MANAGER, DEPARTMENT, EMPLOYEE;
}
public class AccessControl
{
public static boolean checkRight(AccessRight accessRight)
{
if(accessRight == AccessRight.MANAGER)
{
return true;
}
else if(accessRight == AccessRight.DEPARTMENT)
{
return false;
}
return false;
}
public static void main(String[] args)
{
AccessRight accessRight = AccessRight.valueOf("MANAGER");
System.out.println(checkRight(accessRight));
}
}
7. 静态导入:
a) import static com.shengsiyuan.common.Common.Age;
b) import static com.shengsiyuan.common.Common.output;
8. 表示导入Common类中的静态成员变量AGE以及静态方法output。注意:使用import static时,要一直导入到类中的静态成员变量或静态方法。
9. Java中,无论生成某个类的多少个对象,这些对象都会对应于同一个Class对象。