黑马程序员_JAVA学习笔记7

发布时间:2016-12-11 8:21:32 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"黑马程序员_JAVA学习笔记7",主要涉及到黑马程序员_JAVA学习笔记7方面的内容,对于黑马程序员_JAVA学习笔记7感兴趣的同学可以参考一下。

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net 通过 主函数的 args这个数组传递一个 类名,通过这个类名去调用这个类的main方法,会遇到的问题,首先 要传参,然后 会有参数不匹配的情况 , 因为如果传字符数组的话 会拆包 然后 就成了多个对象,而main方法只接收的是一个 字符数组对象,就会报错,上面是两种解决方法, 一种是强转为一个object对象,一种是再加一层包装成,object[] 的数组,而数组的第一个 就是一个 string[]的数组就可以 解决了。传参时注意对象 要传null 因为main方法是静态方法。 对数组进行反射: 数组类型反射所得到对象,须具有 相同的维数(个数可以不同)和相同的类型才是同一个对象。 如果如int [] a = new int[3];  int [] b = new int[5]; 则a.getClass() 就等于 b.getClass();  用a.getClass().getName() 就会得到[I ,其中[表示数组,I表示整型。  int[] a1 = new int[3]; int[] a2 = new int[4]; int[][] a3 = new int[2][3]; String[] a4 = new String[3]; System.out.println(a1.getClass() == a2.getClass()); System.out.println(a1.getClass() == a3.getClass()); System.out.println(a1.getClass() == a4.getClass()); System.out.println(a1.getClass().getName()); System.out.println(a1.getClass().getSuperclass().getName()); System.out.println(a4.getClass().getSuperclass().getName()); Object obj1 = a1; Object obj2 = a4; Object[] obj3 = a1; Object[] obj4 = a3; Object[] obj5 = a4; 因为一维类型的Int [] 是Object类型,而 Object[] 去接收 int [] ,此时Object[] 里面装的就是 int 类型, 而int 类型 就不是 Object 的子类型,所以 编译通不过。   数组要想 快速打印其内容 ,可以用Arrays这个工具类,可以 把数组转换成为一个List。 不过int 类型的还是打印其hashCode值。因为需要兼容1.4,接收的是Object[] 类型的数组,而int  [] 则正好与上面情况相似。 Array类是对数组进行反射的类。 Object[] a = new Object[]("a",1) a[0].getClass().getName(); 可以 得到某一个元素的类型,得不到 整个数组 的具体类型。 下面是对数组进行反射的代码。 int[] a = new int[]{1,2,3,4}; String[] s = new String[]{"a","b","c"}; //System.out.println(cla.getName()+"  " + clas.getName()); arraytest(a); arraytest(s); System.out.println(); System.out.println("-----------------"); } public static  void arraytest(Object obj) { Class cla = obj.getClass(); if(cla.isArray()) { int len = Array.getLength(obj); for(int i = 0; i < len ; i++) { System.out.print(Array.get(obj, i)); } } } Collection collections = new HashSet(); ReflectPoint pt1 = new ReflectPoint(3,3); ReflectPoint pt3 = new ReflectPoint(3,3); ReflectPoint pt2 = new ReflectPoint(5,5); collections.add(pt1); collections.add(pt2); collections.add(pt3); collections.add(pt1); pt1.y = 7; collections.remove(pt1); System.out.println(collections.size()); HashCode 的作用, 如果有一个集合有一万个元素,要保证每个元素的不同可以用HashCode算法,算出这些元素的HashCode值,并按照它们的HashCode值把该元素存放到相应 的区域,则再放入元素时就可以根据该元素的HashCode值去找到相应的区域,与该区域的元素进行比较,如果存在则不放入。这样可以节省时间。增加运行的效率。 如上面一段代码 , 会导致内存泄漏,如果已经在HashSet表中添加过的元素,则不要去更改关于HashCode算法中用到的属性(上面HashCode算法中用到了x y 两个属性。) , 一但更改则无法删除。 因为一但更改,则HashCode值就会发生变化,无法找到原来的HashCode存放的位置了。 关于流关闭,对象.close();有两个意思,首先这个关闭的是对象所指向的操作系统的资源,但该对象还在等待java虚拟机来回收,如果不关闭,则对象被干掉了,但该对象所指向的资源还在。 写属性文件时属性的值不用加双引号。 InputStream is = new FileInputStream("d:/config.properties"); ReflectTest.class.getClassLoader().getResourceAsStream("cn/..."); ReflectTest.class.getResourceAsStream("config.properties"); 上面为三种加载资源文件的方法,第一种可以读也可以写,而下在的只能读。 一般框架都用下面两种,配置文件存放的位置要放在classPath指定的目录,也就是项目 的bin目录,在Eclipse 下只需放到src的包目录下即可, 因为Eclipse会自动把这些文件放到bin目录下。第二种用类装载器加载,要写上包名,而第三种因为是当前类的对象,所以不用加包名,只需文件名即可。 如果路径前面加/要用完整路。 用于JavaBean中的反射。直接就可以调用getReadMethod()与getWriteMethod()方法。 FieldReflectFiled fd = new FieldReflectFiled(5,8); String retVal = "x"; int setX = 7; PropertyDescriptor pd = new PropertyDescriptor(retVal, fd.getClass()); Method mmm = pd.getReadMethod(); Object retValX =  mmm.invoke(fd); Method kkk = pd.getWriteMethod(); Object setValX = kkk.invoke(fd,setX); System.out.println(retValX); 上面是反射得到JavaBean的属性值的代码 。 采用遍历BeanInfo的所有属性方法来查找和设置某个RefectPoint对象的x属性。在程序中把一个类当作JavaBean来看,就是封装了把这个类当作JAVABEAN看的结果信息。

上一篇:java快速序列化库FST
下一篇:POJ 2429 GCD & LCM Inverse 因式分解

相关文章

相关评论