JavaSE:jdk1.5-1.6新特性笔记,javasejdk1.5-1.6
分享于 点击 5678 次 点评:175
JavaSE:jdk1.5-1.6新特性笔记,javasejdk1.5-1.6
JUnit测试工具:该类中的方法执行顺序:
setUpBeforeClass(); //初始化时调用,相当于init,只运行一次
setUp(); //每次运行测验代码时运行一次
测验代码
tearDown(); //每次运行测验代码时运行一次
tearDownAfterClass() //结束时运行,相当于destory,只运行一次
如果要测试哪个方法,就要在该方法前加上@Test,再到测试类中运行
Junit测试工具使用:
1.建一个JUnit类,写方法调用要测试的类的方法
2.到要测试的类中,直接右击要测试的方法,运行JUnit 测试方法
JDK1.5新特性:
一、静态导入
导包:import static java.lang.math.*;
使用:abs(-1); -->结果为1
二、自动装箱和拆箱
八大基本类型:byte、short、int、long、char、float、double、boolean就是指将基本类型自转成对象,运算时自动将基本类型的对象自动转成基本类型进行运算
装箱:Integer i = 1; //int类型自动转成Integer对象
拆箱:int j = i; //将Integer对象自动转成int类型
三、增加for循环(只能用在数组或实现了iterator接口的类上),只适合从数组中取值
//List集合类取数方法List arr = new ArrayList();
list.add(1);
list.add(2);
for(Object i : arr){
System.out.print(i); //每次取出arr数组的一个元素
}
//Map集合类取数方法
Map map = new HashMap();
Set set = map.entrySet();
for(Object i : set){
Map.Entry me = (Map.Entry)i;
me.getKey();
me.getValue();
}
四、可变参数(可以给方法传递任意数量的参数)
即可以传数组,又可传入多个值,注意不要传基本数据类型的数组List list = Arrays.asList(1,2,3,4,5,6);
或
Integer arr[] = {1,2,3,4,5,6};
List list = Arrays.asList(arr);
注意,这代码会将int数组整个转成一个对象再传进去:
int arr[] = {1,2,3,4,5,6};
List list = Arrays.asList(arr);
自定义可变参数的方法,最多只能有一个可变参数,而且要在最后面
public void sum(int ... a){ //接受任意数量的值,a的值就是一数组
}
五、枚举(限定某个方法的接收的值为指定的值)
定义了一个枚举类enum 类{
A,B,C,D,E,F //new 出了6个该类的对象,分别为A,B,C,D,E,F,此定义必须放在该类第一行
}
得到枚举类名:类.name()
得到枚举中该值处于第几个位置:类.ordinal()
得到枚举中有几个值属性:类.values()
六、反射
1.反射就是把java类中各种成分映射成对象得到类的字节码,只装载一次,以后都用这个字节码new出新对象,下面三种方法得到的是同一个字节码:
类名.class;
new 类名().getClass();
Class.forName(类名);
2.Constructor类(构造方法对应的类)
得到该类的所有构造方法:Constructors[] cs = 类的calss.getConstructors();
得到该类的无参构造方法:Constructors c1 = 类的calss.getConstructor(null);
得到该类的有参构造方法:Constructors c2 = 类的calss.getConstructor(该参数的类型.class如:String.class);
用构造方法new出这个类的对象:
无参的:c1.newInstance(null);
或:类的class.newInstance();
有参的:c2.newInstance(参数值);
3.Field类(变量对应的类)
得到该类的所有公有的变量类:Field[] fs = 类的calss.getFields();
得到该类的所有变量类:Field[] fs = 类的calss.getDeclaredFields();
得到该类的指定变量名的变量类Field:Field f = 类的calss.getField(变量名);
f.setAccessible(true); //设置后可以访问私有变量
得到此对象上的指定变量名:f.get(类对象);
得到此类所有变量名:f
给变量名赋值:f.set(类对象,值);
4.Method类(方法对应的类)
Class clazz = 类.class;
Method[] mds = clazz.getMethods(); //得到该类所有方法
Method md = clazz.getMethod("方法名称",参数类型.class); //得到指定的方法,无参时写null
Method md = clazz.getDeclaredMethod("方法名",参数类型.class); //暴力得到私有的方法
md.setAccessible(true); //设置后可以执行私有方法
m.invoke(类对象,真实参数); //执行该方法,无参时写null,当方法为静态时,对象写null
七、内省(Introspector类)--操作JavaBean
1.PropertyDescriptor pd = new PropertyDescriptor("属性名",JavaBean类.class);Method m = pd.getWriteMethod(); //拿到了该属性的set方法
Method m = pd.getReadMethod(); //拿到了该属性的get方法
m.invoke(JavaBean对象,属性值); //将属性值取出,就是执行get方法
Introspector类 -->拿到所有JavaBean的信息,并操作它:
BeanInfo bi = Introspector.getBeanInfo(JavaBean.class); //拿到JavaBean信息描述
PropertyDescriptor[] pd = bi.getPropertyDescriptors(); //得到操作数组
2.BeanUtils工具包(apache开发的,操作JavaBean)
共两个包:commons-beanutils-1.8.0.jar,commons-logging-1.1.1.jar;
(1)会将传递的数据类型自动转成JavaBean属性的类型(只适只8种基本类型)
BeanUtils.setProperty(JavaBean对象,“属性名”,“属性值”); //给该JavaBean属性赋值
(2)将其他类型转换成相应类型,要在赋值前进行注册
//自已写类型转换器
ConverUtils.register(new Converter(){
public Object convert(Class arg0, Object value){
转换代码;
}
},要转的类型.class);如Date.class
//用现成的类型转换器,注册转换日期类型的转换器,当碰到日期类型时就用转换器转换此类型
ConverUtils.register(new DateLocaleConverter(),Date.class);
BeanUtils.setProperty(JavaBean对象,"birthday",birthday); //给该JavaBean的日期类型的属性赋值
BeanUtils.copyProperties(目标Bean类, 源Bean类); //从源类将属性各值copy到目标属性中
八、泛型(Generic)
1.ArrayList<E>整个称为泛型类型<>读作typeof
E称为类型参数变量,这个E可以换成其他类型
ArrayList<Integer>中的Integer称为实际类型参数
ArrayList<Integer>整个称为参数化的类型ParameterizedType
Map集合操作数据:
Map<String,String> map = new HashMap<String,String>();
map.put("a","123");
map.put("b","456");
//将map集合中每组数据(key和value)合起来放到Set集合中的一个位置
Set<Map.Entry<String,String>> set = map.entrySet();
for(Map.Entry<String,String> entry:set){
entry.getKey(); //取出键
entry.getValue(); //取出值
}
2.自定义泛型
<T>:接收任意类型的参数
有三种方式定义:
类级别泛型:当所有方法使用同一个泛型时,只作用于非静态成员
方法级别定义:
变量级别定义:
<?>是用于引用对象,不能调用与类型相关的方法
<? extends 父类>用于指定?所引用的对象类型必须是其子类,包含其父类
<? super 子类>用于指定?所引用的对象类型必须是其父类,包含其子类
九、注解(Annotation)
1.三个基本的 Annotation:@Override: 限定重写父类方法, 该注解只能用于方法
@Deprecated: 用于表示某个程序元素(类, 方法等)已过时
@SuppressWarnings("unchecked"): 抑制编译器警告
2.自定义 Annotation:
注解的属性只能使用原始类型,不能用包装类型
1.建一个注解类:
public @interface 类{
String name(); //定义了注解的一个属性
String password() default "bbb"; //给该属性赋了默认值
String[] arr(); //定义了注解的一个数组属性
String value(); //如果定义了这个属性,则在引用赋值时不用写变量名
}
2.引用自已写的注解类(在要注解的类中写):
@类(name="aaa") //给注解属性赋值
@类(password) //引用注解属性,值使用默认值
@类(arr={"c","3"}) //给注解数组属性赋值
@类("ddd") //给value属性赋值
3.元注解(Annotation):
元注解用于对注解进行限定的注解
@Retention:修饰Annotation的定义,规定该注解在哪个是间起作用,如运行时、编译时等
@Target:修饰Annotation的定义,规定该注解能作用在哪些范围,如类,方法等
@lnherited:修饰Annotation的定义,规定该注解可以被继承,即当注解加在接口上时,实现了此接口的子类也可以继承注解的效果
4.注解的反射:
注解类 p = Method.getAnnotation(注解类.class); //返回该类中该方法的注解
p.value(); //得到注解类中value属性值
不用IE浏览器,自已写类访问Web资源:
URL url = new URL("http://localhost:8080/myweb/index.jsp"); //得到URL地址的URL对象
HttpUrlConnection url = (HttpUrlConnection)url.openConnection(); //得到连接上web资源的连接器
conn.getHeaderField("头字段"); //得到指定头字段
//读取web服务器资源
InputStream in = conn.getInputStream();
byte buf[] = new byte[1024];
int len = 0;
while((len = in.read(buf)) > 0){
打印出Web资源
}
//写数据web给服务器
conn.setDoOutput(true); //设置客户端可以写数据给web服务器
OutputStream out = conn.getOutputStream();
out.write("属性=值".getBytes());
conn.getResponseCode();
相关文章
- 暂无相关文章
用户点评