【Java基础4】面向对象(上)

面向对象(上)

一、填空题

1、 面向对象的三大特征是______、

2、 在Java中,可以使用关键字______来创建类的实例对象。

3、 定义在类中的变量被称为______,定义在方法中的变量被称为______

4、 面向对象程序设计的重点是______的设计,______是用来创建对象的模板。

5、 在非静态成员方法中,可以使用关键字______访问类的其它非静态成员。

6、 当一个对象被当成垃圾从内存中释放时,它的______方法会被自动调用。

7、 被static关键字修饰的成员变量被称为______,它可以被该类所有的实例对象共享。

8、 在一个类中,除了可以定义属性、方法,还可以定义类,这样的类被称为______。

10、所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用______关键字来修饰。

回答:

  1. 封装,继承,多态
  2. new
  3. 局部变量,成员变量。
  4. 类,类
  5. this
  6. finalize
  7. 静态变量
  8. 内部类
  9. (没有第九题)
  10. private

二、判断题

1、在定义一个类的时候,如果类的成员被private所修饰,该成员不能在类的外部被直接访问。

2、Java中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。

3、声明构造方法时,不能使用private关键字修饰。

4、类中static修饰的变量或方法,可以使用类名或对象的引用变量访问。

5、方法内部类中不能访问外部类的成员变量。

回答:

  1. 正确
  2. 正确
  3. 错误
  4. 正确
  5. 错误

三、选择题

1、类的定义必须包含在以下哪种符号之间?

A、方括号[] B、花括号{} C、双引号“” D、圆括号()

2、下面哪一个是正确的类的声明?
  A、 public void HH{…} B、 public class Move(){…}
C、 public class void number{} D、 public class Car{…}

3、在以下什么情况下,构造方法会被调用?

A、 类定义时 B、 创建对象时 C、 调用对象的方法时 D、 使用对象的变量时

4、下面对于构造方法的描述,正确有哪些?(多选)

A、方法名必须和类名相同

B、方法名的前面没有返回值类型的声明

C、在方法中不能使用return语句返回一个值

D、当定义了带参数的构造方法,系统默认的不带参数的构造方法依然存在

5、使用this调用类的构造方法,下面的说法正确的是?(多选)

A、使用this调用构造方法的格式为this([参数1,参数2…])

B、只能在构造方法中使用this调用其它的构造方法

C、使用this调用其它构造方法的语句必须放在第一行

D、不能在一个类的两个构造方法中使用this互相调用

6、下面哪些可以使用static关键字修饰?(多选)

A、 成员变量 B、局部变量 C、成员方法 D、成员内部类

7、关于内部类,下面说法正确的是?(多选)

A、成员内部类是外部类的一个成员,可以访问外部类的其它成员

B、外部类可以访问成员内部类的成员

C、方法内部类只能在其定义的当前方法中进行实例化

D、静态内部类中可以定义静态成员,也可以定义非静态成员

8、请先阅读下面的代码

public class Test {

  public Test(){

  	System.out.println("构造方法一被调用了");

  }

  public Test(int x){

  	this();

  	System.out.println("构造方法二被调用了");

  }

  public Test(boolean b){

  	this(1);

  	System.out.println("构造方法三被调用了");

  }

  public static void main(String[] args) {

		Test test = new Test(true);

	}

}

上面程序的运行结果为下列哪一项?

A、构造方法一被调用了 B、构造方法二被调用了

C、构造方法三被调用了 D、以上三个选项之和

9、Outer类中定义了一个成员内部类Inner,需要在main()方法中创建Inner类实例对象,以下四种方式哪一种是正确的?

A、 Inner in = new Inner() B、Inner in = new Outer.Inner();

C、 Outer.Inner in = new Outer.Inner(); D、Outer.Inner in = new Outer().new Inner();

回答:

  1. B
  2. D
  3. B
  4. ABC
  5. ABCD
  6. ACD
  7. ABCD
  8. D
  9. D

四、程序分析题

阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果。否则请说明编译失败的原因。

代码一:

class A {

	private int secret = 5;

}

public class Test1 {

	public static void main(String[] args) {

		A a = new A();

		System.out.println(a.secret++);

	}

}

代码二:

public class Test2 {

	int x = 50;

	static int y =200 ;

	public static void method() {

		System.out.println(x+y);

	}

	public static void main(String[] args) {

		Test2.method();

	}

}

代码三:

public class Outer {

	public String  name="Outer";

	private class Inner {

		String name="inner";

		void showName(){

			System.out.println(name);

		}

	}

	public static void main(String[] args) {

		Inner inner = new Outer().new Inner();

		System.out.println(inner.name);

	}

}

回答:

  1. 编译不能通过;在类A中secret前用的是private,因此在text1中无法编译;

  2. 编译不能通过;由public static void method() 可知,int x和int y前都要加上static,保持一致;

    在静态方法method()中不能访问非静态成员变量x

  3. 编译通过;结果为inner;

五、简答题

1、构造方法和普通的成员方法有什么区别?

2、什么是方法重写?

3、什么是多态?

4、抽象类和接口的区别?

回答:

  1. 构造方法的方法名和类名要一样,且没有返回值,系统会自动隐式生成。普通方法不能new ,只有构造方法才能new。

    构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。而普通方法只有在使用的时候才会被调用。在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值

  2. 重写:需要有继承关系,子类重写父类的方法!
        1、方法名必须相同
        2、参数列表必须相同
        3、修饰符:范围可以扩大,但是不能缩小
            public > protected > default > private
        4、抛出的异常:范围可以被缩小,但不能扩大:ClassNotFoundException(小) -->Exception(大)
    
    重写:子类的方法和父类必须要一致;方法体不同。
    重写都是方法的重写,与属性无关
    
    为什么需要重写?
        1、父类的功能子类不一定需要,或者不一定满足!
        快捷键:Alt + Insert : override
        
    @Override   //注解:有功能的注释!    
    
    无法重写:
    	1、static    方法,属于类,它不属于实例
       	2、final      常量
       	3、private    方法
    
  3. 多态:即统一方法可以根据发送对象的不同而采用多种不同的行为方式。(多态是方法的多态,没有属性)

    /*
    多态注意事项:
    1、多态是方法的多态,属性没有多态
    2、父类和子类,有联系     ——>类型转换异常!  ClassCastException!
    3、存在条件: 继承关系,方法需重写,父类引用指向子类对象!father f1 = new Son();
     */
    
  4. abstract 抽象类:本质上还是是类 extends: 单继承; 接口的子类使用 implements 关键字来实现接口,需要提供接口中所有声明的方法的实现,利用接口实现多继承。不能new抽象类,只能靠子类去实现它;抽象类中可以写普通方法;抽象方法必须在抽象类中
    接口中的所有定义的方法都是抽象的 public abstract
    

六、编程题

1、键盘录入一个字符串,把该字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符) 11

2、键盘输入若干字符串,利用StringBuilder完成字符串反转。

3、请按照以下要求设计一个学生类Student,并进行测试。

要求如下:

1)Student类中包含姓名、成绩两个属性

2)分别给这两个属性定义两个方法,一个方法用于设置值,另一个方法用于获取值.

3)Student类中定义一个无参的构造方法和一个接收两个参数的构造方法,两个参数分别为姓名和成绩属性赋值

4)在测试类中创建两个Student对象,一个使用无参的构造方法,然后调用方法给姓名和成绩赋值,一个使用有参的构造方法,在构造方法中给姓名和成绩赋值

回答:

  1. public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);//创建一个扫描器对象,用于接受键盘数据
            System.out.println("请输入一个字符串");
            if(scanner.hasNext()){//判断用户有没有输入字符串
                String str = scanner.next();//程序会一直等待用户输入完毕
                String firstStr = str.substring(0, 1);//获得首字符
                String Str= firstStr.toUpperCase();//首字符变大写
                String substring = str.substring(1);//获取原字符串第一个字符后面的剩余字符
                System.out.println(Str + substring);
            }
    
            scanner.close();
        }
    
  2. public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个字符串");
            String a=scanner.nextLine();
            StringBuilder b =new StringBuilder(a);
            System.out.println("字符串反转后的结果为"+b.reverse());
                while (a != null && !a.equals("")) {//当输入的为空或非字符串时结束
                    System.out.println("请输入一个字符串");
                    a = scanner.nextLine();
                    StringBuilder c =new StringBuilder(a);
                    System.out.println("字符串反转后的结果为"+c.reverse());
            }
        System.out.println("end of input string");
                scanner.close();
    
        }
    }
    
  public class Student {//学生类
  
      private String name;//名字
      private int score;//成绩
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public int getScore() {
          return score;
      }
  
      public void setScore(int score) {
          this.score = score;
      }
  
      public String Name;//名字
      public int Score;//成绩
  }
public class Application {//测试类
    public static void main(String[] args) {
        System.out.println("有参:");
        Student s1 = new Student();

        s1.setName("小明");
        System.out.println(s1.getName());

        s1.setScore(99);
        System.out.println(s1.getScore());

        System.out.println("==============================");

        System.out.println("无参:");
        Student s2 = new Student();
        s2.Name = "小红";
        s2.Score = 98;
        System.out.println(s2.Name);
        System.out.println(s2.Score);

    }
}

  • 9
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值