下面代码定义了一个日期类及其测试类,结合注释,请找出其中的7处错误。 public class Date { private int year, month, day; public void Date(int y,int m,int d) { //定义有参构造方法 year=y; month=m; day=d; } public Date(){ //定义无参构造方法 Date(2018,6,15); } public void setMonth(int month) {//给成员变量month赋值 month=month; } public int getMonth(){ returm month; } public void print(){ System.out.println("date is "+ this.year+"-"+this.month+"-"+this.day); } public void main(String args[]){ Date oday = new Date(2018,7); print(); } }
时间: 2024-02-26 16:55:49 浏览: 67
1. 构造方法名应该与类名相同,因此构造方法`void Date(int y,int m,int d)`应该改为`public Date(int y,int m,int d)`
2. 无参构造方法中应该使用`this(2018,6,15)`调用有参构造方法,而不是`Date(2018,6,15)`
3. setMonth方法中形参名应该与成员变量名不同,因此`month=month`应该改为`this.month=month`
4. getMonth方法名拼写错误,应该为`return`而不是`returm`
5. main方法应该是静态的才能被JVM调用,因此应该加上`public static`
6. main方法中创建对象时应该使用`new Date(2018,6,15)`而不是`new Date(2018,7)`
7. main方法中调用print方法时应该使用对象`oday.print()`而不是`print()`
相关问题
下面代码定义了一个日期类及其测试类,结合注释,请找出其中的7处错误。 public class Date { private int year, month, day; public void Date(int y,int m,int d) { //定义有参构造方法 year=y; month=m; day=d; } public Date(){ //定义无参构造方法 Date(2018,6,15); } public void setMonth(int month) {//给成员变量month赋值 month=month; } public int getMonth(){ returm month; } public void print(){ System.out.println("date is "+ this.year+"-"+this.month+"-"+this.day); } public void main(String args[]){ Date oday = new Date(2018,7); print(); } }
错误1:构造方法不能有返回类型,应该将 `public void Date(int y,int m,int d)` 修改为 `public Date(int y,int m,int d)`
错误2:在无参构造方法中应该使用 this 调用有参构造方法,应该将 `Date(2018,6,15);` 修改为 `this(2018,6,15);`
错误3:setMonth 方法中应该使用 this.month 赋值,应该将 `month=month;` 修改为 `this.month=month;`
错误4:getMonth 方法中应该是 return 而非 returm,应该将 `returm month;` 修改为 `return month;`
错误5:print 方法中应该使用实例变量,应该将 `this.year` 修改为 `year`
错误6:main 方法应该是静态方法,应该将 `public void main(String args[])` 修改为 `public static void main(String args[])`
错误7:在 main 方法中应该使用实例对象调用 print 方法,应该将 `print();` 修改为 `oday.print();`
我们定义好一个业务层接口和它的实现类,在不改变这个实现类的基础上,动态地给这个实现类添加类似于“日志”的 功能,步骤如下: 1. 定义业务接口如下: public interface IA { void ma(); }2. 业务接口的实现类如下:public class IA_Impl implements IA { //重写方法 @Override public void ma() { // System.out.println("我是业务方法的实现..."); } }3. 要求,利用动态代理技术,为实现类来生成一个代理对象,并在此代理对象中添加“日志”的功能public class ProxyFactory { //参数是 目标对象 [泛型方法] public <T> static T createProxy(T target) { //TODO .... } }注:可以使用CGLIB 或是 JDK的动态代码来做4. 写一个类来测试public class UseProxyFactory { public static void main(String[] args) { //创建业务对象 IA a = new IA_Impl(); //创建业务对象的代理对象 IA proxy = ProxyFactory.createProxy(a); //调用代理对象的目标方法 proxy.ma(); }}用Java带注释
好的,我理解了你的问题。下面是实现步骤:
1. 首先创建一个 InvocationHandler 接口的实现类,用于在代理对象的方法被调用时,添加“日志”功能。
```java
public class LogInvocationHandler implements InvocationHandler {
private Object target; // 被代理的目标对象
public LogInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("执行方法:" + method.getName() + ",参数为:" + Arrays.toString(args));
Object result = method.invoke(target, args); // 调用目标对象的方法
System.out.println("方法执行结果:" + result);
return result;
}
}
```
2. 然后,在 ProxyFactory 类中定义一个 createProxy 泛型方法,该方法接收一个目标对象,返回一个代理对象。在该方法中,使用 JDK 动态代理或 CGLIB 动态代理,为目标对象生成代理对象,并将代理对象和 LogInvocationHandler 对象关联起来。
```java
public class ProxyFactory {
// 参数是目标对象 [泛型方法]
public static <T> T createProxy(T target) {
if (target == null) {
throw new IllegalArgumentException("目标对象不能为空!");
}
Class<?> targetClass = target.getClass();
Class<?>[] interfaces = targetClass.getInterfaces(); // 获取目标对象实现的接口
LogInvocationHandler handler = new LogInvocationHandler(target); // 创建 InvocationHandler 对象
// 判断目标对象是否实现了接口,如果实现了,则使用 JDK 动态代理,否则使用 CGLIB 动态代理
if (interfaces.length > 0) {
return (T) Proxy.newProxyInstance(targetClass.getClassLoader(), interfaces, handler);
} else {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(handler);
return (T) enhancer.create();
}
}
}
```
3. 编写测试代码,创建业务对象的代理对象,调用代理对象的目标方法。
```java
public class UseProxyFactory {
public static void main(String[] args) {
// 创建业务对象
IA a = new IA_Impl();
// 创建业务对象的代理对象
IA proxy = ProxyFactory.createProxy(a);
// 调用代理对象的目标方法
proxy.ma();
}
}
```
运行测试代码,控制台输出:
```
执行方法:ma,参数为:[]
我是业务方法的实现...
方法执行结果:null
```
阅读全文