类和对象练习

1.第一题:下面代码的运行结果是()

public class TestDome{
    public static void main(String[] args){
        String s =" ";
        System.out.println("s="+s);
    }
}

A.代码编程成功,并输出”s=”
B.代码编译成功,并输出”s=null”
C.由于String s没有初始化,代码不能编译通过。
D.代码编译成功,但捕获到NullPointException异常

答案:该题选C
因为String 是局部变量,局部变量要进行初始化。

2.第二题阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有()

package NowCoder;
class Test {
	public static void hello() {
	    System.out.println("hello");
	}
}
public class MyApplication {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test test=null;
		test.hello();
	}
}

A.能编译通过,并正确运行
B.因为使用了未初始化的变量,所以不能编译通过
C.以错误的方式访问了静态方法
D.能编译通过,但因变量为null,不能正常运行

答案:该题选A
因为Test test=null;//定义了一个test引用不指向任何对象,所以此处可以正常访问。 且hello被static修饰是静态方法,属于类,调用静态方法不需要创建实例对象。(hello方法不依赖Test方法,是可以通过类名调用的。)所以test不引用任何对象来调用hello也可以。

3.第三题:如下代码的输出结果是什么?

public class Test { 
    public int aMethod(){
        static int i = 0;
        i++; 
        return i;
    } 
public static void main(String args[]){
    Test test = new Test(); 
    test.aMethod(); 
    int j = test.aMethod();
    System.out.println(j);
    } 
}

A.0
B.1
C.2
D.编译失败

答案:该题选D
main方法中testDome.aMethod();//通过对象的引用调用aMethod。调用aMethod(),但是此时int i被static所修饰,会报错。因为static是静态的属于成员变量,属于类,不能定义在方法里面。

4.第四题:当你编译和运行下面的代码时,会出现下面选项中的哪种情况?

public class Pvf{
    static boolean Paddy;
    public static void main(String args[]){
        System.out.println(Paddy);
    }
}

A.编译时错误
B.编译通过并输出结果false
C.编译通过并输出结果true
D.编译通过并输出结果null是引用

答案:该题选B

在Java中,成员变量没有赋初值的时候,会有默认的初始值。该题中打印Paddy时没有赋初始值,boolean的默认初始值为false。

基本类型的初值: int是0,boolean是false, char类型是’\u0000’,引用类型是null,如String。

5.第五题:已知如下类说明:

public class Test{
  private float f=1.0f;
  int m=12;
  static int n=1;
  public static void main(String args[]){
    Test t=new Test();
  }
}

如下哪些在main函数中使用是正确的()

A.t.f = 3.0
B.this.n
C.Test.m
D.Test.n

答案:该题选C
A:f是float类型,而3.0是double类型,应该为t.f = 3.0 f
B:n是静态的,需要通过类名访问,不能通过this访问,this代表当前对象的引用,但是静态的成员变量不属于this。
C:m是成员变量,通过对象来进行调用。
D:正确,n通过类名访问

6.第六题:以下代码运行输出的是

public class Person{

	private String name = "Person";

	int age=0;

}

public class Child extends Person{

	public String grade;

	public static void main(String[] args){

		Person p = new Child();
}

A.输出:Person
B.没有输出
C.编译出错
D.运行出错

答案:此题选:C
private私有,则name只能在TestDome这个类当中使用。

7.第七题:下面哪一项不是 java 类访问控制关键字
A.public
B.this
C.private
D.protected

答案:此题选B
Java中的访问控制修饰符有3个:private,public,protected
而this属于关键字

8.第八题:关于以下程序代码的说明正确的是()

public class HasStatic {// 1
	private static int x = 100;// 2
	public static void main(String args[]) {// 3
		HasStatic hsl = new HasStatic();// 4
		hsl.x++;// 5
		HasStatic hs2 = new HasStatic();// 6
		hs2.x++;// 7
		hsl = new HasStatic();// 8
		hsl.x++;// 9
		HasStatic.x--;// 10
		System.out.println(" x=" + x);// 11
	}
}

A.程序通过编译,输出结果为:x=102
B.程序通过编译,输出结果为:x=103
C.10行不能通过编译.因为x星私有静态变量
D.5行不能通过编译.因为引用了私有静态变量

答案:该题选A
x属于静态成员,静态成员都存放在所对应的方法区中。所有对x的操作针对的都是同一份。第八行中hal引用了新的new TestDome(),于第4行的new TestDome()不同。

9.第九题:以下哪项说法是正确的?
A.public关键字只能修饰类名
B.public关键字只能修饰方法
C.public关键字只能修饰成员变量
D.以上说法都不对

答案:该题选D
public是一个访问修饰限定符,可以修饰类名,接口,方法,成员变量等。

10.第十题:以下代码在编译和运行过程中会出现什么情况

public class TestDemo{

	private int count;

	public static void main(String[] args) {

		TestDemo test=new TestDemo(88);

		System.out.println(test.count);

	}

	 TestDemo(int a) {//构造方法

		 count=a;

	}

}

A.编译运行通过,输出结果是88
B.编译时错误,count变量定义的是私有变量
C.编译时错误,System.out.println方法被调用时test没有被初始化
D.编译和执行时没有输出结果

答案:该题选A
当代码运行到TestDemo test=new TestDemo(88);会先执行构造方法,将88的值,赋值给count,所以最终输出的值是88。

11.第十一题:在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()
A.this.A(x)
B.this(x)
C.super(x)
D. A(x)

答案:该题选:B
this有三个作用
1)this.data 表示属性;
2)this func( ) 表示只调用当前类的方法;
3)this( )表示调用当前类的构造方法;
此处在当前类当中,调用构造方法A(int a),使用this(x);的方式。