java基础面试题day1

Posted 只谈技术,不谈理想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础面试题day1相关的知识,希望对你有一定的参考价值。

重载和重写的区别

重载发生在同一个类中,方法名相同、参数列表、返回类型、权限修饰符可以不同

重写发生在子类中,方法名、参数列表、返回类型都相同,权限修饰符要大于父类方法,声明异常范围要小于父类方法,但是final和private修饰的方法不可重写

什么是字节码,采用字节码的好处是什么?

什么是字节码

字节是电脑里的数据量单位。字节码(Byte-code)是一种包含执行程序、由一序列 op 代码/数据对组成的 二进制文件

字节码的好处

Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

Java都有那些开发平台?

JAVA SE:主要用在客户端开发

JAVA EE:主要用在web应用程序开发

JAVA ME:主要用在嵌入式应用程序开发

关于 JVM JDK 和 JRE 最详细通俗的解答
Java虚拟机是运行Java字节码的虚拟机。JRE是Java运行时环境。JDK是Java开发工具

什么是跨平台性?原理是什么

所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。

JAVA创建对象的几种方式

运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。

调用对象的clone()方法。

用new语句创建对象,这是最常见的创建对象的方法。

运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

为什么有些 java 类要实现 Serializable 接口

为了网络进行传输或者持久化

什么是序列化

将对象的状态信息转换为可以存储或传输的形式的过程

&和&&的区别

&运算符有两种用法:(1)按位与;(2)逻辑与。

&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此

static关键字有哪些作用

主要有两个作用:

static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象,也能使用属性和调用方法!。具体而言使用static有四种情况:成员变量,成员方法,代码块,内部类

super和this的区别

this表示当前对象:super表示父类对象:

字符型常量和字符串常量的区别

构造器 Constructor 是否可被 override

Java的多态具体表现在什么地方

Java的多态性是有类的继承,重写,以及父类引用指向子类对象。由于一个类有多个子类,多个子类可以重写父类方法,并且不同子类对象也可以指向同一个父类,这样只有程序在运行时才能知道具体代表哪个子类对象,这就表现了多态性

接口的作用

接口定义某种功能的规范,当我们编写的某些类突然有一天需要某些新增的业务和功能时,这时只需要该类接口,重写接口的抽象方法,即具备的该功能。

接口可以扩展类的功能,弥补了java类单继承的缺陷

接口和抽象类的区别是什么

相似点:

(1)接口和抽象类都不能被实例化

(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法

不同点:

(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法,

(2)抽象类可以有构造方法,而接口没有

(3)抽象类中的成员变量可以是各种类型的,接口的成员变量只能是 public static final 类型的,并且必须赋值

✨Java基础每天一道基础题+面试题——Day01✨

今天是持续学习的第 29 / 100 天。 如果你有想要交流的想法、技术,欢迎在评论区留言。

🚩一道笔试题

題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

public static void main(String[] args) {
        //需要输入的月份:
        System.out.println("请输入的月份");
        Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        int[] arr = new int[i];
        //定义1和2月都只有1对兔子
        arr[0] =arr[1] =1;
        //定义初始月份
        int j =0;
        //try catch 增加稳定性
        try {
            //不确定月份所以弄成while循环
            while (true){
                //前2月
                if (j<2){
                    System.out.println("第"+(j+1)+"个月后有"+arr[j]+"对兔子.");
                    //之后
                } else if (j>=2){
                    arr[j]=arr[j-1]+arr[j-2];

                    System.out.println("第"+(j+1)+"个月后有"+arr[j]+"对兔子.");
                }
                j++;
            }
        } catch (Exception e) {
            System.err.println("到头辣!!");
        }
    }

代码均写有注释了
以上是我的解法
应该还有更优的解法
甚至为了表示999个月,我想到用BigInteger,
具体参考:
https://blog.csdn.net/guomutian911/article/details/45030121

等半年后再回来重做一遍,
看看这梦开始的地方

参考解法:

public class Rubbit {

	public static void main(String[] args) {

	Scanner sc = new Scanner(System.in);
	System.out.print("请输入月份");
	int n = sc.nextInt();
	System.out.println("在"+n+"月份有"+fun(n)+"对兔子");
	}
	private static int fun(int n) {
		if (n == 1 || n == 2)     //  表示第1月,第2月的对数
			return 1;
		else
			return fun(n - 1) + fun(n - 2);  // 3月之后该怎么算
	}

}

🚩一道面试题

2、访问修饰符public,private,protected,以及不写时的区别?


原文链接:https://blog.csdn.net/v123411739/article/details/115364158

以上是关于java基础面试题day1的主要内容,如果未能解决你的问题,请参考以下文章

java基础面试题都有哪些?

Java基础面试题(建议收藏)

Java基础面试题(建议收藏)

Java基础面试题,JavaWeb面试题

面试题Java基础部分面试题

Java基础面试题有哪些?