您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 传智播客崔希凡 Java Web 讲义 day01~17
  所属分类: Java
  开发工具:
  文件大小: 5mb
  下载次数: 0
  上传时间: 2019-03-01
  提 供 者: wizard******
 详细说明:传智播客崔希凡 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 list new Arraylist( List listl= new Arraylist()i List list2= new Arraylist()i list. addAll(list1 list. addAll(ist2); 2泛型的好处 将运行期遇到的问题转移到了编译期; ●泛型不可能去除所有类型转换,但可以减少了类型转换操作 在循环遍历集合类时,方使了很多 一定程度上提高了安全性 3自定义泛型类的语法 31自定义泛型类的语法 pub| c class类型<一到多个泛型变量的声明> 例如 public class A . A类中有一个泛型变量的声明(或称之为定义)。这就相当于创建了一个变量一样,然后就可以 在类内使用它了。 32泛型类内使用泛型变量 声明的泛型变量可以在类内使用,例如创建实例变量时使用泛型变量指定类型,可以在实例方 法中指定参数类型或返回值类型,但不能在 static变量或 static方法中使用泛型变量。 public class a private T bean; public t getBean( return bean public void setBean(t beani this, bean s bear 北京传智播客教育 Www.itcast.cn 虎智播客一高级软件人才实作培训专家! 4泛型方法定义 不只可以创建泛型类,还可以创建泛型方法。可能你会有个误区,下面的方法不是泛型方法: class Ai public void fun(t){… 上面fun(方法是泛型类中的方法,它不是泛型方法 泛型方法是可以自己创建泛型变量,泛型方法中创建的泛型变量只能在本方法内使用。泛型方 法可以是实例方法,也可以是静态方法。 public t get(Tu ts, int index t return ts[index] 我们必须要区别开什么是创建泛型变量,什么是使用泛型变量。其中是创建泛型变量,它必 须在返回值前面给出。 泛型方法中的泛型变量只有两个可以使用的点:返回值和参数,而且所有有意义的泛型方法中 都会在返回值和参数两个位置上使用泛型变量,但语法上没有强制的要求。 调用泛型方法,通常无需为泛型变量直接赋值,而是通过传递的参数类型间接为泛型变量赋值, 例如 String]strs={"helo”,“ world" String s=get(strs, O) 因为给T[ts参数赋值为strs,而strs的变量为 Stringl],所以等同与给get方法的泛型变量赋值 为 String类型。所以返回值类型T为 String类型。 枚举 1什么是枚举类型 我们学习过单例模式,即一个类只有一个实例。而枚举其实就是多例,一个类有多个实例,但 实例的个数不是无穷的,是有限个数的。例如word文档的对齐方式有几种:左对齐、居巾对齐、石 对齐。开车的方向有几种:前、后、左、右! 我们称呼枚举类中实例为枚举项!一般一个枚举类的枚举项的个数不应该太多,如果一个枚举 类有30个枚举项就太多了! 2定义枚举类型 定义枚举类型需要使用enum关键字,例如: public enum Direction 北京传智播客教育 Www.itcast.cn
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: