文件名称:
传智播客崔希凡 Java Web 讲义 day01~17
开发工具:
文件大小: 5mb
下载次数: 0
上传时间: 2019-03-01
详细说明:传智播客崔希凡 Java Web 讲义 day01~17
传智播客崔希凡 Java Web 讲义 day01~17一高级软件人才实作培训专家!
Person person new Person(
person eat()i
选中某个测试方法,鼠标右键≯ Run as-> Junit test,即执行测试方法
Test注解的作用是指定方法为测试方法,测试方法必须是 public、woid、无参的!!!
2 Before和Ater(了解
如果你需要某个方法在每个测试方法之前先执行,那么你需要写一个方法,然后使用 Before
来标记这个方法。例如在 testRun()和 testeat(方法之前需要创建个 Person对象。
PersonTest
package junittesti
import org. junit. Before
import org. junit. Test
import cn. itcast Person
ublic class PersonTest
private Personperson;
Before
public void setUp()(
person new Person()i
public void testRun()t
person. run ()i
Test
public void testEat()i
person eat(
After注解标记的方法会在每个执行方法之后执行
Before和Ater标记的方法必须是 public、void、无参。
JDK5.0新特性
北京传智播客教育 Www.itcast.cn
虎智播客一高级软件人才实作培训专家!
1自动拆装箱
自动拆装箱是」K5.0的新特性之¨,这·特性可以使基本类型,与之对应的包装器类型之间直
接转换,例如int的包装器类型是 nteger!在」DK5.0之后,你甚至可以把int当作成 Integer来使用,
把 Integer当成int来使用。当然,这不是100%的
1.1自动拆装箱概述
在」DK5.0之后,Java允许把基本类型与其对应的包装器类型之间自动相互转换
自动装箱: Integer i=100,把int类型直接赋值给 nteger类型
自动拆装:inta= new Integer(100),把 Integer类型直接赋值给int类型。
12自动拆装箱原理
其实自动拆装箱是由编译器完成的!我们写的代码,再由编译器“二次加工”,然后再编译成. class
文件!那么编译器是怎么“二次加工”的呢?
Integer i=100:编泽器加工为: Integer i= Integer value Of(100)
inta=i:编译器加载为:inta= i. intvalue(
这也说明一个道理:JM并不知道什么是自动拆装箱,JM还是原来的MWM(」DK14之前),只
是编译器在」DK50时“强大”了!
1.3自动拆装箱演变
大家来看看下面代码
nteger i=100;//这是自动装箱
Object o=i://这是向上转型
上面代码是没有问题的,我们是否可以修改上面代码为
object o= 100
ok,这是可以的!通过编译器的处理后上面代码为
Object o Integer valueOf(100)
在来看下面代码
Object o= Integer, valueOf(100)
nta=o;/编译失败!
上面代码是不行的,因为o不是 Integer类型,不能自动拆箱,你需要先把o转换成 Integer类
型后,才能赋值给int类型。
Object o =Integer valueof(100)
int a =( Integer)o
北京传智播客教育 Www.itcast.cn
虎智播客一高级软件人才实作培训专家!
14变态小题目
来看下面代码:
Integer i1=100:
Integer 12=100
boolean b1===i2;/{结果为true
Integer i3=200
Integer 14=200
bo|eanb2=i3==14/结果为 false
你可能对上面代码的结果感到费解,那么我们来打开这个疑团。第一步,我们先把上面代码通
过编详器的“二次加工”处理一下:
Integer il= Integer valueof(100)
Integer i2=Integer valueof(100);
boo|eanb1=i==i2;//果为true
Integer i3= IntegervalueOf(200)
Integer i4 =Integer valueOf(200)
boolean b2=i3=i4;//结果为fase
这时你应该可以看到,疑团在 Integer. va|ueOf(方法身上。传递给这个方法100时,它返回的 Integer
对象是同一个对象,而传递给这个方法200时,返回的却是不同的对象。这是我们需要打开 Integer
的源码(这里就不粘贴 Integer的源代码了),查看它的 value Of()方法内容
Integer类的内部缓存了-128~127之间的256个 Integer对象,如果 valueof()方法需要把这个范围
之内的整数转换成 Integer对象时, valueof()方法不会去new对象,而是从缓存山直接获取,这就会
导致va|ueof(100)两次,都是从缓存中获取的同个 Integer对象!如果va|ueOf(方法收到的参数不
在缓存范围之内,那么 valueat()方法公new一个新对象!这就是为什么 nteger.valueOft(200)两次返
回的对象不同的原因了。
2可变参数
叫变参数就是一个方法可以接收任意多个参数!例如:fun()、fun(1)、fun(1,1)、fun(11,1)。你可
能认为这是方法重载,但这不是重载,你想想重载能重载多少个方法,而fun()方法是可以传递任何
个数的参数,你能重载这么多个方法么?
21定义可变参数方法
public void fun(int.arr)1
上面方法fun(的参数类型为int…,其中“…”不是省略号,而是定义参数类型的方式。参数arr
就是可变参数类型。你可以把上面代码理解为: public void fun (int[ arr)
public int sunl(int[] arr)i
int sum= o
北京传智播客教育 Www.itcast.cn
传智播客
www.itcast.cn
一高级软件人才实作培训专家!
for(int i=0; i< arrlength; i++)f
return sum;
public int sum2(int.
int sun = o
for(int i =0; i arr length; i++)(
sum + arr[ili
xe七uxn3um;
你可能会想,“int”和“int.”没有什么不同,只是“int.”是一种新的定义数组形参的方式罢
了。那么我应该恭喜你了!没错,这么理解就对了!但要注意,只有在方法的形参中可以使用int
来代替intU]
22调用带有可变参数的方法
sum1)和sum20两个方法的调用
sum1(new int[1, 2, 3)
sum2(new int[1, 2, 31)
这看起来没仆么区别!但是对于sum2还有另一种调用方式
sum
sum2(1)
sum2(1,2)
sum2(1,23);
这看起来好像是使用任意多个参数米调用sum20方法,这就是调用带有可变参数方法的好处了。
23编译器“次加工”
编译器对sum2方法定义的“二次加工”结果为:
public int sum2 (int[] arr) f
int sum =0;
for(int i =0;i< arr length; i++)
sum + arrlili
return sumi
即把“int.”修改为“int”类型。
编译器对sum2方法调用的二次加载结果为
北京传智播客教育www.itcAst.cn
传智播客
www.itcast.cn
一高级软件人才实作培训专家!
sum2(new int[o])
sum2(new int[l(1))i
sum2(new intl(1, 21)i
sum2(new int[l(1, 2,3)
结论:可变参数其实就是数组类型,只不过在调用方法时方便·些,由编译器帮我们把多个实
参放到一个数组中传递给形参。
24可变参数方法的限制
个方法最多只能有一个可变参数;
可变参数必须是方法的最后个参数。
3增强for循环
增强for循环是for的一种新用法!用来循环遍历数组和集合。
31增强for的语法
for(元素类型e:数组或集合对象){
例如:
int[ arr={1,2,3};
for(int i: arr)t
System. out. printIn(j;
增强for的冒号左边是定义变量,右边必须是数组或集合类型。例如上例中循环遍历的主浊
arr
这个int数组,增强for内部会依次把ar中的元素赋给变量i。
3.2增强for的优缺点
只能从头到尾的遍历数组或集合,而不能只遍历部分;
●在遍历List或数组时,不能获取当前元素下标
●增强for使用便简单,这是它唯一的优点了;
●增强for比使用达代器方便“点!
3.3增强for原理
其实増强for内部是使用迭代器完成的!也就是说,任何实现了 Iterable接口的对黎都可以被増
强for循环遍历!这也是为什么增强for可以循环遍历集合的原因( Collection是 Iterable的子接口)。
但要注意,Map并没有实现 Iterable接∏,所以你不能直接使用增强for来遍历它!
Map map= new HasMap()i
北京传智播客教育www.itcAst.cn
一高级软件人才实作培训专家!
map. put ( 1"
,"one");
map
put( 2
"tw");
map. put( 3","three")i
for(String key map keyset())I
string value map get(key)i
System. out. println(key += value)
泛型
1泛型概述
泛型是JDK5.0新特性,它主要应用在集合类上。有了泛型之后,集合类与数组就越来越像了。
例如: Object[] abjs= new Object[10],可以用来存储任何类型的对象。 String』strs= new String[10只
能用来存储 String类型的对象
Array List list= new ArrayList(,可以用来存储仼何类型的对象。 Arraylist< String>ist=neW
ArrayList< String>()只有用来存储 String类型的对象
11理解泛型类
泛型类具有一到多个泛型变量,在创建泛型类对象时,需要为泛型变量指定值。泛型变量只能
赋值为引用类型,而不能是基本类型。例如 Array List类中有一个泛型变量E,在创建 ArrayList类的
对象时需要为E这个泛型变量指定值
list list new ArrayList< String>0
令其中 String就是给uist的泛型变量E赋值了。查阅 ArrayList的AP你会知道,泛利变量E出现在
boolean add(e e)
E get(int index)
因为我们在创建lst对象时给泛型类型赋值为 String,所以对于ist对象而言,所有AP的E
都会被 String替换
boolean add(string e
String get(int index
也就是说,在使用 list,add)时,只能传递 String类型的参数,而list.get0方法返回的一定是Stng
类型。
list add hello";
String s= list. get(o);
12使用泛型对象
创建泛型对象时,引用和new两端的泛型类型需要一致,例如上面的引用是List< String>,而new
端是 new array List,两端都是 String类型!如果不致就会出错:
北京传智播客教育 Www.itcast.cn
一高级软件人才实作培训专家!
List< Object>list= new ArrayList< String>();/译失败!
Collection的addA()方法中使用了通配符(这个概念在下一个基础加强中讲解),所以使用起来
比较方便:
List
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.