我的传智播客之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 在每个方法之后运行
- 断言(了解)
- @Test 表示进行单元测试
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
- 我的传智播客之javaweb_day07学习总结
- 我的传智播客之javaweb_day01学习总结
- 我的传智播客之javaweb_day02学习总结
- 我的传智播客之javaweb_day03学习总结
- 我的传智播客之javaweb_day04学习总结
- 我的传智播客之javaweb_day05学习总结
- 我的传智播客之javaweb_day06学习总结
- 我的学习总结
- 我的学习总结
- 2012—年度总结,我的学习之旅
- 我的Java学习总结
- 我的Shaderlab学习总结
- Python3 我的学习总结
- 我的FPGA之路 - 入门篇(暨我的第一阶段学习总结 )
- 我的学习之路
- 我的学习之路
- 我的学习之路
- 我的学习之路
- (HDU 3586 Information Disturbing) 树型DP
- 《程序猿的第n+2天》-Myeclipse下图片无法显示问题
- 删除任务
- Retrofit 基本使用教程
- Ubuntu下搜狗输入法突然无法输入中文
- 我的传智播客之javaweb_day07学习总结
- 操作系统原理
- jquery的trigger方法
- shell是什么
- Ionic从零单排(四)——Ionic程序分离不同controller
- springmvc 使用validation验证!
- Codeforces Round #258 (Div. 2)题解
- window.onload 与 $(document).ready()区别
- MySQL 命令