day03Java基础加强.ppt
《day03Java基础加强.ppt》由会员分享,可在线阅读,更多相关《day03Java基础加强.ppt(47页珍藏版)》请在三一办公上搜索。
1、北京传智播客教育,就业方向,XML,Servlet,JSP,DB,JDBC,Mail,Java,HTML,JavaScript,Struts,Spring,Hibernate,嵌入式开发,手机,智能终端,北京传智播客教育,Java基础加强,焦宁波,Eclipse的使用,工作空间(workspace)、工程(project)在eclipse下Java程序的编写和运行,及java运行环境的配置。快捷键的配置,常用快捷键:内容提示:Alt+/快速修复:Ctrl+1导包:Ctrl+shift+O格式化代码块:ctrl+shift+F删除一行:Ctrl+D添加注释:Ctrl+Shift+/Ctrl+/除
2、去注释:Ctrl+Shift+Ctrl+/程序的调试和运行(写数组反序输出程序演示)F5(跳入)F6(跳过)F7(跳出)案例JUnit(Java 单元测试),JDK 5.0 新特性,JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效、清晰,安全的代码。静态导入自动装箱/拆箱增强for循环可变参数枚举 反射 内省泛型元数据,静态导入,JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。语法:import static 包名.类名.静态属性|静态方法|*例如:import static java.lan
3、g.Math.*案例求圆的面积、任意半径圆的面积,自动装箱/拆箱,JDK5.0的语法允许开发人员把一个基本数据类型直接赋给对应的包装类变量,或者赋给 Object 类型的变量,这个过程称之为自动装箱。自动拆箱与自动装箱与之相反,即把包装类对象直接赋给一个对应的基本类型变量。典型应用:List list=new ArrayList();list.add(1);int j=(Integer)list.get(0);,Wrapper Class,装箱,拆箱,Auto,思考:String str=“itcast”;是否是自动装箱?,增强for循环,引入增强for循环的原因:在JDK5以前的版本中,遍历
4、数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦!因此JDK5中定义了一种新的语法增强for循环,以简化此类操作。增强for循环只能用在数组、或实现Iterable接口(Set/List)的集合类上。语法格式:for(变量类型 变量:需迭代的数组或集合),增强for循环,使用增强for循环的几个注意事项(以下程序的输出结果?),int arr=new int5;for(int num:arr)num=1;System.out.println(arr0);,List list=new ArrayList();list.add(xxx);for(String str:list)str
5、=yyy;System.out.println(list.get(0);,增强for循环在迭代集合时必须使用范型,否则就只能采用Object接收。,可变参数,测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组又传参的情况。public static List asList(T.a)注意:传入基本数据类型数组的问题。从JDK 5开始,Java 允许为方法定义长度可变的参数。语法:public void foo(int args)注意事项:调用可变参数的方法时,编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变
6、参数。可变参数只能处于参数列表的最后,所以一个方法最多只能有一个长度可变的参数。,枚举类,为什么需要枚举?一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。举例 交通灯(红、黄、绿)性别(男、女)星期(星期一、二、三.)分数等级(A、B、C、D、E)JDK 5新增的 enum 关键字用于定义一个枚举类。,枚举类,枚举的实现使用enum定义枚举类在枚举类中定义枚举值(大写)枚举类具有如下特性:枚举类也是一种特殊形式的Java类。枚举类中声明的每一个枚举值代表枚举类的一个实例对象。与ja
7、va中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。枚举类也可以实现接口(序列化)、或继承抽象类。JDK5中扩展了swith语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型(enum)。若枚举类只有一个枚举值,则可以当作单态设计模式使用。练习:请编写一个关于星期几的枚举WeekDay,要求:枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。,枚举类,Java中声明的枚举类,均是类的孩子,它继承了Enum类的所有方法。常用方法:nam
8、e()返回枚举常量的nameordinal()返回枚举常量的声明索引valueof(Class enumClass,String name)返回指定名称的枚举类values()此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。,注意:JDK API文档中并不是包含了所有类、所有类的方法、字 段,没有被API收录的类、方法、字段是SUN公司内部使用的,开 发人员如果知道,也可以使用。,反射(Reflect),什么是反射?反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:包、成员变量、方法、构造方法等等信息,利用反射技术可以对一
9、个类进行解剖,把各个组成部分映射成与之相对应的对象。反射用在哪里?框架学习反射应该掌握些什么?获取类的字节码、构造器、方法、字段对象的方法和使用。,Class类,Class类用于表示.class文件,画图演示一个对象的创建过程。如何得到某个class文件对应的class对象。类名.class,知道类名对象.getClass()Class.forName(“类名”)推荐使用数组类型的Class实例对象Class.isArray()Class.isEnum()总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int,void,Constructor类,Constructor类的
10、实例对象代表类的一个构造方法。得到某个类所有的公共构造方法,例:Constructor constructors=Class.forName(java.lang.String).getConstructors();得到某个类所有的构造方法,例:Constructor constructors=Class.forName(java.lang.String).getDeclaredConstructors()得到某一个构造方法,例:Constructor constructor=Class.forName(“java.lang.String”).getConstructor(StringBuffe
11、r.class);利用构造方法创建实例对象:String str=(String)constructor.newInstance(“abc”);Class类的newInstance()方法也可创建类的实例,其内部工作原理是先得无参的构造方法,再用构造方法创建实例对象。String obj=(String)Class.forName(java.lang.String).newInstance();,Field类,Field类代表某个类中的一个成员变量问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果是与对象关联,那关联的是哪个
12、对象呢?所以字段Field x 代表的是x的定义,而不是具体的x变量。(注意访问权限的问题)示例代码:ReflectPoint point=new ReflectPoint(1,7);Field y=Class.forName(cn.itcast.corejava.ReflectPoint).getField(y);System.out.println(y.get(point);/Field x=Class.forName(cn.itcast.corejava.ReflectPoint).getField(x);Field x=Class.forName(cn.itcast.corejava.
13、ReflectPoint).getDeclaredField(x);x.setAccessible(true);/获取私有属性 暴力反射 x.setInt(new User(),345);System.out.println(x.get(point);,Method类,Method类代表某个类中的一个成员方法得到类中的某一个方法:例子:Method charAt=Class.forName(java.lang.String).getMethod(charAt,int.class);调用方法:通常方式:System.out.println(str.charAt(1);反射方式:System.ou
14、t.println(charAt.invoke(str,1);注意:如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该Method对象对应的是一个静态方法!jdk1.4和jdk1.5的invoke方法的区别:Jdk1.5:public Object invoke(Object obj,Object.args)Jdk1.4:public Object invoke(Object obj,Object args),即按jdk1.4的语法,需要将一个数组作为参数传递给invoke方法时,数组中的每个元素分别对应被调用方法中的一个参数,所以,调用cha
15、rAt方法的代码也可以用Jdk1.4改写为 charAt.invoke(“str”,new Object1)形式。,用反射方式执行某个类中的main方法,目标:写一个程序,这个程序能够根据用户提供的类名,去执行该类中的main方法。用普通方式调完后,大家要明白为什么要用反射方式去调啊?问题:启动Java程序的main方法的参数是一个字符串数组,即public static void main(String args),通过反射方式来调用这个main方法时,如何为invoke方法传递参数呢?按jdk1.5的语法,整个数组是一个参数,而按jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字
16、符串数组作为参数传递给invoke方法时,javac会到底按照哪种语法进行处理呢?jdk1.5肯定要兼容jdk1.4的语法,会按jdk1.4的语法进行处理,即把数组打散成为若干个单独的参数。所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new String“xxx”),javac只把它当作jdk1.4的语法进行理解,而不把它当作jdk1.5的语法解释,因此会出现参数类型不对的问题。解决办法:mainMethod.invoke(null,new Objectnew Stringxxx);mainMethod.invoke(null,(Object)n
17、ew String“xxx”);编译器会作特殊处理,编译时不把参数当作数组看待,也就不会数组打散成若干个参数了。,内省(Introspector)JavaBean,什么是JavaBean和属性的读写方法?访问JavaBean属性的两种方式:直接调用bean的setXXX或getXXX方法。通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式。通过PropertyDescriptor类操作Bean的属性通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器(PropertyDescriptor),通
18、过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。,方式一,User u=new User();PropertyDescriptor pd=new PropertyDescriptor(x,User.class);Method m=pd.getWriteMethod();m.invoke(u,348);Method re=pd.getReadMethod();System.out.println(re.invoke(u);,方式二,User u=new User();BeanInfo info=Introspector.getBeanI
19、nfo(User.class);PropertyDescriptor pd=info.getPropertyDescriptors();for(PropertyDescriptor temp:pd)String name=temp.getName();System.out.println(name);,内省beanutils工具包,Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。Beanutils工具包的常用类:BeanUtils 有默认的转型机制 Pro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- day03Java 基础 加强
链接地址:https://www.31ppt.com/p-6504423.html