JAVA基础加强_高新技术_收获四

来源:互联网 发布:nginx 错误日志 编辑:程序博客网 时间:2024/05/19 05:32




JAVA基础加强_高新技术_收获四

java 高级视频教程_网络编程 26.avi-35.avi

ArrayList_HashSet比较及Hashcode分析
ArrayList——有顺序的集合,不管是否有相同的对象存在。
HashSet——先判断是否存在这个对象,如果有就不放这个对象。
Hashcode的作用
如果两个对象的equals相等,那么让其这2个对象的hash值也相等。

当一个对象被存在HashSet集合中,就不能修改这个对象那些参与计算哈希值的字段了,否则对象修改后的哈一直与最初的存储进HashSet集合中的哈希值就不同了。即使在contains方法使用该对象的当前引用作为的参数区HashSet集合中检索对象,也返回不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,从而造成内存泄露。
内存泄露:对象已经不用了,但是还占用内存空间。原始对象未被释放或者被关联的对象未被释放。——用hashcod来举例。
在HashSet中
collection.add(对象1);
对象1.x = 1;
collection.remove(对象1);
这样再查找对象1,由于hashcode值改变,就查找不到对象了。

框架的概念及用反射技术开发框架的原理:
框架——别人掉自己写的类
工具类——自己调用别人写好的类

因为在写程序是无法知道要被调用的类名,在程序中无法直接new某个类的实例对象时,就用反射方式来做。

改为反射不要出现具体类的名字,而是从配置文件中读取。
创建:new——file——config.properties配置文件。
内容:className=java.util.ArrayList

用类加载器的方式管理资源和配置文件:
得到资源方式一:
getRealPath(); //安装目录/内部目录
一定要记住用完整的路径,但完整的路径不是硬盘吗,而是运算出来的。
得到资源方式二:
表示在指定的classpath目录下查找
当前使用的类名.class.getClassLoader().getResourceAsStream(文件资源路径名,例如cn/tomato99/test/filename.txt);
当前使用的类名.class.getResourceAsStream(相对路径filename.txt);
当前使用的类名.class.getResourceAsStream(绝对路径/cn/tomato99/test2/filename.txt);
不管是相对和绝对,内部都是通过ClassLoader加载的。

由内省引出JavaBean的讲解:
内省的概念理解:
IntroSpector--》主要用于对JavaBean进行操作--》JavaBean是特殊的Java类,符合特殊规则的类。
JavaBean:为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。即有getXXX(),setXXX()方法。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。
jaavabean属性介绍:
去掉get、set名称后为Age--》如果第二个字幕是小写,则吧第一个字幕变成小写--》age
例子:
gettime-->time
getTime-->time
getCPU-->CPU

对JavaBean的简单内省操作:
JavaBean对象为值对象,即传递值的对象,成为VO(Value Object)

内省方式理解:
是java语言对bean类属性、时间的一种处理方法(也就是说顶一个javabean对象,我们就可以得到/调用它的所有get/set方法)。

----------------------
关于内省需要再次复习整理
----------------------

使用BeanUtils工具包操作JavaBean:
导入beanutil jar包,放入对应工程的lib下,然后右键添加进去。
BeanUtil.setProperty(对象,"属性","值");
BeanUtil.getProperty(对象,"属性");
BeanUtil方法,在"值"得位置,以字符串对其属性进行操作。

java7的新特性——定义map的方法
Map map= (name:"zxx",age:18)
BeanUtils.setProperty(map,"name","18");

PropertyUtils.setProperty(对象,"属性",值);
PropertyUtils.getProperty(对象,"属性");
PropertyUtils方法在"值"得位置,以该对象属性本身类型进行操作。

了解和入门注解的应用

@Deprecated——标注对应方法已经过时。
直接在刚才的类中增加一个方法,并加上@deprecated标注,在另外一个类中调用这个方法。
@Override
public boolean equals(Reflect other)方法与HashSet结合讲解。
@SuppressWarnings
如果方法体中有过时的方法,那么可以在方法上面一行加@SuppressWarnings("deprecation")

注解可以加到类上面、成员变量上面、局部变量上面、方法上面

总结:注解相当于一种标记,加了注释就等于打上了某种标记,没加,则等于没有某种标记。
在java.lang包,可以看到JDK中提供最基本的annotation。

良好的变成习惯:
类名、属性名:名词、形容词+名词
方法名:动词、动词+名词

注解的定义与反射调用:

注解的应用结构
注解类《--应用了"注解类"的类《--对"应用了注解类的类"进行反射操作的类

@Target在注解类中加注解,则这个注解为元注解。

注解的生命周期啊的三个阶段:
java源文件-->class文件-->内存中的字节码。
RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;
分别对应其字节码。

为注解增加各种属性:

数组类型的属性:
int [] arrayAttr() default{1,2,3};
@MyAnnotation(arrayAttr={2,3,4});
如果数组属性中有一个元素,这时候属性值部分可以省略大括号。
枚举类型的属性:
EnumTest TrafficLamp lamp();
@MyAnnotation(lame=EnumTest.TrafficLame.GREEN);
注解类型的属性:
使用的时候:
@注解名(方法1="属性值",方法2="属性值")
如果只有一个属性或其中有一个属性为缺省属性,则使用的时候
@注解名("属性值")

注解的返回值还是注解,返回的注解上面还有属性。
注释可以返回:8个基本类型、Class类型、枚举类型、注解类型、刚才这些前面类型的数组,除此之外其他不可以返回。
------------------
注解部分需要再次复习
------------------









原创粉丝点击