【黑马程序员】张老师高新知识学习(2)

-------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---

12.hashCode的作用:高效地从集合中查找元素。

(1)每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别别对应某个存储区域。

将新元素放入时就只与部分元素比较就可以。所以,一个类的hashCode()方法只有在hashset中

才有意义。
(2)当一个对象被存入HashSet中后,就不能修改这个对象中
的那些参与计算哈希值的字段,否则,对象修改后的哈希值与
原来不同。即使用contains也检索不到对象。

(3)所谓内存泄露,就是对象不需要时,无法删除释放内存


13。getRealPath()读取项目文件夹的绝对位置
(1)类加载器ClassLoader可以加载普通文件
InputStream is=ReflectTest2.class.getResourceAsStream
("config.properties");
但只能读不能写

(2)读取键值:props.getProperty("className");


13.IntroSpector内省-->操作JavaBean可重用组件
JavaBean的方法的命名符合一定规则

如getAge(),对应的属性是Age,如果第二个字母是小写的,则变为age


14.内省:JDK中对JavaBean进行操作的一套API。
如果要在两个模块之间传递多个信息,可以将这些信息封装在
一个javabean中,叫做值对象——VO
(1)采用JavaBean读取设置对象属性:
PropertyDescriptor pd=new PropertyDescriptor("propertyName",obj.getClass());
	Method getX=pd.getReadMethod();
	Object retVal=getX.invoke(obj);
(2)采用BeanInfo读写属性。
BeanInfo beanInfo=IntroSpector.getBeanInfo (object.getClass())
(3)使用BeanUtil工具包。BeanUtil中有大量静态方法用于读
写对象的属性。输入输出除了对象外都是字符串形式.
BeanUtils.getProperty(pt1,"x");
BeanUtils.setProperty(pt1,"x","9");
BeanUtils.setProperty(pt1,"birthday.time","111");

把对象属性导入Map:
Map map=BeanUtils.describe(pt1);
map:x:"+map.get("x")
把Map导入对象:popular(obj,map)
读写Map:BeanUtils.setProperty(map2,"name","jyz")
   BeanUtils.getProperty(map2,"name")
(如果BeanUtils类型转换不准确时,可以用 java.PropertyUtil)


15.注解

@Override 覆盖父类方法
@Deprecated 方法过时
注解类:
(1)a。注解类:@interface A{}
     b。应用了“注解类”的类:@A  ClassB{}
     c。对 “应用了注解类的类”进行反射的类:
Class C{B.class.isAnnotatiionPresent(A.class);
A a=B.class.getAnnotion(A.class);}
负责检查b是否符合注解
(2)元注解:有3种:@Retention(RetentionPolicy.RUNTIME)
@RetentionPolicy.SOURCE
@RetentionPolicy.CLASA
分别表示注解保留  运行时,源文件,class文件阶段
(class文件只有加载进类加载器后才会转变为字节码)
(Class,enum,interface,@interface 都属于Type)
(3)注解的属性:
a。一般属性:class xx()default 默认值;
注解时,@xxx(xx1=...,xx2=...)
b。特殊属性:class value();

当只有这一个属性或其他属性都有默认值的时候。进行注解时

可以省略Value=,直接@xxx("...")

c。数组属性:class[]xxx()default 默认值;

16.泛型
(1)没泛型之前容器容纳Object类型,取出之后要强制类型转
换。容易出错。
(2)声明:List<String> list=new ArrayList();
而List list=new ArrayList<String>写法无效。
(3)类型声明只作用于编译阶段,用于给编译器检查。
      List<String>.Class==List<Integer>.Class
(4)在容器用了泛型后,也可以利用反射往其中加入不同类型
的元素,绕过编译器检查。
(5)参数类型只能是引用类型参数化类型不能组成数组。参数
化类型不考虑类型参数的继承关系。
Vector<String> v=new Vector<Object> 不合法!反之也不合法
	Vector v1=new Vector<String>();
	Vector<Object> v2=v1; 合法!注意区分编译时和运行时。
	//总结:引用的类型决定改引用可用的方法!

(6)a。泛型中的?通配符。用于函数参数中,如:
    void function(Collection<?> collection){}
在函数体中,用了通配符之后,不能用引用去调用与参数类型
有关的方法。   Collection<Object>coll=collection 合法!
b。<?extends Number>向下限定符,
Vector<?extends Number>x=new Vector<Integer>();合法!
    <?super Integer>向上限定符,
c。还可以限定多个边界(可以是父类,也可以是接口)。
限定符的范围总是包含自身。
(7)泛型的应用。
Map集合的Entry元素符合javaBean规则,在jsp页面中可以对它
进行迭代。
(8)类型推断:定义函数<T>function(T x, T y){}
当输入的x和y类型不同时也可以通过,这时返回值T是x和y
的共同最低父类
(9)类型变量的作用范围:class Xxx<T>{}全类
    public <E> retClass FunName(E e,T t){}全函数
    类的类型变量需要创建对象时才能确定,而静态方法不创建
对象就能调用。所以方法中如果使用了类的类型变量,就不能


声明为静态!
(10)还可以用类型变量表示异常,称为参数化类型。可以用

方法的throws列表中,但不能用于catch子句。
(11)Object与泛型比较:当函数有多个不确定类型的参数,
且参数之间类型相同,应该用泛型,因为Object是所有类的基
类,任何类型都能传进来,不能保证正确的操作。
public class GenericTest {
   public static void main(String[] args){
	Method method=GenericTest.class.getMethod("applyVector",Vector.class);
	Type[] types=method.getGenericParameterTypes();
	ParameterizedType pType=(ParameterizedType) types[0];
	System.out.println(pType.getRawType());
	System.out.println(pType.getActualTypeArguments()[0]);}
	public static void applyVector(Vector<Date> v){}
}

17.ClassLoder类加载器。jvm中类加载器有3种:
BootStrap->ExtClassLoader->AppClassLoader
除了BootStrap是c语言写的,其他类加载器本身都是都是类。
(1)类加载器的管辖范围:
Bootstrap:JRE/lib/rt.jar
ExtClassLoader: JRE/lib/ext/*.jar
AppClassLoader: CLASSPATH指定的所有jar或目录
(2)类加载器的委托机制:
这3个类是父子关系,当某个类加载器要载入类时,把加载任务
级传给父加载器,直到BootStrap。然后BootStrap寻找类,
找不到则逐级往下,直到到到类,若最终没找到这报异常。
(3)自定义类加载器:
a。继承ClassLoader
b。覆盖findClass()

c。调用父类的defineClass()把class文件转变为字节码。

-------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ---

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值