分析如下代码,正确的是( )。class TempClass { int i; public void TempClass(int j) { int i = j; } } public class C { public static void main(String[] args) { TempClass temp = new TempClass(2); } } A. 程序编译错误,因为TempClass没有缺省构造函数。 B. 程序编译错误,因为TempClass没有带一个int参数的构造函数。 C. 程序编译正确,但无法运行因为类C不是公共类。 D. 程序编译和运行都正确。
时间: 2024-03-22 09:39:59 浏览: 63
正确答案是选项B,程序编译错误,因为`TempClass`没有带一个`int`参数的构造函数。
在类`TempClass`中,存在一个方法`public void TempClass(int j)`,但是这个方法的名称和类名相同,因此被认为是一个构造方法。然而,这个构造方法中定义了一个局部变量`i`,它屏蔽了类成员变量`i`。因此,当在`main`方法中创建`TempClass`对象时,类成员变量`i`没有被初始化,它的值为默认值`0`。
正确的做法应该是将构造方法修改为:
```
public TempClass(int j) {
i = j;
}
```
这样就可以正确地初始化类成员变量`i`了。因此,选项B是正确的。
相关问题
分析如下代码,正确的是( )。 class TempClass { int i; public void TempClass(int j) { int i = j; } } public class C { public static void main(String[] args) { TempClass temp = new TempClass(2); } }
这段代码存在一个错误。类`TempClass`中定义了一个方法`TempClass(int j)`,但是这个方法的名称和类名相同,因此它被认为是一个构造方法。但是,这个构造方法中定义了一个局部变量`i`,它会屏蔽类成员变量`i`。因此,当在`main`方法中创建`TempClass`对象时,类成员变量`i`没有被初始化,它的值为默认值0。
正确的做法应该是将构造方法修改为:
```
public TempClass(int j) {
i = j;
}
```
这样就可以正确地初始化类成员变量`i`了。因此,正确答案是:选项D,代码存在构造方法定义错误。
public void dictionaryConvert(Object obj, HttpServletRequest request) { try { if (obj == null) return; //当前view和entity中的所有types的字段 List<String> fieldNameList = new ArrayList<>(); Class tempClass = obj.getClass(); while (tempClass !=null) { Field[] declaredFields = tempClass.getDeclaredFields(); for (Field f : declaredFields) { f.setAccessible(true); if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) { fieldNameList.add(f.getName()); } } tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己 }
这段代码的作用是将对象中所有类型为java.lang.Integer并且字段名中包含"Types"的属性名保存到一个List中。首先判断传入的对象是否为空,然后通过反射获取对象的Class对象,并通过while循环遍历该对象及其父类的所有 declaredFields 字段。对于每个字段,如果其类型为java.lang.Integer,并且字段名包含“Types”,则将该字段名添加到 fieldNameList 列表中。最后返回 fieldNameList 列表。
阅读全文