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的主要内容,如果未能解决你的问题,请参考以下文章