Java基础知识点汇总 二 类和对象

本文深入探讨了Java中的类和对象,包括类的结构、构造函数的使用、抽象类与接口的区别以及实现细节。详细解析了实例化抽象类和接口的限制,同时讨论了类的修饰符、继承、内部类以及对象创建的不同方式。通过实例分析了Java编程中的常见问题和规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、类和对象

        一般来说,类包括以下内容:

        1、修饰符,例如public、private以及您稍后会遇到的许多其他修饰符。(private修饰符只能应用于嵌套类。)

        2、类名,首字母按约定大写。

        3、类的父类(超类)的名称(如果有),前面带有关键字extends。一个类只能扩展(子类)一个父类。

        4、由类实现的接口的逗号分隔列表(如果有),前面带有关键字implements。一个类可以实现多个接口。

        5、类体,用大括号 {} 括起来。

1、构造函数

        编译器会自动为任何没有构造函数的类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。

1、问:以下程序定义了一个Sample类:

public class Sample{ 
  public static void main(String args[]){ 
    System.out.println(args[2]) ;
  }
}

        运行命令“java Sample One Two Three”,会出现什么情况?
        (A) 打印“One” 
        (B) 打印“Two”
        (C) 打印“Three” 
        (D) 抛出异常:java.lang.ArrayIndexOutOfBoundsException   

答:C;Java数组的索引从零开始,因此args[2]对应参数“Three”。

2、抽象类

1、问:以下程序代码能否通过编译,如果通过编译,运行“java Sample”时会出现什么情况?

public abstract class Sample{
  boolean f;
  public static void main(String[] args) {
    System.out.println(new Sample().f);
  } 
}

        (A)运行时打印“false”。
        (B)编译时出错:变量 f 有可能没有被初始化。
        (C)运行时出错:抛出java.lang.NullPointerException。
        (D)编译时出错:Sample类是抽象类,不允许被实例化。

答:D;Sample类被声明为抽象类,main()方法中试图创建Sample类的实例,这是非法的。

2、问:以下程序代码能否通过编译,如果通过编译,运行“java Sub”时会出现什么情况?

abstract class Base {
  abstract void amethod(); 
}
public class Sub extends Base{
  void amethod(int a){
    System.out.println(a);
  }
  public static void main(String args[]){
    Sub s=new Sub();
    s.amethod(1);
  }
}

        (A) 运行时打印“1”。
        (B) 编译时出错:Sub类必须声明为抽象类。
        (C) 编译时出错:Sub类中的amethod()方法不能带参数。 
        (D) 运行时抛出异常。

答:B;Sub类没有实现Base类中不带参数的amethod()方法,因此Sub类必须声明为抽象类。

3、类和修饰符

1、问:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

答:可以。必须只有一个类名与文件名相同。

2、问:以下代码能否通过编译,如果能通过编译,运行“java Sub”时得到什么打印结果? 

private class Base{
   Base(){
     int i = 100;
     System.out.println(i);
   }
}

public class Sub extends Base{
   static int i = 200;
   public static void main(String args[]){
     Sub s = new Sub();
   }
}

        (A)编译时出错。
        (B)运行时打印“100”。
        (C)运行时抛出异常。
        (D)运行时打印“200”。
您的答案:A
正确答案:   A

答:A;Base类是顶层类,不能用private修饰。

3、问:以下代码能否通过编译,如果能通过编译,运行“java Sample”时得到什么打印结果?

public class Sample{
  final int x;
  Sample(int a){
     x = a;
  }
  final int getX(){
    return x;
  }

  public static void main(String[] args){
    System.out.println(new Sample(2).x);
  }
}

        (A)编译时出错:main()方法不能访问final类型的变量x。
        (B)运行时打印“2”。
        (C)编译时出错:构造方法不能为final类型的变量x进行初始化。
        (D)运行时抛出异常。

答:B;以上构造方法为final类型的变量x进行初始化,这是合法的。

4、问:构造方法可以被哪个修饰符修饰?
        (A)abstract
        (B)static
        (C)final
        (D)private

答:D;构造方法不能被abstract、static和final修饰。可以被public和private修饰。

4、抽象类与接口

1、问:以下哪个选项属于抽象类与接口的共同特点?
(A)都不能被实例化。
(B)都只能包含抽象方法。
(C)都没有构造方法。
(D)都只能包含用public、static和final修饰的成员变量。

答:A;抽象类与接口都不能被实例化;抽象类能包含抽象方法与非抽象方法;抽象类有构造方法;接口只能包含用public、static和final修饰的成员变量。

2、问:抽象类和接口有什么区别?

答:

1、抽象类和接口都不能直接实例化。如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

2、抽象类要被子类继承,接口要被类实现。

3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。

4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

6、抽象方法只能申明,不能实现。

7、抽象类里可以没有抽象方法

8、如果—个类里有抽象方法,那么这个类只能是抽象类

9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

10、接口可以继承接口,并且可多继承接口,但类只能单—继承。

11.接口可以通过匿名内部类实例化。接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。而接口表示的是,这个对象能做什么。

3、问:接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可 继承实体类(concrete class)? 

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

5、类的继承

1、问:如果类C是类B的子类,类B是类A的子类,那么下面哪个选项的描述正确?

        (A) C不仅继承了B中的成员,同样也继承了A中的成员
        (B) C只继承了B中的成员
        (C) C只继承了A中的成员
        (D) C不能继承A或B中的成员

答:A;类C可以继承直接父类B以及间接父类A的成员。

6、内部类

1、问:Static Nested Class 和 Inner Class 的不同?

答:Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例 化。而通常的内部类需要在外部类实例化后才能实例化。

7、类的加载

1、问:简述JVM中类的加载原理?

答: JVM 加载 class 文件的原理机制是由 ClassLoader 和它的子类来实现的,Java ClassLoader 是一个重要的 Java 运行时系统组件。它负责在运行时查找和装入类文件的类。

8、对象

1、问:java创建对象有哪些方式?

答: new 创建对象、反射机制创建对象、通过clone方法、序列化机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐望云起

如果觉得有用,请不吝打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值