下列代码有什么错误,public class C { private int p; public C() { System.out.println("C's no-arg constructor invoked"); this(0); } public C(int p) { p =p; } public void setP(int p) { p =p; } }
时间: 2024-03-23 13:39:28 浏览: 51
代码有一个错误,就是在C类的有参构造方法中,参数p赋值给自身属性p时,应该使用this关键字指明是类的属性而不是参数p。正确的代码如下:
```
public class C {
private int p;
public C() {
System.out.println("C's no-arg constructor invoked");
this(0);
}
public C(int p) {
this.p = p;
}
public void setP(int p) {
this.p = p;
}
}
```
相关问题
public class MyClass { private int val1,val2 ; public void myFun(int x,int y) { val1=x ; val2=y ; System.out.println("The sum is: "+(val1+val2)) ; } public static void main(String arg[]) { MyClass MyObj=new MyClass(); MyObj.myFun(1,2); } }
这是一个简单的 Java 程序,包含一个名为 MyClass 的类,其中有一个名为 myFun 的方法。该方法接受两个整数参数 x 和 y,将它们分别赋值给类的成员变量 val1 和 val2,并计算它们的和,最后输出结果。在 main 函数中,我们创建了 MyClass 的一个对象 MyObj,并调用了它的 myFun 方法,传入参数 1 和 2。程序运行后会输出 "The sum is: 3"。
补充代码 import java.util; class BackCounter implements Runnable private in过t count一100:r线程共享变量,对它的处理必须用同步机制进行保护 publie int( coont W返网变量值 线程体 peblic void( f(mi-10i>0,i-)(0变量值递减10 【】《以下代码在处理共享变量,需同步机制保护 f() break coust-: try Thread sleep(10): catch (e)( }模拟延时10毫秒 线程体结束 publie class Main( public sutie void main(Stringl)arg)throws InterruptedException某些线程方法会数出检应 ArmayList<Theead>It-new<Theead0: BackCourmer be=newy创建实观对象 add(nen Thread(bc/创建线程对象 It add(new Thread(be) or Thread th 10 【2】:启动8线 fbe (Thead th In 【3】;等待线程结束
这段代码中缺少了一些语法和格式上的问题,无法直接运行。以下是修正后的代码,可以正常运行:
```
import java.util.ArrayList;
class BackCounter implements Runnable {
private int count = 100; // 线程共享变量,对它的处理必须用同步机制进行保护
public synchronized int count() { // 对共享变量进行同步处理
return count;
}
public void run() { // 线程体
while (count > 0) {
count -= 10; // 变量值递减10
System.out.println(Thread.currentThread().getName() + " count = " + count);
try {
Thread.sleep(10); // 模拟延时10毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
ArrayList<Thread> It = new ArrayList<Thread>();
BackCounter be = new BackCounter(); // 创建共享对象
It.add(new Thread(be)); // 将共享对象包装成线程对象添加到列表中
for (int i = 0; i < 8; i++) {
Thread th = new Thread(be);
It.add(th); // 创建线程对象并添加到列表中
}
for (Thread th : It) { // 启动所有线程
th.start();
}
for (Thread th : It) { // 等待所有线程结束
th.join();
}
System.out.println("count = " + be.count()); // 输出计数器的值
}
}
```
这段代码的作用是创建一个名为BackCounter的线程类,并在该类中实现了一个run()方法,该方法是一个线程体,用于递减一个共享变量count,并睡眠10毫秒,直到count递减到0为止。在BackCounter类中还实现了一个方法count(),用于返回当前共享变量count的值。
在主类Main中,首先创建了一个ArrayList对象It,用于存储线程对象。然后创建了一个BackCounter对象be,并将其包装成一个线程对象添加到It中。接着使用一个for循环创建8个线程对象,并将它们添加到It中。在创建线程对象时,需要将BackCounter对象be作为参数传入,这样每个线程都可以共享同一个BackCounter对象be。
在for循环结束后,使用一个for-each循环启动It中的所有线程,并使用Thread.join()方法等待所有线程结束。最后输出所有线程结束后共享变量count的值。
需要注意的是,由于count是一个共享变量,多个线程同时对其进行修改可能会导致冲突,因此在对count进行修改时需要使用同步机制进行保护,以避免出现不可预期的结果。在这段代码中,使用了synchronized关键字对count进行了同步处理。
阅读全文