Java基础面试题(6)

76.静态方法和实例方法有何不同?

静态方法和实例方法的区别主要体现在两个方面:

        在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名" 的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

        静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法), 而不允许访问实例成员变量和实例方法;实例方法则无此限制。

77.static 关键字会改变类中成员的访问权限吗?

        Java 中的 static 关键字不会影响到变量或者方法的作用域。在 Java 中能够影响到访 问权限的只有 private、public、protected(包括包访问权限)这几个关键字。

78.能通过 this 访问静态成员变量吗?

        可以;

79.static 能作用于局部变量么?

        在 C/C++中 static 是可以作用域局部变量的,但是在 Java 中切记:static 是不允许用 来修饰局部变量。不要问为什么,这是 Java 语法的规定。

80.类的属性赋值的位置有哪些?先后顺序为何?

        ①默认初始化

        ②显式初始化/⑤在构造代码块中赋值

        ③构造器中初始化

        ④有了对象以后,可以通过"对象.属性"或"对象.方法"的方式,进行赋值

        ① - ② / ⑤ - ③ - ④

81.final 可以用来修饰哪些结构,分别表示什么意思(***)?

        在 Java 中声明类、变量和方法时,可使用关键字 final 来修饰,表示“最终的”。

        final 修饰的类不能被继承。

        final 修饰的方法不能被子类重写,方法一旦被修饰,JVM 会尝试将其内联,以提高运 行效率。

        final 修饰的变量不可以被改变,如果修饰引用,那么表示引用不可变,引用指向的内 容可变。

        final 修饰的变量我们称之为常量,会在编译阶段存入常量池中。

82.Java 中怎么创建一个不可变对象(***)?

不可变对象是实例,其状态在初始化后不会改变。 例如, String 是一个不可变的类, 一旦实例化,其值就永远不会改变。

        1.对象的状态在构造函数之后都不能被修改,任何修改应该通过创建一个新对象来实现。

        2.所有的对象属性应该都设置为 final。

        3.对象创建要正确,例如:对象的应用不能在构造函数中被泄露出去。

        4.类要设置为 final,确保不要继承 Class 修改了 immutability 特性。

83.如下代码的运行结果?

        String a = "hello2";

        final String b = "hello"; // 编译期常量

        String d = "hello"; // 运行时常量

        String c = b + 2; //hello2

        String e = d + 2; //hello2

        System.out.println((a == c)); //true

        System.out.println((a == e)); //false

84.Java 中的编译期常量是什么?使用它又什么风险(*)?

         公共静态不可变(public static final )变量也就是我们所说的编译期常量,这里的 public 可选的。实际上这些变量在编译时会被替换掉,因为编译器知道这些变量的值,并且知道这 些变量在运行时不能改变。

        这种方式存在的一个问题是你使用了一个内部的或第三方库中的公有编译时常量,但是 这个值后面被其他人改变了,但是你的客户端仍然在使用老的值,甚至你已经部署了一个新 的 jar。为了避免这种情况,当你在更新依赖 JAR 文件时,确保重新编译你的程序。

85.抽象类的意义(*)?

        1、为其他子类提供一个公共的类型。

        2、封装子类中重复定义的内容。

        3、定义抽象方法,子类虽然有不同的实现,但是定义时是一致的。

86.一个抽象类中可以定义构造器吗?

        可以;

87.是否可以这样理解:抽象类就是比普通类多定义了抽象 方法,除了不能直接进行类的实例化操作之外,并没有任何 的不同?

         可以;

88.Java 能不能多继承(***)?

        Java 类和类之间只能是单继承,不能是多继承;但是可以多层继承; Java 接口和接口之间可以是多继承;

89.接口是否能继承接口? 抽象类是否能实现(implements) 接口? 抽象类是否能继承非抽象的类?         

        能,能,能

90.abstract class 和 interface 的区别(***)?

        1、抽象类是由 abstract 修饰的类,接口不是类。

         2、抽象类可以定义任意访问权限的数据、抽象方法、普通成员方法; 接口只能定义公 共的静态的常量、公共抽象方法;

         3、对于子类而言,它只能继承一个抽象类,但是却可以实现多个接口。如果一个类实现 了接口,它必须实现接口中声明的所有方法;但是类可以不实现抽象类声明的所有抽象方法, 但是前提该类必须也得声明为抽象类。

         4、抽象层次不同。抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整 体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

         5、跨域不同。抽象类所跨域的是具有相似特点的类,而接口却可以跨域不同的类。

         6、设计层次不同。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。

         7、抽象类和接口都不能被实例化。

  • 58
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值