黑马程序员技术交流社区

标题: 判断char数组是对象还是基本类型? [打印本页]

作者: 张宇鹏    时间: 2011-7-27 12:05
标题: 判断char数组是对象还是基本类型?
写程序判断
作者: 匿名    时间: 2011-7-27 12:10
[code]public class Ex10 {
        public static void main(String[] args) {
                char[] c = new char[10];
                System.out.println("Superclass of char[] c: " +        c.getClass().getSuperclass());
                System.out.println("char[] c instanceof Object: " + (c instanceof Object));
        }
}[/code]这样行不行,说明是对象
作者: 匿名    时间: 2011-7-27 12:13
标题: 程序段
代码如下:
package chapter11.exercise4;  

  
import java.lang.reflect.Constructor;   
  
/**  
* 写一个程序,判断一个Char数组属于基本数据类型,还是一个真正的对象  
*  
*/  
class C{   
    //this is a class with default constructor   
}   
  
public class ObjectChecker {   
    /**  
     * 如果是一个真正的对象,那么就可以通过getClass().newInstance来创建一个新实例  
     *  
     */  
    public static boolean isRealObject(char[] c){   
        try {   
            c.getClass().newInstance();   
            return true;   
        } catch (InstantiationException e) {   
            return false;   
        } catch (IllegalAccessException e) {   
                        return true;   
        }   
        return false;   
    }   
      
    public static boolean isRealObject(Object obj){   
        try {   
            obj.getClass().newInstance();   
            return true;   
        } catch (InstantiationException e) {   
            return false;   
        } catch (IllegalAccessException e) {   
                        return true;   
        }   
        return false;   
    }   
      
    public static void main(String[] args) {   
        char[] c = {'a', 'b'};   
        if(isRealObject(c)){   
            System.out.println("char array is real object");   
        }else{   
            System.out.println("char array is not real object");   
        }   
           
        if(isRealObject(new C())){   
            System.out.println("C is real object");   
        }else{   
            System.out.println("C is not real object");   
        }   
           
    }   
  
}  
刚开始我想用获取反射类的构造器(构造函数)来判断,因为我想一个真正的对象就应该有至少一个构造器,而基本数据类型不具有,但是后来用第二个重载的isRealObject(Object obj)方法试验了一下,即使是一个真正的对象,当没有显示声明其构造器的时候,也是不能获取其构造器的,所以我又采取了另一种方法,使用获得的反射类来直接新创建一个实例,如果被反射的类是一个真正的对象,那么就可以成功创建这个类的一个新实例而不会捕获异常,而基本数据类型的反射类则不行,会抛InstantiationException异常,我就是根据是否会抛出这个异常来判断的。另外,当用Class对象的反射类来构造一个新实例的时候也会抛出异常IllegalAccessException,当捕获到这个异常的时候返回的是true,因为Class对象是个真正的对象,不知道上述做法是否有不妥之处,或者还有其他的判断方法吗?
作者: 兰海忠    时间: 2011-7-27 12:19
char数组是不是对象是由你有没有创建实例(对象)来决定的。[code=java]public static void main(String[] args) {
                // TODO Auto-generated method stub

                boolean b = char[].class.isPrimitive();

                boolean b2 = char[].class.isInterface();
                char[] e = { 'c', 'b' };
                boolean b3 = e.getClass().isInstance(e);
               
                System.out.println(b == true ? "char[]是基本类型" : "char[]不是基本类型");
                System.out.println(b2 == true ? "char[]是对象" : "char[]不是对象");
                System.out.println(b3 == true ? "e是对象 " : "e不是");
        }[/code]运行结果[code=java]char[]不是基本类型
char[]不是对象
e是对象 [/code]
[ 本帖最后由 兰海忠 于 2011-07-27  12:49 编辑 ]
作者: 詹季春    时间: 2011-7-27 16:43
一般排除了Array,Enum,Primitive;之后
如果这些不是对象. 排除这些以外的,就算是纯对象了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2