Java面试汇总:Java基础(一)
1、为什么Java代码可以实现一次编写、到处运行?
JVM(Java虚拟机)是Java跨平台的关键。
在程序运行前,Java源代码(.java)需要经过编译器编译成字节码(.class)。在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。
同一份Java源代码在不同的平台上运行,它不需要做任何的改变,并且只需要编译一次。而编译好的字节码,是通过JVM这个中间的“桥梁”实现跨平台的,JVM是与平台相关的软件,它能将统一的字节码翻译成该平台的机器码。
注意:
- 编译的结果是生成字节码、不是机器码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行;
- 跨平台的是Java程序、而不是JVM,JVM是用C/C++开发的软件,不同平台下需要安装不同版本的JVM。
2、一个Java文件里可以有多个类吗(不含内部类)?
一个java文件里可以有多个类,但最多只能有一个被public修饰的类;
如果这个java文件中包含public修饰的类,则这个类的名称必须和java文件名一致。
3、说一说你对Java访问权限的了解
Java语言为我们提供了三种访问修饰符,即private、protected、public,在使用这些修饰符修饰目标时,一共可以形成四种访问权限,即private、default、protected、public,注意在不加任何修饰符时为default访问权限。
在修饰成员变量/成员方法时,该成员的四种访问权限的含义如下:
- private:该成员可以被该类内部成员访问;
- default:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问;
- protected:该成员可以被该类内部成员访问,也可以被同一包下其他的类访问,还可以被它的子类访问;
- public:该成员可以被任意包下,任意类的成员进行访问。
在修饰类时,该类只有两种访问权限,对应的访问权限的含义如下:
- default:该类可以被同一包下其他的类访问;
- public:该类可以被任意包下,任意的类所访问。
4、介绍一下Java的数据类型
Java数据类型包括基本数据类型和引用数据类型两大类。
基本数据类型有8个,可以分为4个小类,分别是整数类型(byte/short/int/long)、浮点类型(float/double)、字符类型(char)、布尔类型(boolean)。其中,4个整数类型中,int类型最为常用。2个浮点类型中,double最为常用。另外,在这8个基本类型当中,除了布尔类型之外的其他7个类型,都可以看做是数字类型,它们相互之间可以进行类型转换。
引用类型就是对一个对象的引用,根据引用对象类型的不同,可以将引用类型分为3类,即数组、类、接口类型。引用类型本质上就是通过指针,指向堆中对象所持有的内存空间,只是Java语言不再沿用指针这个说法而已。
扩展:
对于基本数据类型,需要了解每种类型所占据的内存空间,面试官可能会追问这类问题:
- byte:1字节(8位),数据范围是 -2^7 ~ 2^7-1。
- short:2字节(16位),数据范围是 -2^15 ~ 2^15-1。
- int:4字节(32位),数据范围是 -2^31 ~ 2^31-1。
- long:8字节(64位),数据范围是 -2^63 ~ 2^63-1。
- float:4字节(32位),数据范围大约是 -3.410^38 ~ 3.410^38。
- double:8字节(64位),数据范围大约是 -1.810^308 ~ 1.810^308。
- char:2字节(16位),数据范围是 \u0000 ~ \uffff。
- boolean:Java规范没有明确的规定,不同的JVM有不同的实现机制。
5、int类型的数据范围是多少?
int类型占4字节(32位),数据范围是 -2^31 ~ 2^31-1。
6、 请介绍全局变量和局部变量的区别
Java中的变量分为成员变量和局部变量,它们的区别如下:
成员变量:
- 成员变量是在类的范围里定义的变量;
- 成员变量有默认初始值;
- 未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同;
- 被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。
局部变量:
- 局部变量是在方法里定义的变量;
- 局部变量没有默认初始值;
- 局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。
7、请介绍一下实例变量的默认值
实例变量若为引用数据类型,其默认值一律为null。若为基本数据类型,其默认值如下:
- byte:0
- short:0
- int:0
- long:0L
- float:0.0F
- double:0.0
- char:’\u0000’
- boolean:false
8、为什么要有包装类?
Java语言是面向对象的语言,其设计理念是“一切皆对象”。但8种基本数据类型却出现了例外,它们不具备对象的特性。正是为了解决这个问题,Java为每个基本数据类型都定义了一个对应的引用类型,这就是包装类。
扩展:
Java之所以提供8种基本数据类型,主要是为了照顾程序员的传统习惯。这8种基本数据类型的确带来了一定的方便性,但在某些时候也会受到一些制约。比如,所有的引用类型的变量都继承于Object类,都可以当做Object类型的变量使用,但基本数据类型却不可以。如果某个方法需要Object类型的参数,但实际传入的值却是数字的话,就需要做特殊的处理了。有了包装类,这种问题就可以得以简化。
9、说一说自动装箱、自动拆箱的应用场景
自动装箱、自动拆箱是JDK1.5提供的功能。
自动装箱:可以把一个基本类型的数据直接赋值给对应的包装类型;
自动拆箱:可以把一个包装类型的对象直接赋值给对应的基本类型;
通过自动装箱、自动拆箱功能,可以大大简化基本类型变量和包装类对象之间的转换过程。比如,某个方法的参数类型为包装类型,调用时我们所持有的数据却是基本类型的值,则可以不做任何特殊的处理,直接将这个基本类型的值传入给方法即可。
10、如何对Integer和Double类型判断相等?
Integer、Double不能直接进行比较,这包括:
不能用==进行直接比较,因为它们是不同的数据类型;
不能转为字符串进行比较,因为转为字符串后,浮点值带小数点,整数值不带,这样它们永远都不相等;
不能使用compareTo方法进行比较,虽然它们都有compareTo方法,但该方法只能对相同类型进行比较。
整数、浮点类型的包装类,都继承于Number类型,而Number类型分别定义了将数字转换为byte、short、int、long、float、double的方法。所以,可以将Integer、Double先转为转换为相同的基本数据类型(如double),然后使用==进行比较。
示例代码:
Integer i = 100; Double d = 100.00;
System.out.println(i.doubleValue() == d.doubleValue());
Java面试汇总:Java基础(一)相关推荐
- 用友Java面试汇总
用友Java面试汇总 春招实习 参考意义不大 昨天晚上接到了用友的电话,让我订时间,约好今天1点30 1点40开始电话面试 (1)自我介绍,根据情况进行一些简单提问,例如问了我做项目的感受是什么,进入 ...
- [Java面试三]JavaWeb基础知识总结.
[Java面试三]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Int ...
- very very good,Java面试宝典+Java核心知识集
这几天刚整理出炉的两份最全"Java面试宝典+Java核心知识集"(very very good!!!),因此有了今天咱这篇文章,没错,我又来分享干货了!!! Java面试宝典 说 ...
- java面试-汇总篇
并发编程,网络通信,java虚拟机,linux的常用命令与分布式的环境搭建 ,数据库的设计和优化,消息中间件 熟悉netty,redis,mysql,oracle,mongodb,postgresql ...
- Java面试汇总>>>初级工程师—面试1000题
面试汇总>>> 每日刷题 001:重载和重写有什么区别?阐述二者是什么? 002:什么是线程池?线程池有什么优点? 003:线程有几种状态,他们是怎么切换的呢? 004:比较一下St ...
- 史上最全面Java面试汇总(面试题+答案)
微信搜索:"二十同学" 公众号,欢迎关注一条不一样的成长之路 JAVA面试精选[Java基础第一部分] JAVA面试精选[Java基础第二部分] JAVA面试精选[Java基础第三 ...
- Java面试之语言基础
文章目录 Java八种基本数据类型 Java三大基础特性 面向对象和面向过程的区别 面向过程 面向对象 Java与C++对比 Java8 新特性 Java反射机制 Java异常机制 Throwable ...
- java面试必知--基础
1 / 66 Java 基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的 j ...
- java面试之Java基础
Java的数据类型: 包括基本数据类型和引用数据类型: a.基本数据类型: 整数类型{long, int, short, byte}; 浮点类型: float, double; 字符类型: char; ...
最新文章
- Arcgis10.3在添加XY数据时出现问题
- 单链表反转的原理和python代码实现
- (4) hibernate增删查改+批量操作+类似Mybatis动态sql
- 前端学习(2835):小程序中使用less
- 怎么加载文件_Java虚拟机从入门到入土之JVM的类加载机制
- 1.4通过时间的方向传播
- matlab中的end
- 0.42-0.5+0.08与0.08-0.5+0.42是不完全相等,Why is 0.3 - 0.2 - 0.1 (or similar) not equal to zero?
- [读书笔记]编程之美(一)
- Silverlight 4 全屏
- rm命令-每日Linux命令
- Windows使用shipyard
- 系列九、vue中css样式字体设置为华文行楷
- 2019强网杯crypto writeup
- 车轮轨迹原理_在简单地形上小车运动轨迹的数学表达(一)
- 微信公众号链接小测试题js逻辑
- EXCEL筛选重复记录
- erlang NIF部分接口实现(一)加载过程及编写框架
- 如何计算UDP头的checksum
- 库存管理软件免费版软件哪个好用?