我的传智播客之javaweb_day07学习总结

来源:互联网 发布:还珠格格 知乎 编辑:程序博客网 时间:2024/05/22 12:49

myeclipse的安装和使用

debug调试模式

使用这种模式,调试程序(看到程序里面数据的变化)

  • 使用debug第一步需要设置一个断点
  • 使用debug as方式,运行程序
  • 可以让程序向下执行
    • 使用step over F6(单步执行)
    • resume F8 表示调试结束,直接向下运行
      • 当还有下个断点,会跳到下个断点
  • debug另外一个用途:查看程序的源代码
    • step into F7 进入到方法
    • step return 返回

myeclipse的快捷键

public class TestDemo4 {    public static void main(String[] args) {        // 代码提示 alt+/        // 代码修复 ctrl+1        // ctrl+shift+o        List list = new ArrayList();        // 单行注释 ctrl+/        // 取消单行注释 ctrl+/        // int sum = 0;        // 多行注释 ctrl+shift+/        // 取消多行注释 ctrl+shift+\        int a = 1;        int b = 2;        // 删除行 ctrl+d        // 代码的格式化 ctrl+shift+f    }}

junit的使用

  • 单元测试
  • 测试对象是一个类中的方法
  • junit不是javase的一部分,需要导入jar包,myeclipse自带junit
  • junit版本 3.x 4.x
    • 单元测试方法的方法命名规则 public void 方法名() {}
  • 使用注解方式运行测试方法,在方法上面
    • @Test 表示进行单元测试
      • 右键方法名 点击run as => junit test
    • @Ignore 表示这个方法不进行单元测试
    • @Before 在每个方法之前运行
    • @After 在每个方法之后运行
    • 断言(了解)

jdk5.0新特性

  • 泛型、枚举、静态导入、自动拆装箱、增强for、可变参数
  • 反射

泛型的简介

为什么要使用泛型?一般使用在集合上,防止类型转换错误

泛型使用在方法上

  • 定义一个数组,实现指定位置上数组元素的交换
  • 方法逻辑相同,只是数据类型不同,这个时候使用泛型方法
  • 使用泛型方法,需要定义一个类型,使用大写字符表示 T:表示任意的类型
  • 写在返回值之前 <T>
  • 表示定义了一个类型,这个类型是T,然后在下面就可以使用这个类型了

泛型在类上的使用(了解)

在一个类上定义一个类型,这个类型可以在类里面直接使用,但这个类型不能在静态方法上使用。

枚举的简介

枚举的api的操作

  • name():返回枚举的名称
  • ordinal():枚举的下标
  • valueof(Class enumClass, String name):得到枚举的对象
  • 不在api但编译时生成的两个方法
    • valueof(String name):转换枚举对象
    • values():获取所有枚举对象数组

静态导入

可以在代码里面直接使用静态导入方式,导入静态方法或常量。

import static xxx.xxx.xxx;

自动拆装箱

  • 装箱
    • 把基本的数据类型转换成包装类
  • 拆箱
    • 把包装类转化成基本的数据类型

增强for循环

  • 使用场景:数组;实现Iterable接口的集合 可以使用增强for循环
  • 出现目的:为了替代迭代器
  • 增强for底层就是迭代器

内容补充

泛型擦除:首先泛型只是出现在源代码阶段,当编译之后泛型不存在了。

可变参数

可变参数的定义方法 数据类型…数组的名称

反射的原理

应用在一些通用性比较高的代码中,在后面学到的框架,大多数都是使用反射来实现的。

在框架开发中,都是基于配置文件开发。

在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某个方法来执行。

类中的所有内容:属性、没有参数的构造方法、有参数的构造方法、普通方法。

  • 反射的原理
    • 首先需要把java文件保存到本地硬盘 .java
    • .java文件编译成.class文件
    • 使用jvm把.class文件通过类加载器加载到内存中
    • .class文件在内存中使用Class类表示
    • 当使用反射时,首先需要获取到Class类,得到了这个类之后,就可以得到class文件里的所有内容:包括属性、构造方法、普通方法。
  • 属性用Field表示
  • 构造方法用Constructor表示
  • 普通方法用Method表示
// 首先要获取Class类// 获取Class类Class clazz1 = Person.class;Class clazz2 = new Person().getClass();Class clazz3 = Class.forName("cn.itcast.test09.Person");

使用反射操作无参数的构造方法

// 操作无参数的构造方法@Testpublic void test1() throws Exception {    // 得到Class    Class c1 = Class.forName("cn.itcast.test09.Person");    // 得到Person类的实例    Person p = (Person) c1.newInstance();    // 设置值    p.setName("zhangsan");    System.out.println(p.getName());}

使用反射操作有参数的构造方法

// 操作有参数的构造方法@Testpublic void test2() throws Exception {    // 得到Class    Class c2 = Class.forName("cn.itcast.test09.Person");    // 使用有参数的构造方法    // c1.getConstructors(); // 获取所有的构造方法    // 传递是有参数的构造方法里面参数类型,类型使用class形式传递    Constructor cs = c2.getConstructor(String.class, String.class);    // 通过有参数的方法构造方法设置值    // 通过有参数的方法构造方法创建Person实例    Person p1 = (Person) cs.newInstance("lisi", "100");    System.out.println(p1.getId() + " " + p1.getName());}

使用反射操作属性

// 操作name属性@Testpublic void test3() throws Exception {    // 得到Class    Class c3 = Class.forName("cn.itcast.test09.Person");    // 得到Person类的实例    Person p = (Person) c3.newInstance();    // 得到name属性    // c3.getDeclaredMethods();// 得到所有属性    // 通过属性的名称获取属性    Field f1 = c3.getDeclaredField("name");    // 私有属性需要设置可以操作私有属性    f1.setAccessible(true);    // 设置name值    f1.set(p, "wangwu"); // 相当于p.nmae="wangwu"    System.out.println(f1.get(p)); // 相当于p.name}

使用反射操作普通方法

// 操作普通方法@Testpublic void test4() throws Exception {    // 得到Class    Class c4 = Class.forName("cn.itcast.test09.Person");    // 得到Person类的实例    Person p = (Person) c4.newInstance();    // 得到普通方法    // c4.getMethods();// 得到所有的普通方法    Method m1 = c4.getDeclaredMethod("setName", String.class);    // 操作的是私有方法    // m1.setAccessible(true);    // 让setName方法执行,执行设置值    m1.invoke(p, "zhangsan");    System.out.println(p.getName());}

当操作的方法是静态的方法:method.invoke(null, paramArgs);

0 0
原创粉丝点击