这是thinking in java上的一道练习题,觉得有点意思,下面是我的实现方法,不知对否,忘各位过客多多指点:
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对象是个真正的对象,不知道上述做法是否有不妥之处,或者还有其他的判断方法吗?
分享到:
相关推荐
定义一个一维数组的基本语法是:`类型名 数组名 [元素个数]`。其中,"类型名"是指数组中所有元素的类型,如int、char等;"数组名"是数组的标识符,用于引用整个数组;"元素个数"是一个常量或常量表达式,它决定了...
在VB(Visual Basic)编程中,数组是一种非常重要的数据结构,它允许我们存储多个相同类型的数据在一个变量中,便于管理和操作。在这个特定的场景中,我们讨论的是如何使用VB数组来实现字符的分类统计。下面将详细...
数组和字符串在实际编程中常常结合使用,比如在一个字符串数组中存储多个字符串。在处理字符串数组时,可以使用`Arrays`类提供的方法,如`sort()`进行排序,`toString()`转换为字符串形式,以及`equals()`比较两个...
- **功能**:此方法用于判断当前`Character`对象与另一个对象是否相等。 - **参数**: - `obj`:要比较的对象。 - **返回值**:如果`obj`也是一个`Character`对象且字符值相同,则返回`true`,否则返回`false`。...
总的来说,掌握C#的基础知识和编程规范,特别是数组的使用,对于成为一个合格的C#开发者至关重要。理解类和接口、虚方法和抽象方法、值类型和引用类型之间的关系,以及如何利用各种集合类和正则表达式解决问题,将使...
每个元素代表地图上的一个位置,不同的值代表不同的地形或对象。 - **初始化数组**:通过直接指定数组的每一项来初始化二维数组,例如: ```c char a[10][10] = { {0,2,2,2,2,2,2,2,2,2}, {0,0,2,2,2,2,2,2,2,...
4. 单选题:假定 AB 为一个类,px 为指向该类动态对象数组的指针,该数组的长度为 n,则执行“delete[] px;”语句时,自动调用该类的析构函数的次数为()。 知识点:在 C++ 中,当使用 delete[] 运算符删除动态...
`equals(Object obj)`方法比较两个`Character`对象是否相等,而`hashCode()`返回对象的哈希码,这是Java中的基本比较和查找操作的基础。 `Character`类还提供了许多关于Unicode字符属性的方法,如`...
- `score[3]`: 一个整型数组,用来存储学生的三门课程成绩。数组的索引分别对应数学(score[0])、外语(score[1])和计算机(score[2])。 2. **公有成员函数**: - `ssum()`: 返回学生三门课程的总成绩。通过...
例如,声明一个`int`类型的数组`int[] numbers = new int[5];`,并初始化`numbers[0] = 1; numbers[1] = 2;`等。 最后,枚举类型(`enum`)是Java 5引入的,用于定义一组相关的常量。枚举可以看作是一种特殊的类,...
而字符数组则直接存储整个字符串,每个数组元素存放一个字符。 2. **性质**:字符数组名是一个地址常量,一旦初始化后就不能改变,它总是指向字符串的首字符。而字符指针是一个地址变量,可以改变,它可以指向不同...
1. 字符串以大括号`{}`或方括号`[]`开始,表示一个对象或数组。 2. 对象由键值对组成,键和值之间用冒号`:`分隔,键值对之间用逗号`,`分隔。 3. 数组由值组成,值之间用逗号`,`分隔。 4. 键必须是双引号`"`包围的...
4. **指针的关系运算符**:可以用来比较两个指针是否指向相同的地址,也可以用来判断一个指针是否指向另一个指针所指向的地址之前或之后的位置。 例如: ```c int x = p1 > p2; // 如果 p1 的地址比 p2 大,则 x...
一个类可以用来创建多个对象实例,这些对象共享相同的属性定义,但每个对象的具体属性值可以不同。 2. **当运行javac命令对一个java源程序进行编译时,必须写出该源程序文件的完整文件名,包括扩展名.java。(T)**...
例如,我们可以创建一个整型数组来保存学生的考试分数。数组的定义、初始化和访问元素是学习数组的关键点: ```java int[] numbers = new int[5]; // 创建一个包含5个元素的整型数组 numbers[0] = 10; // 给数组的...
首先,`char`类型在Java中占据一个字节(8位),可以存储Unicode字符,范围从'\u0000'到'\uffff',总共65536个不同的字符。Unicode是国际化的字符集,包含了世界上大多数文字系统。 1. **字符常量与变量**:在Java...
### JAVA判断题题库知识点详解 #### 一、JAVA简介 **1....- **解析:** 当一个对象被赋值给另一个变量时,这两个变量指向同一个对象。这意味着对其中一个变量所做的修改会影响另一个变量指向的对象。
此外,Arrays类可以用于排序和填充数组,包括对象数组和基本类型数组。在处理Map时,MapUtils类(如在Apache Commons Collections中)提供了创建预定义大小的Map,或者检查Map是否为空等便捷功能。 对于日期和时间...
- **多维数组**:例如`char a[13][6]`用于存储游戏界面的字符,每个元素代表屏幕上的一个位置。 - **结构体定义**:例如`struct Plane`用于表示飞机的状态信息,包括坐标`X`、`Y`以及生命值`life`;`struct Bullet`...
- **解释**: “一个类的构造函数中可以不包含对其子对象的初始化”这一说法是错误的,子对象必须在构造函数的初始化列表中进行初始化。 #### 34. 类型转换函数 - **知识点**: 类型转换函数是成员函数,用于执行类型...