A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马斯巴达 高级黑马   /  2013-3-1 10:37  /  2068 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢军 于 2013-3-16 14:14 编辑

package cn.itcast.day1;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {

        /**
         * @param args
         */
        public static void main(String[] args)throws Exception {
                // TODO Auto-generated method stub

                String str1="abc";
                Class cls1= str1.getClass();
                Class cls2=String.class;
                Class cls3=Class.forName("java.lang.String");
                System.out.println(cls1==cls2);
                System.out.println(cls1==cls3);
               
                System.out.println(cls1.isPrimitive());
                //new String (new StringBuffer("abc"));
                //String.class.getConstructorx(StringBuffer.class);
                Constructor constructor1=
                        String.class.getConstructor(StringBuffer.class);
                String str2=
                        (String) constructor1.newInstance(new StringBuffer("abc"));
        //在编译器时并不知道constructor的具体类型所以告诉编译器(String)
                System.out.println(str2.charAt(2));
               
                ReflectPoint pt1= new ReflectPoint(3,5);
                Field fieldY =pt1.getClass().getField("y");
                //filedY不是对象身上的变量。而是类上,要用它去取某个对象上对应的值
                System.out.println(fieldY.get(pt1));
                Field fieldX =pt1.getClass().getDeclaredField("x");
                //x是私有的直接用会报错,所以使用getDeclaredField方法
                fieldX.setAccessible(true);//暴力获取
                System.out.println(fieldX.get(pt1));
                Method methodCharAt= String.class.getMethod("charAt",int.class);
                System.out.println(methodCharAt.invoke(str1,1));
                //当invoke的第一参数是null则说明该方法为静态
System.out.println(methodCharAt.invoke(str1,new Object[]{2}));
               
TestArguments.main(new String[]{"111","333"});
        }


}


class TestArguments{
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(args);
                }
        }
}
在调用主函数时为什么输出结果是哈希值
打印结果[Ljava.lang.String;@e53108  

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
你打印的是args?args是个数组,所以是哈希值吧
回复 使用道具 举报
.
.
.
.
.
TestArguments.main(new String[]{"111","333"});
        }



}


class TestArguments{
        public static void main(String[] args){
                for(String arg:args){
                        System.out.println(args);//注意老兄 你这儿写的不是arg  而是数组args  打印数组  当然是哈希值了
                }

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
刘圣繁 发表于 2013-3-1 10:52
.
.
.

呀呀,。。又粗心了啦。。哎。、谢谢喽!!{:3_49:}
回复 使用道具 举报
唐长智 发表于 2013-3-1 10:44
你打印的是args?args是个数组,所以是哈希值吧

不好意思马虎喽。。。
回复 使用道具 举报
问题原因:你打印的args 是数组,是一个对象,所以是哈希值。
解决一:
public static void main(String[] args){
                for(String arg:args){
                        System.out.println(arg);
                }
        }
解决二:使用Arrays这个类。Arrays这个类是专门用来操作数组的。提供了Arrays.toString方法将数组转成字符串。

public static void main(String[] args){
      System.out.println(Arrays.toString(args));        
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马