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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张宇鹏 黑马帝   /  2011-7-27 12:05  /  4279 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

写程序判断

评分

参与人数 1技术分 +1 收起 理由
admin + 1 你的问题引发大讨论,要给分

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-27 12:10:08
沙发
[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:45
藤椅

程序段

代码如下:
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对象是个真正的对象,不知道上述做法是否有不妥之处,或者还有其他的判断方法吗?

评分

参与人数 1技术分 +3 收起 理由
admin + 3 女生很少看到有这样严密的思维,高分!!

查看全部评分

回复 使用道具 举报
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 编辑 ]
回复 使用道具 举报
一般排除了Array,Enum,Primitive;之后
如果这些不是对象. 排除这些以外的,就算是纯对象了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马