-
- 素材大小:
- 3 MB
- 素材授权:
- 免费下载
- 素材格式:
- .ppt
- 素材上传:
- lipeier
- 上传时间:
- 2020-01-03
- 素材编号:
- 248779
- 素材类别:
- 课件PPT
-
素材预览
这是java基础加强ppt,包括了Eclipse vs MyEclipse简介和使用,静态导入,自动装箱/拆箱,增强for循环,枚举类,Class类,利用框架操作JavaBean的属性,泛型方法的产生等内容,欢迎点击下载。
java基础加强ppt是由红软PPT免费下载网推荐的一款课件PPT类型的PowerPoint.
Java基础加强(上) Eclipse vs MyEclipse简介和使用 IBM2001/扩展性/Java编写开源/跨语言/跨平台 工作空间(workspace)、工程(project) 在eclipse下Java程序的编写和运行,及java运行环境的配置。 快捷键的配置,常用快捷键: 内容提示:Alt + / 快速修复:Ctrl + 1 导包:Ctrl + shift + O 格式化代码块:Ctrl + Shift + F 代码位置调换:Alt+上下键 添加/除去单行注释 Ctrl+/ 添加/除去多行注释 Ctrl+Shift+/和Ctrl+Shift+\ 打印语句快速提示:Syso+Alt+/ 程序的调试Debug模式 Junit使用 JDK 5.0 新特性 JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效、清晰,安全的代码。 静态导入 自动装箱/拆箱 增强for循环 可变参数 枚举 反射 泛型 静态导入 JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。 语法: import static 包名.类名.静态属性|静态方法|* 例如: import static java.lang.System.out import static java.lang.Math.* 自动装箱/拆箱 JDK5.0的语法允许开发人员把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 类型的变量,这个过程称之为自动装箱。 自动拆箱与自动装箱与之相反,即把包装类对象直接赋给一个对应的基本类型变量。 典型应用: List list = new ArrayList(); list.add(1); int j = (Integer)list.get(0); 增强for循环 引入增强for循环的原因:在JDK5以前的版本中,遍历数组或集合中的元素,需先获得数组的长度或集合的迭代器,比较麻烦! 因此JDK5中定义了一种新的语法——增强for循环,以简化此类操作。增强for循环只能用在数组、或实现Iterator接口的集合类上 语法格式: for(变量类型 变量 :需迭代的数组或集合){} 小细节:向集合中取元素时同时加元素,需要 使用迭代器来完成。 增强for循环 使用增强for循环的几个注意事项(以下程序的输出结果?) 可变参数 测试JDK中具有可变参数的类Arrays.asList()方法。分别传多个参、传数组,传数组又传参的情况。 注意:传入基本数据类型数组的问题。 从JDK 5开始, Java 允许为方法定义长度可变的参数。语法: public void foo(int … args){ } 注意事项: 调用可变参数的方法时, 编译器将自动创建一个数组保存传递给方法的可变参数,因此,程序员可以在方法体中以数组的形式访问可变参数 可变参数只能处于参数列表的最后, 所以一个方法最多只能有一个可变参数 枚举类 为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。 JDK 5新增的 enum 关键字用于定义一个枚举类。 枚举类 枚举类具有如下特性: 枚举类也是一种特殊形式的Java类。 枚举类中声明的每一个枚举值代表枚举类的一个实例对象。 与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。 枚举类也可以实现接口、或继承抽象类。 JDK5中扩展了switch语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。 若枚举类只有一个枚举值,则可以当作单态设计模式使用。 练习:请编写一个关于星期几的枚举WeekDay,要求: 枚举值:Mon,Tue,Wed,Thu,Fri,Sat,Sun 该枚举要有一个方法,调用该方法返回中文格式的星期。 枚举类 Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。常用方法: name() ordinal() valueOf(Class enumClass, String name) values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。 反射 什么是反射? 反射就是把Java类中的各种成分映射成一个个的java对象。例如,一个类有:成员变量,方法,构造方法,包等等信息,利用反射技术可以对一个类进行解剖,把各个组成部分映射成一个个对象。 反射用在哪里?框架 学习反射应该掌握些什么? Class类 Class类用于表示.class文件,画图演示一个对象的创建过程。 如何得到某个class文件对应的class对象。 类名.class 对象.getClass() Class.forName(“类名”) 总之,只要是在源程序中出现的类型,都有各自的Class实例对象,例如,int.class,int[].class,void.class… Constructor类 Constructor类的实例对象代表类的一个构造方法。 得到某个类所有的构造方法,例: Constructor [] constructors= Class.forName("java.lang.String").getConstructors(); 得到某一个构造方法,例: Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class); 利用构造方法创建实例对象: String str = (String)constructor.newInstance(“abc”); Class类的newInstance()方法也可创建类的实例,其内部工作原理是先得无参的构造方法,再用构造方法创建实例对象。 String obj =(String)Class.forName("java.lang.String").newInstance(); 反射公共,私有和保护的构造方法 // public Person() @Test public void test1() throws Exception { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); Constructor c = clazz.getConstructor(null); Person p = (Person) c.newInstance(null); } // protected Person()或private Person() @Test public void test2() throws Exception { Class clazz = Class.forName("cn.itcast.java.reflect.Person"); Constructor c = clazz.getDeclaredConstructor(null); c.setAccessible(true); Person p = (Person) c.newInstance(null); } Field类 Field类代表某个类中的一个成员变量 问题:得到的Field对象是对应到类上面的成员变量,还是对应到对象上的成员变量?类只有一个,而该类的实例对象有多个,如果是与对象关联,那关联的是哪个对象呢?所以字段fieldX 代表的是x的定义,而不是具体的x变量。(注意访问权限的问题) Method类 Method类代表某个类中的一个成员方法 得到类中的某一个方法: 例子: Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class); 调用方法: 通常方式:System.out.println(str.charAt(1)); 反射方式: System.out.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方法时,数组中的每个元素分别对应被调用方法中的一个参数,所以,调用charAt方法的代码也可以用Jdk1.4改写为 charAt.invoke(“str”, new Object[]{1})形式。 用反射方式执行某个类中的main方法 问题: 启动Java程序的main方法的参数是一个字符串数组,即public static void main(String[] args),通过反射方式来调用这个main方法时,如何为invoke方法传递参数呢?按jdk1.5的语法,整个数组是一个参数,而按jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字符串数组作为参数传递给invoke方法时,javac会到底按照哪种语法进行处理呢?jdk1.5肯定要兼容jdk1.4的语法,会按jdk1.4的语法进行处理,即把数组拆分成为若干个单独的参数。所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new String[]{“xxx”}),javac只把它当作jdk1.4的语法进行理解,而不把它当作jdk1.5的语法解释,因此会出现参数类型不对的问题。 解决办法: mainMethod.invoke(null,new Object[]{new String[]{"xxx"}}); mainMethod.invoke(null,(Object)new String[]{“xxx”}); ,编译器会作特殊处理,编译时不把参数当作数组看待,也就不会将数组拆分成若干个参数了 内省(Introspector) — JavaBean 什么是JavaBean和字段/属性的读写方法? 访问JavaBean属性的两种方式: 直接调用bean的setXXX或getXXX方法。 通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式。 通过PropertyDescriptor类操作Bean的属性 通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。 利用内省操作JavaBean的属性 public void test1() throws Exception{ Student s = new Student(); PropertyDescriptor pd = new PropertyDescriptor("name",Student.class); Method m = pd.getWriteMethod(); m.invoke(s,"jack"); //new Student().setName("jack") m = pd.getReadMethod(); String name = (String)m.invoke(s,null); //new Student().getName() System.out.println("name="+name); } public void test2() throws Exception{ BeanInfo bi = Introspector.getBeanInfo(Student.class); PropertyDescriptor[] pds = bi.getPropertyDescriptors(); for(PropertyDescriptor pd : pds){ System.out.println(pd.getName()); } } 框架—beanutils工具包 Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。 Beanutils工具包的常用类: BeanUtils ConvertUtils.register(Converter convert, Class clazz) 自定义转换器 内置转换器 利用框架操作JavaBean的属性 ConvertUtils.register( new DateLocaleConverter(),Date.class); Student s = new Student(); BeanUtils bu = new BeanUtils(); bu.setProperty(s, "name", "jack"); bu.setProperty(s, "age", “31"); bu.setProperty(s, "birthday", "1980-7-23"); System.out.println(bu.getProperty(s, "name")); System.out.println(bu.getProperty(s, "age")); System.out.println(bu.getProperty(s, "birthday")); 泛型(Generic)—泛形的作用 JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转换,这样不可避免就会引发程序的一些安全性问题。例如: 泛型(Generic) —泛形的作用 JDK5中的泛形允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)。 注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。 泛形的基本术语,以ArrayList
为例:<>念着typeof ArrayList 中的E称为类型参数变量 ArrayList 中的Integer称为实际类型参数 整个称为ArrayList 泛型类型 整个ArrayList 称为参数化的类型ParameterizedType 泛型典型应用 使用迭代器迭代泛形集合中的元素。 使用增强for循环迭代泛形集合中的元素。 存取HashMap中的元素。 使用泛形时的几个常见问题: 使用泛形时,泛形类型须为引用类型,不能是基本数据类型 ArrayList list = new ArrayList 孙鑫java ppt:这是孙鑫java ppt,包括了Java的起源,我们为什么要用Java,Java跨平台的原理,Java开发工具包(JDK)的下载,面向对象程序设计,一个简单的例子等内容,欢迎点击下载。
张孝祥java基础ppt:这是张孝祥java基础ppt,包括了配套书籍,Java邮件开发介绍,课程目标,为什么要学习邮件开发,如何学习邮件开发,电子邮件的一些基本常识,邮件内容的组织结构等内容,欢迎点击下载。
javamail ppt:这是javamail ppt,包括了JavaMail基础知识,发送简单邮件,发送SMTP身份认证的邮件,接收邮件,邮件附件的处理等内容,欢迎点击下载。