Java面试必知必会(扩展)——Java基础
float f=3.4;是否正确?
不正确
3.4是双精度,将双精度赋值给浮点型属于向下转型,会造成精度损失;
因此需要强制类型转换:
方式一:float f=(float)3.4
方式二:float f=3.4F
&和&&的区别?
&运算符有两种用法 (1):按位与;(2):逻辑与
&&运算符是短路与运算。
逻辑与和短路与的区别是很大的,虽然二者都要求运算符左右两端的布尔值都为true整个值才为true。
&&之所以为短路与是因为:如果&&左边的表达式值为false,右边的表达式会被直接短路掉,不会运行计算。
Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
Math.round:返回与括号内值最相近的整数
Math.round(11.5):等于12
Math.round(-11.5):等于-11
public class Test {
public static void main(String[] args) {
System.out.println(Math.round(11.5));
System.out.println(Math.round(11.4));
System.out.println(Math.round(-11.5));
System.out.println(Math.round(-11.4));
System.out.println(Math.round(-11.6));
}
}
结果:
12
11
-11
-11
-12
可以看出,正数情况下,0,1,2,3,4向下取整;5,6,7,8,9向上取整
补充:
static double ceil(double a)
:返回大于等于a的最小整数
static double floor(double a)
:返回小于等于a的最大整数
static double rint(double a)
:返回与a最相近的整数,返回10.0
static long round(double a)
:返回与a最相近的长整形数
static int round(float a)
:返回与a最相近的整型数
System.out.println(Math.ceil(-11.6));
System.out.println(Math.ceil(11.6));
System.out.println(Math.floor(11.6));
System.out.println(Math.floor(-11.6));
System.out.println(Math.rint(11.6));
System.out.println(Math.rint(-11.6));
结果:
-11.0
12.0
11.0
-12.0
12.0
-12.0
switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
- 在Java5以前:swich(expr)中,expr只能是 byte、short、char、int。
- 从java5开始:java中引用了枚举类型,expr可以是enum类型
- 从java7开始:expr可以是String引用类型
- 目前所有版本:expr不可以是long类型
数组有没有length()方法?String有没有length()方法?
- 数组没有length()方法,只有length属性
arr.length
- String有length()方法
str.length()
在Java中,如何跳出当前的多重嵌套循环?
在最外层前加个标记A,然后可以通过break A来结束循环
构造器(constructor)是否可被重写(override)?
构造器不能被继承,也不能被重写,但可以被重载。
两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对
如果两个对象满足x.equals(y) == true,那么它的hashcode一定相同
java对equals和hashcode是这样规定的:
- 如果两个对象的相同(x.equals(y) == true),那么它们的hashcode一定相同
- 如果相关对象的hashcode相同,它们并不一定相同
- 更详细的内容请返回《Java面试必知必会》的基础部分查看
是否可以继承String类?
String是final类,不可继承
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
值传递
java语言的方法调用只支持参数的值传递。
当一个对象实例做为一个参数被传递到方法时,参数的值就是该对象的引用
char型变量能不能存储一个中文汉字,为什么?
char类型可以存储一个中文汉字,因为java中使用的编码是Unicode,一个char类型占2个字节(16比特),所以放一个汉字是没有问题的。
静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化
Java 中会存在内存泄漏吗,请简单描述。
理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被广泛使用于服务器端编程的一个重要原因);
然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄露的发生。
抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
都不能。
- 抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。
- 本地方法是由本地代码(如C代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。
- synchronized和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。
阐述静态变量和实例变量的区别。
- 静态变量 是被static修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;
- 实例变量 必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。静态变量可以实现让多个对象共享内存。
是否可以从一个静态(static)方法内部发出对非静态(no-static)方法的调用?
不可以,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化。
如何实现对象克隆?
有两种方式
- 实现Cloneable接口并重写Object类中的clone()方法;
- 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆
String s = new String("xyz");创建了几个字符串对象?
两个对象,一个是静态区的"xyz",一个是用new创建在堆上的对象。
接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。
一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以。
但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致。
匿名内部类是否可以继承其它类?是否可以实现接口?
可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调
内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员。
如何将字符串转换为基本数据类型? 如何将基本数据类型转换为字符串?
调用基本数据类型对应的包装类中的方法parseXXX(String)
或valueOf(String)
即可返回相应基本类型;
- 一种方法是将基本数据类型与空字符串("")连接(+)即可获得其所对应的字符串;
- 另一种方法是调用String 类中的
valueOf()
方法返回相应字符串
怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
new String() + getBytes()方法
String s1 = "WMS";
String s2 = new String(getBytes("GB2312"), "ISO-8859-1");
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
会执行,在方法返回调用者前执行。
Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别如何使用?
在Java中,每个异常都是一个对象,它是Throwable类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并可以对其进行处理
- try用来指定一块预防所有异常的程序
- catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型;
- throw语句用来明确地抛出一个异常;
- throws用来声明一个方法可能抛出的各种异常
- finally为确保一段代码不管发生什么异常状况都要被执行;
列出一些你常见的运行时异常?
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)
Java面试必知必会(扩展)——Java基础的更多相关文章
- Java面试必知必会:基础
面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力.但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点. 一.基础 包括: 杂七杂八 面向对象 数 ...
- 第3节:Java基础 - 必知必会(上)
第3节:Java基础 - 必知必会(上) 本篇是基础篇的第一小节,我们从最基础的java知识点开始学习.本节涉及的知识点包括面向对象的三大特征:封装,继承和多态,并且对常见且容易混淆的重要概念覆盖和重 ...
- 第4节:Java基础 - 必知必会(中)
第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...
- Java并发必知必会第三弹:用积木讲解ABA原理
Java并发必知必会第三弹:用积木讲解ABA原理 可落地的 Spring Cloud项目:PassJava 本篇主要内容如下 一.背景 上一节我们讲了程序员深夜惨遭老婆鄙视,原因竟是CAS原理太简单? ...
- 必知必会之 Java
必知必会之 Java 目录 不定期更新中-- 基础知识 数据计量单位 面向对象三大特性 基础数据类型 注释格式 访问修饰符 运算符 算数运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 三目表达式 ...
- 第5节:Java基础 - 必知必会(下)
第5节:Java基础 - 必知必会(下) 本小节是Java基础篇章的第三小节,主要讲述Java中的Exception与Error,JIT编译器以及值传递与引用传递的知识点. 一.Java中的Excep ...
- 必知必会之Java注解
必知必会之Java注解 目录 不定期更新中-- 元注解 @Documented @Indexed @Retention @Target 常用注解 @Deprecated @FunctionalInte ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 《MySQL必知必会》整理
目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...
随机推荐
- JVM垃圾回收的三种方式
* 垃圾回收有三种方式 * 一.清除:将需要回收对象的内存空间存放在内存列表中,当需要为新对象分配内存的时候,就会从内存列表中拿取空间分配.不过这种分配方式有两个缺点 * 第一个缺点是内存空间碎片化, ...
- 多线程-2.线程创建方式和Thread类
线程的创建方式 1.继承Thread类,重写run方法,示例如下: 1 class PrimeThread extends Thread { 2 long minPrime; 3 PrimeThrea ...
- restful 与 webapi 详解
restful 什么是API API全称Aplication Programming Itererface即应用程序编程接口, 我们在开发应用程序时经常用到.API作为接口,用来"连接&qu ...
- 如何实现一个 System Services?
<Android 系统开发做什么?>写到 Android System Services 是专注于特定功能的模块化组件,应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件.An ...
- JAVA 面试相关
1. int和Integer有什么区别? 答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类 ...
- [bug] NameNode无法启动 invalid-uri-for-namenode-address
配置文件core-site.xml中设置有误 <property> <name>fs.defaultFS</name>(NameNode地址) <value& ...
- 【转载】CentOS下查看电脑硬件设备属性命令
CentOS下查看电脑硬件设备属性命令2018年09月13日 17:48:31 乔烨 阅读数 510如何在linux下查看电脑硬件设备属性 # uname -a # 查看内核/操作系统/CPU信息 # ...
- 联想 lenove 3750 M4服务器更改启动项和管理口IP
联想 lenove 3750 M4服务器更改启动项和管理口IP 注: 因为在机房拍照的原因,再加上工作比较忙:整理成文档的时候有的过程已经忘记了,所以有的步骤可能会缺失,里面的选项都已经用中文方式表达 ...
- Scala 字符串插值器
Scala 提供了三种创新的字符串插值方法:s,f和raw,使用他们我们可以方便快捷的组合字符串. s 字符串插值器 在任何字符串前加上s,就可以直接在串中使用变量了,在生成字符串的时候会隐式调用其t ...
- Linux中级之windows下使用curl命令(cmd命令行)
在官网下载工具包:http://curl.haxx.se/download.html(根据自己电脑系统位数选择) 使用方式一:在curl.exe目录中使用 解压下载后的压缩文件,通过cmd命令进入到c ...