黑马程序员——java高新技术2学习笔记整理
来源:互联网 发布:收音机mac版 编辑:程序博客网 时间:2024/06/04 18:58
java高新技术2学习笔记整理
1:BeanUtils工具包:提供了一些静态方法,可以操作JavaBean的类,BeanUtils.getProperty(p,"age"); 返回的是个字符串。
调用了getProperty方法,获取了p对象中的name变量的值。
BeanUtils.setProperty(p,"age","30"); 将p对象中的name变量的值设置为了"30"。 将int类型的值以String类型传入,它会自动转换。
这里值得注意的是还有一个类PropertyUtils也有相同的方法,PropertyUtils.setProperty(p,"age",20);
这里的变量的值是以变量本身的类型来操作的,而不是一String类型,跟上面有所区别。
注意:这2个方法传入的变量的值的参数是String类型。
2:java1.7的一个新特性,Map map={name:"panxing",age:22}; 可以这样定义一个Map集合的元素。
3:注解(Annotation):注解是用来给javac编译器或者eclipse开发工具提供某些信息的。一个注解是一个类。写一个注解就相当于写了一个类。
a、如果程序中调用了某个已过时的方法,编译器或者eclipse会提示该方法已过时,为了取消这个提示,可以在这个方法上面加上一个@SuppressWarnings(“deprecation”),取消过时警告。
b、在某个方法上面加上一句:@Deprecated 表示这个方法已经过时。告诉后面用这个方法的人最好不要用了。但是也不能将这个方法删除,因为有人调用了这个方法,删除了的话别人的程序就会出错。
c、检查 某个方法是否出错但是编译器又不现实错误,则可以在这个方法上面加上@Override注解。例如当覆盖equals方法时传入的参数应该是Object对象,而如果传入了其他参数,则加上这个标记就可以检查出这个错误。
以上是3个注解的应用。
标记除了可以加在方法上面,还可以加在类,包,成员变量,局部变量等上面。
4:注解的应用:自定义一个注解,将该注解应用到某个类上面,在通过一个类调用这个加了注解的类验证这个注解。一共要用到3个类。
public @interface ItcastAnnotation {} 自定义一个注解。
根据时期的不同,注解会保存到3个不同的时期:一个是java源文件时期,一个是class文件也就是编译时期 ,还有一个是运行时期——内存中的字节码。
这是可以在注解上面在增加一个注解@Retention,有3种不同的取值分别对应不同的时期:
1、RetetionPolicy.SOURCE 2、RetentionPolicy.CLASS 3、RetetionPolicy.RUNTIME 这3个值是一个枚举类中的值。
@Target 注解的作用:用于说明该注解可以用在哪个成分上面。如下:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
ElementType是一个枚举,还有很多其他的成员。
Type:一个接口,用来描述事物的类型。包括接口,枚举,注解,类等都是一个类型。
20:给注解增加属性:
public @interface ItcastAnnotation {
String color() default "red"; 让color属性的值默认是red。
String value(); 当注解只有一个属性的时候,可以不写属性名,直接写属性的值。
NewAnnotation AnnotationAttr() default @NewAnnotation(value="newvalue");
}
注解中的属性是一个注解,返回只是一个注解的对象,这个返回来的实例对象的注解还必须加上他自己的属性。
给注解加了2个属性,那摩在用该注解的时候也必须要加上这2个属性。
@ItcastAnnotation("zhujie") 用该注解的时候可以这样写,color的值是red,value的值是zhujie。
注解的属性还可以是枚举,也可以是注解。
5:泛型:泛型会在虚拟机编译完之后给去掉。比如有2个集合,一个是存放String类型的集合,一个是存放Integer类型的集合,编译完之后类型相同。
虚拟机不知道编译完后集合中的元素的类型。只是给编译器看的。
如果定义一个集合,该集合指明了存放的元素是String类型,应为泛型是给编译器看的,此时我可以通过反射的方式拿到该集合的方法,指明我要添加的任意元素。
因为拿到该集合的字节码文件之后泛型已经去掉了,所以可以随意添加任意元素。
public static void main(String[] args) throws Exception{
Collection<String> collection=new ArrayList<String>(); 指明了泛型为String
collection.add("abc");
collection.add("qqq");
System.out.println(collection);
Method collectionMethod=collection.getClass().getMethod("add",Object.class); 拿到字节码后得到add方法,指明类型为Object
collectionMethod.invoke(collection, 5); 往集合中添加了一个Integer照样可以。
System.out.println(collection);
}
6:泛型理解:ArrayList<E> E称为泛型的类型参数或者类型变量。 ArrayList<String> String称为类型的实例参数。
Colng> c=new Vector(); 可以这样写,但是编译器会给警告。
Collection c=new Vector<String>(); 也可以,同上。
一下2行代码不会报错,因为编译器是一行一行读的,不能把2行代码结合起来看。
Vector v=new Vector<String>();
Vector<Object> v=v;
7:通配符:Vector<String> x;
在方法上定义泛型时,如果参数中定义了任意类型的参数,则必须要在返回值前面说明:
例如:public static <T>void swap(T[] arr,int x,int y) T 只能是引用数据类型,不能是基本数据类型。
注:泛型类中的静态方法定义的泛型跟该方法的泛型没有关系,因为静态方法不用对象调用。
8:类加载器:类加载器本身自己也是一个类,加载这个类加载器的类的是BootStrap,但是它不是一个java类,它不需要被别人加载,它是嵌套在java虚拟机内核中的。比如System类,就是由它加载。不同的类加载器负责加载不同的类:
BootStrap--------》JRE/lib/rt.jar 比如:System类等。
ExtClassLoader-----------》JRE/lib/ext/*.jar 比如util中的类等。
AppClassLoader----------》Classpath指定的jar和我们自己写的class文件。
9:类加载器的委托加载机制:当某个类加载器去加载某个类时,会先委托上级,一直推到最顶层的类加载器去加载该类,如果最顶层的类加载器没有没有加载到该类,则有往下推,如果父类类加载器都没有加载到该类,则又有发起者来加载该类,如也没加载到,则会抛出ClassNotFoundException异常。
10:自定义类加载器:自定义的类加载器必须继承ClassLoader,覆盖ClassLoader中的findClass方法。
11:代理:代理类的每一个方法都调用目标类的方法,再加上一些系统功能的代码。
面向方面编程:有很多的方法,这些方法中有一些相同的内容,即交叉业务,这些内容可以看做是这些方法的一个面。
12:创建动态代理类:调用类Proxy中的静态方法getProxyClass(ClassLoader loader,Class<?>... interface);
这个方法的第一个参数可以使任意的类加载器,第二个参数必须是一个接口的Class对象。
public static void main(String[] args) throws Exception {
Class clazz=Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
得到动态代理类的Class对象。
System.out.println(clazz);
Constructor[] constructors=clazz.getConstructors();
for(Constructor constructor:constructors)
{
System.out.println(constructor); 遍历该类中的所有构造函数。
}
Method[] methods=clazz.getMethods();
for(Method method:methods)
{
System.out.println(method); 遍历该类中的所有方法。
}
}
13:Class类中的newInstance()方法可以创建这个字节码文件的对象,但是只会调用该类的空参数构造方法。如果这个类没有空参数的构造方法,则会创建失败。
详细请查看:http://edu.csdn.net/heima/
- 黑马程序员——java高新技术2学习笔记整理
- 黑马程序员——java高新技术1学习笔记整理
- 黑马程序员---Java高新技术学习笔记-2
- 黑马程序员学习笔记八——java高新技术
- 黑马程序员—JAVA高新技术视频笔记
- 黑马程序员——java高新技术学习日记(2)
- 黑马程序员------java学习笔记之高新技术
- 黑马程序员---Java高新技术学习笔记(中篇)
- 黑马程序员-java学习笔记-高新技术_2
- 黑马程序员-java学习笔记-高新技术
- 黑马程序员---Java高新技术学习笔记-1
- 黑马程序员---Java高新技术学习笔记-3
- 黑马程序员—Java高新技术2
- 黑马程序员—java高新技术(2)
- 黑马程序员—java高新技术
- 黑马程序员-Java高新技术笔记2
- 黑马程序员——高新技术加强学习笔记与心得
- 黑马程序员——Java高新技术视频笔记:反射
- nginx多域名设置
- Websphere Application Server 7下Apache Tiles 2.2的异常处理
- 重置Portlet Action-scoped Request属性
- fedora 17 添加yum更新源
- 黑马程序员——java高新技术1学习笔记整理
- 黑马程序员——java高新技术2学习笔记整理
- IE浏览器下返回执行错误的Javascript代码所在的问题(js有用)
- 一些公式
- 答来信 :读书和实践哪个更重要?
- Build Zynq linux kernal time
- retain和copy还有assign的区别,以及引用计数
- iOs开发资源整理
- javascript 小结
- 以shader驱动的次世代3d引擎高效光影效果的解决方案