20210601面试一《Java基础面试》,面试题目整理

1.java中接口和抽象类的区别

抽象类是一种对事物的抽象,而接口是一种对行为的抽象; 抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。 抽象类是一种模板式设计,而接口是一种行为规范,是一种辐射式设计。

2.抽象类和普通类的区别

1.抽象类不能被实例化。 2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。 3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体 4.含有抽象方法的类必须申明为抽象类 5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类

 

3.抽象类是否可以有构造函数?

答案是可以有。抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码

4. 方法签名(what is method signature in Java?)

原意:Definition: Two of the components of a method declaration comprise the method signature—the method’s name and the parameter types.

方法声明的两个组件构成了方法签名 - 方法的名称参数类型

案列实践:

public double calculateAnswer(double wingSpan, int numberOfEngines,
                              double length, double grossTons) {
    //do the calculation here
}

该方法的签名为 calculateAnswer(double, int, double, double)

5.实例(找出该函数运行的结果)

public class Main{
    public static void main(String[] args){
        System.out.println(B.c);
    }
}
class A{
    public  static String c = "C";
    static{
        System.out.println("A");
    }
}
class B extends A {
    static{
        System.out.println("B");
    }
}

结果:该结果为 A C

6.方法宗量

宗量(argument),可以理解为自变量,在计算机科学与技术中可能当成形式参数更好理解一些。

方法的接受者,在运行时可以理解为方法的实际执行者。

public class Book{
	public  void read(){
 		public static void doRead(Book b){
	b.read();
		}
	}
}

类方法 Book.doRead(Book) 他的接收者就是 Book 这个类对象,他的参数 b 是一个形式参数。意思是在方法没被调用前,b 没有具体的值,就只是一个形式而已,相当于于一个占位符。再来看方法体:b.read(),我们可以说b.read()一定是指向Book#read这个方法吗?也可以不严谨的说 read 的执行者 b 一定是 Book 对象吗?不行的,因为面向对象的多态性,父类的方法是可以被子类重写的。只有运行时,我们调用这个方法时才可以确定方法的接收者,比如 Book.doRead(new Magazine()),在运行时实际指向的是 Magazine#read。所以说方法的接收者是形式变量(宗量)。

6.注解(Annotation)

简介:Java注解(Annotation)又称为Java标注,是JDK5.0引入的一种注释机制

Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注

7.Equals和==的区别

值类型是存储在内存中的栈中,而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。 equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true。

8.λ表达式(Java Lambda 表达式)

这里还是需要自己多试试这个函数的操作步骤。

https://www.runoob.com/java/java8-lambda-expressions.html

9.char可以存储汉字吗?

答案是可以的,char类型中存储的是Unicode编码,Unicode编码中是存在中文的,所以Char自然可以存储汉字,但是!仅限于Unicode中存在的汉字。一个汉字的占两个字节,一个Unicode也是占两个字节 ,char存储汉字完全没有问题。

10.Java序列化

定义:把对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为对象的过程称为对象的反序列化。

  对象的序列化主要有两种用途:   1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;   2) 在网络上传送对象的字节序列。

参考链接:https://www.cnblogs.com/xdp-gacl/p/3777987.html https://www.cnblogs.com/9dragon/p/10901448.html

11. try catch finally return的情况

返回的数据为基本数据类型,则finally中对要返回数据操作无影响

import java.text.ParseException;
public class Test {
    public static int num = 1;
    public static void main(String[] args) throws ParseException {
        int result;
        result = num();
        System.out.println(result);
    }
    private static int num() {
        try{
            int b = 4/0;
            return num = num + 5;
        }catch(RuntimeException exception){
            return num = num + 10;
        }finally {
            System.out.println("不管你怎么样,我都是要执行");
        }
    }
}
/*
该代码执行结果为:不管你怎么样,我都是要执行  11  
*/

返回的数据为引用数据类型,finally中如果改变了返回对象的属性则影响结果,如果改变的是对象的引用则和基本数据类型一样不改变结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值