JAVA面试必问题(基础部分)

1.java有哪些基本类型

整数类型:boolean、byte、short、int、long、char
浮点类型:float、double

2.JDK、JRE、JVM之间的区别

  1. JDK
    JDK ( Java SE Development Kit ),Java 标准的开发包,提供了编译、运行 Java 程序所需要的各种工具和资源 ,包括了jre,编译java的工具,监控JVM的工具。
  2. JRE
    JRE ( Java Runtime Environment ) , Java 运行时环境,用于解释执行 Java 的字节码文件 。普通用户只需要安装 JRE 来运行 Java 程序。大部分都是由C和C++语言编写的,是我们在编译Java时所需要的类库。
  3. JVM
    JVM ( Java Virtual Mechinal ), Java 虚拟机,是 JRE 的一部分。是运行Java字节码的虚拟机,通过编译.java文件为.class文件得到字节码文件 , .class文件包含JVM可以理解的字节码。(Java的跨平台就是由中间的JVM陕西西安的跨平台,JVM从软件层面屏蔽了底层硬件、指令层面的细节让它可以兼顾各种系统)

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

一个.java源文件中可以包括多个类,但是只能有一个public类,限制就是public的类名必须与文件名相一致。

4.String、StringBuffer、StringBuilder的区别

String创建后内容和长度无法改变(因为String存储的数组被final修饰)。但是String类对象可以用操作符“+”进行连接。因为String不可变这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间

StringBuffer是可变的(因为StringBuffer存储的数组没有被final修饰),线程安全的,效率低的。任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量

StringBuilder是可变的,线程不安全的,效率高的(因为StringBuilder存储的数组同样没有被final修饰)

5.char 型变量中能不能存贮一个中文汉字?为什么?

能存储中文汉字,因为char型变量是用来存储Unicode编码的,Unicode编码中包括了中文汉字,所以可以存储中文汉字(但仅限于Unicode存储的汉字)。(PS:由于Unicode编码是两个字节,所以char型变量也是两个字节)

6.==操作符和equals()的区别?

equals()是属于java.lang.Object类里面的方法,如果该方法没有被重写过的话,那它和==是一样的。但是一般情况下类都重写equals()用来比较内容是否相等。

1.==一般用于比较变量所对应的堆内存中所存储的数值是否相同,可以用于比较基本类型和引用类型(当比较引用类型时,只有指向同一个对象的时候才会返回true)。

2.equals()是用来比较两者的值(内容)是否相等。

7.使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

使用 final 关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

8.重载和重写的区别?

重载:发生在同一个类中,方法名必须相同,参数类型要不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。(也是多态的一种体现)

重写:发生在父类子类中,方法名、参数列表必须相同,返回值范围小于等于父类,访问修饰范围大于等于父类,如果父类方法访问修饰符为private就不能重写方法(相当于在子类中新定义了一个方法,并没有覆盖到)

9.面向对象的特征有哪些方面?

面向对象的特征主要有四个方面:封装、继承、多态、抽象。
封装:封装就是把l类、过程和数据封装在一起,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取。

继承:继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要。提高了软件的可重用性和可扩展性。

多态:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。分为编译时的多态性和运行时的多态性

抽象:找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处(比如:鸡和鸭都是动物),并且会的那些方面,将注意力集中在与当前目标有关的方面。

抽象类和接口的区别

体现的思想不同,抽象类主要体现的是这是什么(名词),接口主要体现的是这能做什么(形容词)。

语法上的区别有:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量。
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是 public,protected,但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法。
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是 public static final 类型,并且默认即为 public static final 类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十三豆啊

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值