1、有以下代码:
class ClassA{
public void method(int value){
System.out.println(value);
}
public void method(){
System.out.println(value);
}
int value;
}
class TestClassA{
public static void main(String args[]){
ClassA classA = new ClassA();
classA.value = 10;
classA.method();
classA.method(20);
}
}
请选择正确结果:
A. 编译不通过
B. 输出10 10
C. 输出 10 20
D. 输出0 20
C 调用第一个method方法时,根据方法重载,调用的是无参的method方法,打印的value为实例变量的值,结果为 10。
调用第二个method方法时,会调用method(int value)这个方法,由于这个方法具有一个value形参,相当于局部变量。局部变量会和实例变量命名冲突, 打印时会打印局部变量的值,也就是打印 参数 20。
2、有以下代码:
class ClassA{
void method(){
System.out.println("method()");
}
int method(int i){
System.out.println("method(int)");
}
public static void main(String args[]){
ClassA a = new ClassA();
a.method();
a.method(10);
}
}
该程序是否能编译通过?
如果可以,写出该程序运行结果。
如果不能,请说明理由,以及如何修改。
不能编译通过,因为int method(int)方法没有返回值。需添加相应的return语句。
3、关于构造方法,下列说法正确的是:
A. 每个类中都有至少一个构造方法
B. 一个类中可以有多个构造方法
C. 构造方法可以有返回值
D. 构造方法可以有多个参数
ABD
A正确,因为即使不写构造方法,编译器也会自动生成一个默认构造方法。
B正确,一个类中可以有多个构造方法,这些方法间构成重载
C错误,构造方法没有返回值
D正确。
4、有以下代码:
class MyClass{
int value;
}
public class TestRef{
public static void main(String args[]){
int a = 10;
int b = a;
b++;
System.out.println(a);
MyClass mc1 = new MyClass();
mc1.value = 10;
MyClass mc2 = mc1;
mc2.value++;
System.out.println(mc1.value);
}
}
请写出编译运行后的结果。
10 11
5、有以下代码:
class MyClass{
int value;
}
public class TestMyClass{
public static void main(String args[]){
MyClass mc1 = new MyClass();
MyClass mc2 = new MyClass(10);
System.out.println(mc1.value);
System.out.println(mc2.value);
}
}
问:这个程序能否编译通过?如果可以,输出结果是什么?如果不可以,则应该如何修改?
编译不能通过,MyClass默认有无参构造方法,传递整型参数报错
6、根据注释,把下面代码补充完整:
//定义⼀个Dog 类
class Dog{
//定义⼀个name 属性,该属性为String 类型
______________________;
//定义⼀个age 属性,该属性为int 类型
______________________;
//定义⼀个sexual 属性,该属性为boolean 类型
//true 表示为公,false 表示为⺟
______________________;
public Dog(){
}
public Dog(String name, int age, boolean sexual){
//分别根据参数,设置Dog 类的属性
}
public void play(){
System.out.println(name + “ play”);
}
public void play(int n){
System.out.println(name + “ play ” + n + “ minutes”);
}
}
public class TestDog{
public static void main(String args[]){
Dog d;
//创建⼀个Dog 对象,调⽤有参构造函数
//名字为joy,年龄为2 岁,性别为⺟
_________________;
//调⽤Dog 对象⽆参的play ⽅法。
_________________;
//调⽤Dog 对象有参的play ⽅法,参数为30
_________________;
}
}
String name;
int age;
boolean sexual;
Dog dog = new Dog("joy",2,false);
dog.play();
dog.play(30);
7、有以下代码:
class ClassA{
public ClassA(){
System.out.println("ClassA()");
}
}
class ClassB{
public ClassB(){
System.out.println("ClassB()");
}
}
class ClassC{
ClassA a = new ClassA();
ClassB b;
public ClassC(){
System.out.println("ClassC()");
b = new ClassB();
}
}
public class TestConstructor{
public static void main(String args[]){
ClassC cc = new ClassC();
}
}
请选择正确答案:
A. 编译不通过
B. 输出ClassA() ClassB() ClassC()
C. 输出 ClassA() ClassC() ClassB()
D. 输出 ClassC() ClassB() ClassA()
C
8、有以下代码:
class ClassA{
int value;
}
public class TestClassA{
public static void main(String args[]){
int value = 10;
changeInt(value);
System.out.println(value);
ClassA ca = new ClassA();
ca.value = 10;
changeObject(ca);
System.out.println(ca.value);
}
public static void changeInt(int value){
value++;
}
public static void changeObject(ClassA ca){
ca.value++;
}
}
编译运行TestClassA 时,结果是
A. 编译出错B. 输出 10 10
C. 输出 10 11
D. 输出 11 11
C
9、程序改错:
public class Student{
int age;
String name;
public void Student(){}//构造方法不能有返回值类型,把void去掉
void init(){
age = 10;
name = "limy";
}
public Student(String name){
this.init();
this.name = name;
}
public Student(String name, int age){
this.init();
this(name);//this()必须放在构造函数中的第一⾏ this.age=age;
this.age = age;
}
}
×
10、写⼀个Worker 类,并创建多个Worker 对象:
10.1 为Worker 类添加三个属性:
10.1.1 String 类型的name,表示工人的姓名。
10.1.2 int 类型的age,表示工人的年龄。
10.1.3 double 类型的salary,表示工人的公资。
10.2 为Worker 类添加两个构造方法:
10.2.1 公开无参构造方法。
10.2.2 接受三个参数的构造方法,三个参数分别为字符串、int 和double 类型。
10.3 为Worker 类添加两个work方法:
10.3.1 无参构造方法
10.3.2 带整数参数构造方法,表示工人工作的时间(为多少小时)。
public class Worker {
// Worker类添加三个属性
String name;
int age;
double salary;
// 公开无参构造方法
public Worker() {
}
// 接受三个参数的构造方法
public Worker(String a, int b, double c/* String name,int age,souble salary */) {
/*
* this.name = name; this.age = age; this.salary = salary;
*/
name = a;
age = b;
salary = c;
}
// 无参work方法
public void work() {
}
// 带参work方法
public void work(int hour) {
System.out.println("共工作" + hour + "小时");
}
public void print() {
System.out.println("员工名字是:" + name + "\t" + "年龄" + age + "\t" + "月薪水是:" + salary);
}
}
public class TestWorker {
public static void main(String[] args) {
Worker work1 = new Worker();
work1.name = "光头强";
work1.age = 18;
work1.salary = 1;
work1.print();
Worker work2 = new Worker("李员工",20,5.5);
work2.print();
work1.work(8);
}
}
11、创建⼀个Address 类,描述如下:
11.1 该类有两个属性:11.1.1 String 类型的address,表示地址。
11.1.2 String 类型的zipCode,表示邮编。
11.2 该类有两个构造方法:
11.2.1 无参构造方法。
11.2.2 带两个参数的构造方法。
public class Address {
String address;
String zipCode;
//无参
public Address() {
}
//有参
public Address(String a,String z) {
address = a;
zipCode = z;
}
public void print() {
System.out.print("地址:"+address+"\t");
System.out.print("邮编:"+zipCode+"\t");
}
}
public class TestAddress {
public static void main(String[] args) {
Address add = new Address();
add.address = "青岛";
add.zipCode = "266000";
add.print();
Address add1 = new Address("北京东城区","10000");
add1.print();
}
}
12、编程:
为第11题中的Worker类添加⼀个属性addr,该属性为Address类型。
要求:创建一个Worker对象,其姓名为"zhangsan",年龄为25,工资为2500,家庭住址为“北京市海淀区清华园1号”,邮政编码为100084。
public class TestAddressWorker {
public static void main(String[] args) {
Worker worker = new Worker("zhangsan",25,2500);
worker.print();
Address addr = new Address("北京市海淀区清华园1号","100084");
addr.print();
}
}