JDK1.5 后的特性总结……

持续整理中……

【无论什么东西升级的目的无非 以下几点:】

1.简化书写;
2.提高效率;
3.提高安全性;


新特性一: StringBuilder ——jdk1.5版本出现了一个新的字符串缓冲区。

【JDK1.5新出来的】
StringBuilder含义:——新的字符串缓冲区;
功能和StringBuffer一模一样。可变字符序列。
两者到底啥区别呢?

【StringBuilder 和 StringBuffer的区别】——
对于容器,被多线程操作,容易出现安全问题。
【原因:】一个线程负责添加,一个线程负责删除,因为线程的随机性就会出现安全问题。
加锁,一个线程在执行容器中的内容时,其他线程不可以执行。
所以凡是可以操作容器数据的方法,都需要明确这个锁。
每调用一次操作容器的方法,(添加,删除)都需要判断这个锁。
对应多线程——安全,但效率低。对单线程——不涉及安全,但效率低,所以,对线程提供了StringBuilder .不需要同步的缓冲区。

实际开发时,建议使用StringBuilder ,只有在多线程时,才使用StringBuffer.

新特性二:自动拆箱,装箱机制。

【基本数据类型对象包装类JDk1.5以后的新特性】——【自动拆箱,装箱】
简化书写。

以——Integer i = new Integer(5)为例;
基本数据类型对象包装类,对象创建的简化写法Integer i = 5;
1. Integer i = 5;(其实在内存中也是通过 new Integer(5)这种方式创建的!)
这种方式称为——自动装箱,其实是通过Integer.valueOf(5)自动完成了对象创建的动作。
2. 在进行 Integer  i = i + 5,运算时——
等号 右边的i 会先转成基本数据值(自动拆箱)i.intValue(),其实质为:
i = i.intValue() + 5 ;然后再和5进行加法运算。
等号 右边运算完的结果,再次被自动装箱变成Integer对象赋给i.
一旦简化就有弊端:多具备一个值null. 使用自动装箱拆箱时,进行null的健壮性判断。
【实例】
Integer x = null;
x = x.intValue() + 4;
System.out.println(x);
将会抛出异常: java.lang.NullPointerException
————————————————————————————————
Boolean b = true; boolean b = true;的区别
答:前者:类类型变量指向一个对象,true为一个对象;
        后者:true为基本类型变量。
————————————————————————————————
在JdK1.5的新特性自动装箱中,如果数值在byte类型范围内(-128 ~ 127)。如果该对象数值重复出现
多个引用其实是指向同一个Integer对象,节省空间!但是超出了byte范围,都会生产新的Integer对象。
Integer m = 127;
Integer n = 127;
System.out.println( m == n); //true
System.out.println(m.equals(n));  //true
____________________________________

Object x = 5;Object x 接受到了一个Integer对象,自动装箱。
然而 Object不可以接受基本数据类型。

新特性三: 多线程:Lock代替了同步!

同步函数和同步代码块 所做的都是隐式的锁操作。  
同步函数和同步代码块 使用的锁和监视器是同一个。

Lock接口:是将锁进行单独对象的封装。而且提供了对锁对象很多功能。
比如:lock()获取锁,unlock()释放锁。
Lock对锁的操作都是显示操作。 所以它的出现要比同步函数更或者同步代码块明确的多。更符合面向对象的思想。

简单一句话:Lock接口的出现替代同步。

在同步里,锁和监视器是同一个对象。 升级后,锁是一个单独的对象。 而且将监视器的方法也单独封装到了

一个对象中,这个对象就是升级后——Condition. 升级后,都进行了单独的封装。锁被封装成了Lock对象。监视器方

法都被封装到了Condition对象(监视器对象)中。

——Lock代替了 同步。Condition代替了Object中的监视器方法。

Condition中提供了监视器的方法:await() , signal()   signalAll()

如何让锁和监视器产生联系?

直接通过Lock接口中的newCondition()方法就可以获取到能绑定到该Lock 对象上的监视器对象Condition上。

特性四:可变参数列表

以计算数的和为例:

当我们需要计算两个数的和时:可以将这两个数作为参数传入;需要计算3个数的和时,将这三个数作为参数传入;

而当我们需要计算的数很多时,而且都是同一类型,可以定义数组类型的参数。 但是传递时,必须先有数组对

象。 JDK1.5后,为了简化书写,出现了特性,可变参数。  同样还是代表数组,但是不需要在创建数组对象了,直接将

数组中的元素作为参数传入即可。 它会自动的将这些参数封装到数组中。 

【代码体现如下】

public class ParamDemo {
	
	public static void main(String[] args) {
		
		int num = add(5 , 6);
		System.out.println("这两个数的和为 ——> " +num);
		
		int num1 = add1(8 , 9 , 2);
		System.out.println("这三个数和为 ——> " + num1);
		
		int[] num2 = {1 , 2 , 4, 5, 6, 9}; 
		int sum = add2(num2);
		System.out.println("数组的和为 ——> " + sum);
		
		int sum2 = add(1 , 2 , 4, 5, 6, 9);
		System.out.println("可变参数后的 ——>" + sum2);
		

	}
	/* 
	 * 局限性。可变参数必须定义在参数列表的最后面。
	 */
	
	public static int add(int... arr ) {
		int sum = 0;
		for(int x=0; x<arr.length; x++){
			sum+=arr[x];
		}
		return sum;		
	}
	public static int add2(int[] num2) {
		int sum = 0;
		for (int i = 0; i < num2.length; i++) {
			sum+=num2[i];
		}
		return sum;
	}

	public static int add1(int i, int j, int k) {
		return i + j + k;
	}

	public static int add(int i, int j) {		
		return i + j;
	}
}

特性五: 泛型


特性六:增强型 for 循环语句;

Collection有了一个父接口,Iterable 该接口封装了iterator方法,同时提供了一个新的语句。foreach语句。

格式:

for(变量类型  变量:Collection集合 or 数组){
System.out.println("Xxxxx");
}
【代码体现
import java.util.ArrayList;

public class ForEachDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		ArrayList<String> al = new ArrayList<String>();
		
		al.add("abc1");
		al.add("abc2");
		al.add("abc3");
		al.add("abc5");
		
		for(String s : al){
			System.out.println(s);
		}

		
		int[] arr = {7,23,1,67,90,8};
		
		for(int i : arr){//只为遍历元素,无法操作角标。 
			System.out.println("i="+i);
		}
		
	}
}
【增强型的for循环 和 传统 for 循环的区别?】
1.foreach循环简化了迭代器,依旧还使用迭代器,因为迭代过程中还可以remove(),一般只对基本遍历简化使用。

2.和传统for循环有什么区别呢?
     foreach 循环特点:
  必须明确被遍历的目标。没有目标没用。目标只能是数组 或者Collection集合。但是不能通过角标操作。

如果要对数组中的元素进行特定操作时,建议使用传统for循环,通过角标完成。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值