黑马程序员-张孝祥Java基础加强(PART1)
来源:互联网 发布:阿里云服务器隐藏ip 编辑:程序博客网 时间:2024/05/23 20:24
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
知识点:
1.Java5的几个新特性,包括静态导入、可变参数、增强for循环、基本数据类型的自动装箱与拆箱、枚举;
2.反射;
3.内省;
4.注解。
一、Java5的新特性
1.静态导入
import语句可以导入一个类或一个保重的所有类,而import static语句可以只导入一个类中的所有或某个静态方法,这就是静态导入。静态导入某个类或静态方法之后,可以直接调用导入的静态方法无需通过类名。例如:
2.可变参数
如果一个方法的参数个数不确定,可以使用可变参数,格式:参数类型... 变量名
特点:
(1)只能出现在参数列表的最后,如void method(int x, int... args);不可以写成void method(int... args, int x);;
(2)...位于变量类型和变量名之间,前后有没有空格都可以;
(3)调用含有可变参数的方法时,编译器会为该可变参数创建一个隐含的数组,在方法体中可以通过数组的方式操作可变参数。
示例:
Class类是描述Java类这类事物的类,就好像Person类是描述人这类事物的类。Class类描述了类的名字、类的访问属性、类所属的包名、字段名称的列表、方法名称的列表等等。
一个类被类加载器加载到内存中,占用一片存储空间,这片空间里的内容就是类的字节码,不同类的字节码是不同的,这些字节码可以分别用一个对象来表示,这些对象显然具有相同的类型,这个类型就是Class类。也即是说,Class类是内存中字节码的抽象,Class类的实例对象就是对应类在内存中的字节码。一个类在虚拟机中通常只有一份字节码。
得到字节码对应的实例对象的(Class类型)的三种方法:
(1)类名.class,比如String.class;
(2)对象.getClass(),比如new Date().getClass();
(3)class.forName(“完整类名”),比如class.forName("java.util.Date")。
有九种预定义的Class对象,表示八种基本数据类型和void。这些类对象由Java虚拟机创建,与其表示的基本类型同名,即boolean、byte、char、short、int、long、float、double。需要注意的是int.class不等于Integer.class,因为Interger是引用数据类型,但是int.class和Integer.TYPE相同,因为Integer.TYPE就是表示int的Class实例。其他类同。
注意:加载字节码并调用其方法,没有看到类的静态代码块被执行,只有当第一个实例对象被创建时,静态代码块才会执行。准确的说,静态代码块不是在类被加载的时候被执行的,而是在第一个实例对象被创建时才执行的。
2.反射
反射就是把Java类中的各种成分映射成相应的Java类。也就是说,Java类用Class类来表示,Java类中的组成部分,如成员变量、方法、构造方法、包等也用相应的类来表示,它们是Filed、Method、Constructor、Package等。一个类的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象。
(1)Constructor类
Constructor代表某个类中的一个构造方法。
(2)Field类
Filed类代表某个类中的一个成员变量。
定义一个ReflectPoint类进行演示。
下面是Filed类的示例代码将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的“b”改成“a”。(3)Method类Method类代表某个类中的一个成员方法
如果传递给Method对象的第一个参数为null,说明该Method对象对应的是一个静态方法。(4)用反射方法执行某个类中的main方法
目标:通过用户提供的类名,执行该类的main方法。
先定义一个包含主函数的类
三、内省(IntroSpector)
1.JavaBean
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类的方法主要用于访问私有的字段,且方法名符合某种命名的规则。
如果要在两个模块之间传递对个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,需要通过相应的方法来访问,即setter和getter。JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId和getId,那属性名就是id,也就是说去掉set和get,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,就把首字母也改成小写,否则保持不变。如setId的属性名为id,isLast的属性名为last,setCPU的属性名为CPU。总之,一个类被当做JavaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到Java类内部的成员变量。
jdk中提供了对JavaBean进行操作的一套API,对JavaBean的操作就称为内省。
2.内省综合案例
首先更改ReflectPoint类,使其符合JavaBean的定义。
3.BeanUtils工具包
BeanUtils是Apache提供的一个操作JavaBean的工具包。
在上面代码的基础上,BeanUtils操作方式如下:
注意:使用BeanUtils类get属性时返回的结果为字符串,set属性时可以接收任意类型的对象,通常使用字符串;使用PropertyUtils类get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型。四、注解
1.了解注解以及几个基本注解
注解相当于一种标记,在程序中加了注解就相当于为程序打上了某种标记,以后编译器、开发工具和其他程序可以通过反射来了解你的类和各种元素上有无何种标记。标记可以加在包、类、字段、方法、方法的参数和局部变量上。
三种基本的注解:
@SuppressWarnings,压缩警告。比如调用一个过时的方法,编译器会发出警告,加上压缩警告的注解就不会了;
@Deprecated,表明该元素已过时。当别人再调用该方法是,编译器会给出警告。
@Override,表示覆盖。该注解可以防止,继承自父类的方法定义写错。
通过Class类的isAnnotationPresent和getAnnnotation方法可以判断和获取某个类中的注解。
2.自定义注解及其应用
@Retention和@Target也是注解,称为元注解,即注解的注解。@Retention表示注解存在的阶段,取值有三种,RetetionPolicy.SOURCE、RetetionPolicy.CLASS和RetetionPolicy.RUNTIME,分别对应Java原文件、.class文件和内存。
@Target表示注解可以修饰的元素类型,取值有ElementType.TYPE、ElementType.FIELD、ElementType.METHOD、ElementType.PARAMETER、ElementType.CONSTRUCTOR、ElementType.LOCAL_VIRIABLE、ElementType.ANNOTATION_TYPE、ElementType.PACKAGE,,分别对应类(包括普通类,接口,注解、枚举)、字段、方法、参数、构造方法、局部变量、注解和包。
3.为注解增加属性
枚举的属性可以是基本数据类型、String、Class、枚举、其他注解,以及这些类型的数组。
如果注解中有一个名称为value的属性,且你只想设置value属性(其他属性都采用默认值或者只有一个value属性),那么可以省略”value=“部分。如果数组属性的值只有一个元素,这时属性值可以省略大括号。
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
- 黑马程序员-张孝祥Java基础加强(PART1)
- 黑马程序员-张孝祥Java基础加强(PART1)
- 黑马程序员-----java基础加强(二)
- 黑马程序员--Java基础加强(一)
- 黑马程序员--Java基础加强(二)
- 黑马程序员--Java基础加强(三)
- 黑马程序员--Java基础加强(四)
- 黑马程序员---JAVA基础加强(十七)
- 黑马程序员---JAVA基础加强(十八)
- 黑马程序员----java基础加强(1)
- 黑马程序员----java基础加强(2)
- 黑马程序员----java基础加强(3)
- 黑马程序员----java基础加强(4)
- 黑马程序员----java基础加强(5)
- 黑马程序员-张孝祥Java基础加强(PART2)
- 黑马程序员-Java基础加强
- 黑马程序员---基础加强【java】
- 黑马程序员Java基础加强
- 青牛镇
- [Hadoop源码解读](六)MapReduce篇之MapTask类
- Golang 学习1:开发环境
- [LeetCode]Binary Tree Postorder Traversal
- epoll机制和libevent库学习
- 黑马程序员-张孝祥Java基础加强(PART1)
- Xenu死链接检查工具太卡的设置
- openfire 的配置
- 好记性不如烂笔头——WebService与Remoting
- 女孩网上应聘高薪模特 被骗拍裸照后遭性侵
- 游标的简单用法
- 更改默认的mysql数据库目录
- Could not load the Tomcat server configuration at
- mysql: Communications link failure解决