Java常考面试题(一)
序言
我是一只乱飞乱撞的菜鸟,写的文章目前是以记录自己学习,和方便以后查看,期待日后不久能通过自己的努力,获得一点小小的成功,然后写出我的学习经验总结性文章来。
---WH
一、什么是虚拟机?为什么Java被称作是“平台无关的编程语言”?
自己解答:
虚拟机就是用来编译我们写的java程序,我们的程序 xxx.java 首先编译成xxx.class 这个是字节码文件,
虚拟机通过解析我们的字节码文件,来形成计算机底层所认识的编码,所以我们不需要知道我们写的java程序是否能在计算机上运行,因为虚拟机已经帮我们做了这个工作,在任何平台上,虚拟机都能这样做,所以Java被称为了平台无关的编程语言。
参考解答:
Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。
Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
自我评价:概念模糊,没讲清楚是因为自己脑袋里面也没想清楚,
1、虚拟机并不编译.java成为.class字节码文件, 这个事是编译器做的,编译器有很多种。
2、虚拟机做的事,将字节码文件解析成机器码文件,也就是0101这种,为了让计算机认识该段代码的意思,就是因为虚拟机做了这个事情,所以才能在各个平台上运行。
更好的讲解方式:
虚拟机是能够识别java源文件编译后的字节码文件,并将字节码文件形成机器码,让计算机识别,因为虚拟机知道计算机底层的一些特性,帮我们将字节码变成计算机所识别的编码,所以跟平台无关,我们只关心java源文件的编写就行了。
二、JDK 和 JRE 的区别是什么?
自己解答:
JDK = JRE + 运行库;也就是说jdk中包含了jre
jdk就是java运行的环境,java运行,就要依靠jdk的存在,
参考答案:
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。
自我评价:概念模糊, 不清除两者之间的关系。
1、JDK:Java Developer's kit Java开发工具包,
2、JRE:Java Run Environment Java运行环境,
3、JRE中包括:java运行所依赖的类库(比如String类、等等好多类,都是属于JRE中的),JVM(虚拟机)等一些东西
4、JDK包括:JRE 和 编译器、其他一些工具(调试器)等。目的是让开发者开发、编译、执行java应用程序。
更好的讲解方式:
JDK包括了JRE 和 一些工具(编译器,调试器) 来使开发者开发、编译、和运行java程序, 而JRE中有重要的 JVM(Java虚拟机)、一些运行的类库 等东西。
三、”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
自己解答:
static:静态的,能够作用在属性、方法上面,
作用在属性上面,意思是在该类中就只有一份,独一无二,每个对象都能共享它,并且能直接通过类调用该属性
作用在方法上面,该方法能被类直接调用,
注意:静态方法不能调用被static修饰的方法或者属性, 而非静态方法没有限制,
不能说覆盖private修饰的方法,因为覆盖的前提就要有继承关系,private的作用域只供本类可见,自己的子类也对其进行隐藏,能写成一样的方法,但那不是覆盖
也不能重写static方法,感觉是这样,理由不知道。
参考答案:
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
自我评价:答对了一半吧。static修饰成员变量和修饰方法答得差不错,但后面一问就有点疑问了。
1、static修饰成员变量和方法
2、修饰成员变量:整个类的实例共享该属性,可通过类直接调用该属性
3、修改方法:类可以直接调用该方法,静态方法只能调用static修饰过的变量和类中的方法。而非静态方法没有限制,
4、注意:static修饰过的成员变量或方法,跟着类的加载就加载到了内存,所以类可以直接调用这些修饰过的属性和方法,而静态方法只能调用static修饰过的属性和方法也是因为这个原因,静态属性和方法先于非静态属性和方法加载,所以静态方法调用属性时,非静态还没加载完呢, 而当非静态调用静态时,就没有这个顾虑。
5、覆盖,也就是重写, 前提条件是需要继承,父类中用private修饰的方法,对子类都不可见,继承不了,所以没有所谓的重写
6、不能重写static的方法,原因是 static在编译时期静态绑定的, 而方法的重写是基于运行时动态绑定的,而且static方法跟类的实例没有任何的关系。
7、又抛出了运行时绑定的一些相关问题。只能查询咯。(*)
运行时绑定又称动态绑定:前提是有继承、重写、父类对象指向子类实例, 这样就产生了多态,在运行时才能知道父类对象指向了哪个子类实例。例如:B b = A a();在运行时才能知道b中存放着A实例a的地址。
编译时绑定成静态绑定:就是在编译期间就已经加载到了内存,包括private、static、final修饰的变量和方法,还有构造函数,都市静态绑定
四、是否可以在static环境中访问非static变量?
自己解答:
答案是肯定的,不能,其实前面一题中就可以知道,因为static是跟着类一起加载呢,那时候非static变量还没加载进内存,那么static就访问不了非static变量
参考答案:
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
自我评价:
这题应该算是理解了。记住static都跟随类的加载而加载,优先于非static变量。
五、Java支持的数据类型有哪些?什么是自动拆装箱?
自己解答:
引用数据类型和非引用数据类型
非引用数据类型(四类八种):整型:byte、short、int、long、浮点型:float、double、 字符型:char、 布尔型:boolean
引用数据类型:object、String、
自动装箱:指的是int -- Integer double -- Double 到这里就说不出个所以然来,不熟悉。
参考答案:
·基本数据类型:
整数值型:byte,short,int,long,
字符型:char
浮点类型:float,double
布尔型:boolean
自我评价:基本数据类型还是知道,引用类型解释时应该解释一下本质。在将自动装箱时,脑袋里面只听过这个名词,隐约记得以前看过,看是说不出来
1、基本数据类型:四类八种
2、引用数据类型:实质就是存放的地址在堆中,而在栈中有指向堆中地址的一个变量名,这样的就是引用数据类型,String、数组、集合等都是。
3、自动装箱:将int基本数据类型转换为引用数据类型Integer,int 有包装类 Integer double 有包装类 Double boolean -- Boolean 用的最多就前面两个,在jdk1.5之后就有自动装箱的功能了,也就是说不需要我们手动进行,在需要的时候将自动转换为包装类来使用包装类中的一些方法,
4、为什么需要包装类?例如,int想要转换为String 直接强制转换会出现问题,所以需要先将int转换为Integer,然后再toString。。
5、什么时候会自动装箱?例如1:装箱比如int变Integer,如果某个地方的参数需要填入Integer,你传int给它,它自动会生成一个Integer传过去。反之,Integer变int,就是自动拆箱;例如2:Integer i = 100; 这个时候也完成了自动装箱,100只是一个int类型的,底层将int自动转换为了包装类Integer。
Java常考面试题(一)的更多相关文章
- Java常考面试题
Java常考面试题 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行 ...
- Java常考面试题(二)
序言 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用 ...
- Java常考面试题整理(四)
有关所有Swing相关的面试题,都可以说是凑数的,感觉自己在敲这些的时候感觉一点用处都没有,可以从第72条开始看. 61.说出三种支持重绘(painting)的组件. 参考答案: Canvas,Fra ...
- Java常考面试题(二)(转)
序言 昨天刚开始的"每日5题面试"这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看 ...
- 阿里巴巴JAVA常考面试题及汇总答案
一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答: 1.String是字符串常量,StringBuffer和StringB ...
- Java常考面试题(经典)
什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计 ...
- Java常考面试题(五)
序言 好好努力. ---WH 一.Iterator和ListIterator的区别是什么? 自我解答: Iterator是针对所有collection来使用的,而看名字ListIterator,顾名思 ...
- Java常考面试题(四)
序言 双十一那天去我女朋友那了,11.11到11.13 漏了两天的内容,今天中午刚回来的,赶紧补一下前两天漏下的博文,我相信,坚持下来,会有成长的,等到出去实习那一天,肯定会很有帮助,会感谢现在自己的 ...
- Java常考面试题(三)
序言 说说今天遇到的一件小事吧,在遇到问题,查找答案时,看到很多人的博客里面都有提到关键字眼,可让人觉得可恨的是,大多数人写的博文中,基本上都是照着书上的语言发表的,看了跟没看一样,没有一点通俗的语言 ...
随机推荐
- MongoDB中的一些坑( 2.4.10 版本)
http://www.jb51.net/article/62654.htm 1.MongoDB 数据库级锁 MongoDB的锁机制和一般关系数据库如 MySQL(InnoDB), Oracle 有很大 ...
- Region使用全解
代码地址如下:http://www.demodashi.com/demo/14799.html 前言 Region,即为区域,它表示的是canvas图层上的某一块封闭的区域.很多时候,我们会利用Reg ...
- 解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这 ...
- 【jsPDF】jsPDF插件实现将html页面转换成PDF,并下载,支持分页
1.目的:在前段是 jQuery库 或者 VUE库 或者两者混合库,将html 页面和数据 转换成PDF格式并下载,支持分页 1.项目背景: 对客户报修记录进行分类统计,并生成各种饼图.柱状图.线性图 ...
- How to Land your Dream Job
今天在code school上面看到一个外国人写的文章,写的很棒,瞧一下外国人的思维和我们有什么不同?分享给所有的朋友 You know how some things ar ...
- oracle 11g空表导不出问题
查询空表 ' 生成分配空间的执行语句 or num_rows is null 复制出来执行即可.
- Swift3 CADisplayLink简单用法
1.定义属性 var displayLinkTimer:CADisplayLink? = nil 2.init displayLinkTimer = CADisplayLink(target: sel ...
- 树莓派进阶之路 (012) - 关于Raspberry Pi树莓派无线网卡配置
Raspberry Pi树莓派无线网卡配置[多重方法备选] 要想让树莓派方便操作,肯定需要配置无线网卡,这样可以大大增强树莓派的移动性和便利性,其实配置无线网卡基本就是和普通linux平台下配置无线网 ...
- 【Redis】Redis的常规操作命令
NoSQL是一种非关系型数据库,非关系型数据库库和传统的关系型数据库不同,非关系性体现在不需要依赖表进行数据存储.常见的非关系型数据库有Redis.MonoDB.HBase等,这些是基于key-val ...
- SQL如何获得本季度第一天、一年的第一天、本月的最后一天
nterval 参数,具有以下设定值: 设置 描述 Year yy, yyyy 年 quarter qq, q 季 Month mm, m 月 dayofyear dy, y 一年的日数 Day dd ...