对于下列代码,叙述正确的是哪个?(()classAnimalf int m =100;int get(){return m;}} class Dog extendsAnimal{intm=2:} publicclass E{public static void main(Stringargs[]){Animaldog=new Dog();Systemoutprintf("%d",dogget());}}A.代码有编译错误B运行输出2C.运行输出100D.无编译错误,但发生运行NullPointerException异常
时间: 2024-02-26 10:54:05 浏览: 18
根据给出的代码,叙述正确的是C.运行输出100。
首先,我们知道 `Dog` 类继承了 `Animal` 类,并且 `Animal` 类中定义了一个实例变量 `m`,并且有一个 `get()` 方法返回 `m` 的值。
在 `Dog` 类中,定义了一个实例变量 `m`,并且初始化为 2。但是由于没有重写 `get()` 方法,所以在调用 `dog.get()` 时,会调用父类 `Animal` 类中的 `get()` 方法,返回 `m` 的值为 100。
因此,代码运行输出为 100,选项 C 正确。
相关问题
public int updateStu(Student stu) throws Exception { Connection conn = null; PreparedStatement pstm = null; ResultSet rs = null; try { conn = dataSource.getConnection(); String sql = "update wn81.student set sname=? ,ssex=?,class=? where sno=?" ; pstm = conn.prepareStatement(sql); pstm.setString(1,stu.getSno()); pstm.setString(2,stu.getSname()); pstm.setString(3,stu.getSsex()); pstm.setString(4,stu.getCalss()); int i = pstm.executeUpdate(); Student s = null; return i ;这个方法有什么问题么
这个方法存在一些问题:
1. 在设置参数时,使用了错误的参数顺序。应该按照 SQL 语句中参数的顺序设置参数,而不是按照 `stu.getSno()`、`stu.getSname()`、`stu.getSsex()`、`stu.getCalss()` 的顺序设置参数。
2. 在 SQL 语句中,将 `sname` 和 `ssex` 的位置颠倒了。应该按照表结构中字段的顺序编写 SQL 语句。
3. 在执行更新操作后,没有对连接、语句和结果集进行关闭。应该使用 try-with-resources 或者 finally 块来关闭这些对象,以释放资源。
下面是修改后的代码:
```java
public int updateStu(Student stu) throws Exception {
try (Connection conn = dataSource.getConnection();
PreparedStatement pstm = conn.prepareStatement(
"UPDATE wn81.student SET sname=?, ssex=?, class=? WHERE sno=?")) {
pstm.setString(1, stu.getSname());
pstm.setString(2, stu.getSsex());
pstm.setString(3, stu.getCalss());
pstm.setString(4, stu.getSno());
int rowCount = pstm.executeUpdate();
return rowCount;
}
}
```
这个方法的参数是一个 `Student` 对象,但是在更新操作中没有使用 `stu` 的 `sno` 属性,因此可能导致更新错误。应该根据实际需求修改 SQL 语句,确保更新操作正确。
class Animal { public int get (int n) { return n; } } class Dog extends Animal { public int get (int n) { return n+super. get (n); } } class Cat extends Animal { public int get (int n) { return n*super. get (n); } } public class E { public static void main (String args []) { Animal animal = new Dog(); int m = animal. get (10); animal = new Cat (); int n = animal. get (10); System. out. printf (”%d:%d”,m,n); } }详细解读该段代码
这段代码定义了一个Animal类及其两个子类Dog和Cat。Animal类中有一个get方法,返回传入的n值。子类Dog和Cat分别继承了Animal类,并且重写了get方法。Dog类中的get方法返回传入的n值加上调用父类Animal的get方法返回的n值,即n+super.get(n)。Cat类中的get方法返回传入的n值乘以调用父类Animal的get方法返回的n值,即n*super.get(n)。
在主方法中,首先创建一个Animal类型的对象animal,其实际类型是Dog。调用animal的get方法,会执行Dog类中重写的get方法,返回10+10=20,将值赋给变量m。然后重新创建一个Animal类型的对象animal,其实际类型是Cat。调用animal的get方法,会执行Cat类中重写的get方法,返回10*10=100,将值赋给变量n。最后,使用printf方法输出m和n的值,输出结果为“20:100”。