Java基础语法面试题
1,关于JDK,JRE,JVM
【为什么安装包要分JDK和JRE?】
先来说说什么是JDK,JRE。
JDK:Java Development Kit Java开发工具包【开发Java程序用】
JRE:Java Runtiome Environment Java运行环境【运行Java程序用】
【注:下载的JDK包是包含了JDK和JRE的,JDK和JRE是逻辑上的区分,两者在JDK下载的包中都有】
JDK与JRE的关系:以Java代码运行为例,编写好Java代码之后,通过javac将java源文件编译成class字节码文件,然后通过java命令,运行字节码文件。那么运行字节码的环境就是JRE。(JRE的核心就是JVM)
了解完JDK和JRE是什么之后,再聊聊为什么开发者当时要把一个安装包分成两部分呢?
平常使用的软件都是一键安装的,但JDK需要安装两次。JDK的发明者不会这么无聊,故意给开发者增加麻烦。
【我想】:这应该跟生产环境的部署问题有关,关于生产环境部署JDK还是JRE一直饱受争议,具体情况根据项目而定。
出于对性能的考虑,尽可能的使服务器轻,能少装一个软件就少装一个,这样生产环境部署JRE就OK了。【又省了资源】
除了这个方面之外,还有一种可能。JDK的开发也有可能是分团队的,JDK和JRE可能是交由不同团队开发,JDK和JRE的耦合也可能因此而减小,从而加快JDK的迭代版本。(毕竟现在JDK一年更新两次)
【为什么Java语言是跨平台的?】
跨平台和Java 虚拟机有关。
JVM有两个主要的功能:
- 适配不同的操作系统的指令集(兼容不同的操作系统)
- 翻译字节码文件为机器码执行
(Oracle官网上下载JDK,不同操作系统的JDK是不一样的,对应不同的虚拟机)
这个就跟JVM有关了,先来了解一下什么是JVM:
JVM:Java Virtual Machine Java虚拟机
JVM的主要作用就是将class字节码文件翻译成机器码(01)供给计算机执行。
跨平台——Java程序可以在多种平台上运行。
平台指的是操作系统,目前主流的操作系统:Windows,Mac,Linux。
以日常软件为例,同一个软件的win版和mac版是分开的。但是功能却是基本相同的。
JVM同样如此,也有win版,mac版以及linux版。安装在不同的平台上的JVM虽然有所差异,但都能完成同样一件使命——将class文件翻译成机器码。
概括来说,JVM有两个功能:其一是,其二是翻译class字节码文件。
【为什么要设置环境变量?】
在解决这个问题之前,先解决环境变量是干嘛的:
运行一个程序(命令),系统从当前目录寻找,或者从环境变量中寻找。
换句话说,如果在java,javac的目录下执行这个两个命令,是没有问题的。但是如果更换了目录,系统在当前目录找不到,就会去环境变量中寻找。所以设置环境变量的根本目的是在电脑的任何一个文件夹下都可以编译运行Java程序。
2,关于包装类和基本数据类型
包装类型和基本数据类型的区别
- 声明方式:包装类型需要new声明
- 存储方式:基本数据类型存放在栈中,包装类型存在堆中
- 初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;
Integer 与 int 的区别
Integer 是引用类型,默认值是null。而int是是值类型默认值是0
3,关于String类
1,String,StringBuilder,StringBuffer的区别
可变性
String是不可变的,StringBuffer和StringBuilder是可变的
安全性
StringBuffer和String是线程安全的,,StringBuilder是线程不安全的
【解释】
聚焦:可变性,安全性
String 底层使用final修饰的数组实现
线程安全问题
String 中的对象是不可变的,也就可以理解为常量,线程安全。
StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。
对于三者使用的总结:
- 操作少量的数据: 适用String
- 单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
- 多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer
2,String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有。
因为String被设计成不可变(immutable)类(final修饰),所以它的所有对象都是不可变对象。
在这段代码中,s原先指向一个String对象,内容是 "Hello",然后对s进行了+操作
这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!"
原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。
3,String str =“i”;和String str = new String("i");有区别吗?
前者会被JVM分配到常量池中,常量池中没有重复的元素。
String str1 =“i”;
String str2 =“i”;
str2不会重新创建一个常量,而是指向str1。
String str1 = new String("i");
String str2 = new String("i");
str1会在堆内存中创建对象
str2还是会再次创建一个新的对象
4,如何将字符串反转?
使用StringBuilder或者StringBuffer的reverse()方法。
StringBuffer str1 = new StringBuffer("12345");
StringBuffer str2 = str1.reverse();
System.out.println(str2);
5,关于运算符
==和equals的区别
==:
- 基本数据类型:比较值是否相等
- 引用类型:比较内存地址是否相同
equals:
通常会被重写,比较引用类型的内容是否相同
int x = 7;
int y = 7;
//比较基本数据类型的值
System.out.println(x==y);
String str1 = new String("123");
String str2 = new String("123");
//比较引用类型的内存地址
System.out.println(str1==str2);
//比较引用类型的内容是否相同
System.out.println(str1.equals(str2));
&和&&的区别(|和||同理)
&和&&表示逻辑与,两边同时为true时才为true。
&&具有短路功能,&&左边为false时,右边表达式不会执行。
6,关于Math类
Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
Math类中提供了三个与取整有关的方法:
ceil(向上取整)、floor(向下取整)、round(+0.5后四舍五入)
Math.ceil(11.3)的结果为12
Math.ceil(-11.3)的结果是-11
Math.floor(11.6)的结果为11
Math.floor(-11.6)的结果是-12
Math.round(11.5)的结果为12
Math.round(-11.5)的结果为-11。
Java基础语法面试题的更多相关文章
- Java基础语法面试题50题整理(带答案)
嗯,之前某些原因整理了这份面试题,加油生活 (: 0,嗯,先做简单的,那个不对() 1,int [] sy = {0,9,2,3}; 2,int [] sy1 = new int[4]; 3,in ...
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- 第一章 –– Java基础语法
第一章 –– Java基础语法 span::selection, .CodeMirror-line > span > span::selection { background: #d7d4 ...
- Java基础语法02——流程控制
流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- Java基础语法(下篇)
Java基础语法(下篇) 内容概要: (1)函数的定义 (2)函数的特点 (3)函数的应用 (4)函数的重载 ...
- Java基础语法(上篇)
Java基础语法(上篇) 知识概要: (1)关键字的表示与规范 (2)标示符 (3)注释 (4 ...
- java——基础语法
java基础语法 1.关键字:java赋予特殊含义的单词. 2.标识符:程序中开发人员自定义的名词,例如:类名,函数名,变量名(注意事项:①不能以阿拉伯数字开头②不能采用关键字). 3.常量:固定的数 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...
随机推荐
- kuangbin专题简单搜索题目几道题目
1.POJ1321棋盘问题 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形 ...
- React Router 4.0 体验
React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...
- 新手入门必看:VectorDraw 常见问题整理大全(二)
VectorDraw Developer Framework(VDF)是一个用于应用程序可视化的图形引擎库.有了VDF提供的功能,您可以轻松地创建.编辑.管理.输出.输入和打印2D和3D图形文件.该库 ...
- ANDROID培训准备资料之四大组件的简单介绍
Android四大组件是一个android app 最基本的组成部分,这篇博客主要给大家简单的介绍一下四种组件 (1)Activities (2)Services (3)BroadcastReceiv ...
- java多线程执行时主线程的等待
1.通过thread.join()方式,注意:如果有多个子线程,需要将全部的线程先start,然后再join.代码示例如下: public class Main { public static ...
- GCN 简单numpy实现
`#参考:https://blog.csdn.net/weixin_42052081/article/details/89108966 import numpy as np import networ ...
- ngx-echarts 图表数据动态更新
使用echarts绘制图表时,初次赋值数据正常展示,重新获取数据之后,图表没有跟着动态刷新.解决的办法是: html文件 <div echarts [options]="chartOp ...
- Spring Junit 测试样例
SpringMVC 框架下的junit测试方式 package com.sixeco.user.controller; import org.apache.logging.log4j.LogManag ...
- Python Treelib 多叉树 数据结构 中文使用帮助文档
树,对于计算机编程语言来说是一个重要的数据结构.它具有广泛的应用,比如文件系统的分层数据结构和机器学习中的一些算法.这里创建了treelib来提供Python中树数据结构的高效实现. 官方文档:htt ...
- 201871010111-刘佳华《面向对象程序设计(java)》第二周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第二周学习总结 项目 内容 这个作业属于哪个课程 <https://www.cnblogs.com/nwnu-daiz ...