Java面试题集合
1 面向对象有哪些特征:
抽象:将一类对象的共同的特征抽象出来,构造类的过程。包括数据抽象和行为抽象两方面。抽象只关心对象有哪些行为和属性,不关心这些行为的细节是什么。
封装:我们编写一个类,就是对数据和数据操作的封装,方法的细节被隐藏起来
隐藏一切可以隐藏的东西,向外界提供最简单的编程的接口。
继承:从已有类,得到继承信息,创建新类的过程。提供继承信息的类,称为父类(超类,基类);得到继承信息的类,我们成为子类。
多态:不同类型的子类对象,对同一个消息。做出不同的相应。
多态分为:运行时多态和编译时多态。方法重载(overload)体现的是,编译时的多态性,也称为前绑定。方法重写(override),体现的是运行时的多态,也称为后绑定。运行时多态是面向对象,最基本的特征。要实现运行时多态需要多做两件事情:(1)子类继承父类,重写父类中已有的或者抽象的方法。
(2)对象造型。父类类型,引用,指向子类对象。可以调用方法的范围,是父类类型变量,类的全部方法;实际调用的方法,父类引用所指向的对象的具体的方法。
2 public protected default private 。四种访问修饰符的范围。
public :当前类,同包,子类,其他类。
Protected:当前类,同包,子类。
default:当前类,同一包中的类。
private:当前类可以访问。
3 String类,是基本的类型吗?
答:不是。
Java中的基本类型有八个:
byte short int long
float double
boolean
char
4 float a = 3.4:是否正确?
不正确,3.4默认是double类型的,a是float类型的变量。double类型赋值给float属于向下转型。也称为窄化。会造成精度的损失。如果想要编译通过,可以写成:
float a = (float)3.4/3.4(F).
5 short s = 1 。s = s+1; s+1是int类型的。s= s+1。是把Int类型的变量,赋值给short类型。会发生编译的报错。 s + =1 。相当于是s = (short)(s+1)。编译不会报错。
6 Java中有没有goto?
goto 和const是java中的保留字。
7 int和Integer的区别?
Java为了编程的方便,还是引入了基本的类型。但是为了方便对每一个基本类型,当成对象来操作。java为每一个基本数据类型,都引入了包装类型。int的包装类就是Integer。从java5开始就引入了对应的包装类型。
java原始的基本类型:char,boolean,float,double,byte,short,int,long。
java包装类型:Character,Boolean,Float,Double,Byte,Short,Integer,Long。
public class test{
public statci void main(String [] args){
Integer a = new Integer(3);
Integer b = 3;//发生了自动装箱过程
int c = 3;
System.out.print(a ==b);// false。两个对象,地址值不相同
System.out.print(a ==c);//true。a发生了自动拆箱的过程.
}
}
如果整型:字面量的取值,是-128到127之间。那么不会产生新的Integer。
Integer a = 100,b=100,c=180,d=180;
System.out.println(a==b);
System.out.println(c==d);
“`
那么第一个结果为true。第二个为false。因为a和c都来自于常量池。指向的是同一个对象,所以结果为true。后面的就是false
8、&和&&的区别?
相同点:两者都要求表达式两边的取值为true。整个表达式的值才为true
.不同点: &&如果左边的表达式的取值为true。那么&&右边表达式的值不再计算。整个表达式的取值,直接为true。但是&就不是这样。表达式左边的值不管为true或者false。都会计算表达式右边的取值。特别的如果再判断username是否正确的时候: username!=null&&username.equals(“dandan”)。如果把“&&”替换成“&”那么就有可能会抛出NULLPointerException。
逻辑运算符:(|)和(||)也是同样的情况,
9 解释内存中:栈(Stack)、堆(heap)、方法区(method area)的不同的用法
通常我们定义一个基本数据类型的变量,一个对象的引用,还有函数调用的现场。都存在JVM的栈空间。而通过new关键字和构造器创建的对象,全都保存在堆内存中。堆是垃圾收集器管理的主要的区域。现在的垃圾收集器,都采用分类收集算法。所以堆空间,还可以细分为新生代和老生代。方法区和堆都是各个线程共享的内存区域。用于存储,已经被JVM加载的类信息、常量和静态变量;程序中的字面量直接存放在常量池中,常量池属于方法区的一部分。栈空间操作起来很快,但是栈空间很小。栈空间用光了,会产生*,堆和常量池空间不足,则会引发out of memory.
10 Math.round(11.5)和Math.round(-11.5)。的结果分别为: 12 和 -11
11 switch(expr)能否作用在byte上,能否作用在long上?能否作用在String上?java5之前。expr只能是byte short int char。java 5开始expr可以是enum类型
。从java7开始,expr。还可以是字符串(String)
上一篇: MySQL和Oracle数据库sql查询日期比较条件的差异
下一篇: 关系数据库中的概念
推荐阅读
-
使用javap分析Java的字符串操作 javapjdkjava字符串操作
-
Java面试题集合
-
JAVA敏捷开发环境搭建 博客分类: 创业java敏捷管理 java敏捷管理创业
-
java连接数据库Oracle|DB2|Sql Server|Sybase|Informix|MySQL||PostgreSQL|access
-
社会化海量数据采集爬虫框架搭建 博客分类: java架构hadoop 反监控海量数据抓取爬虫采集
-
Java程序执行内存分析(栈、堆、方法区)
-
海量数据相似度计算之simhash短文本查找 博客分类: 算法架构创业java simhash局部敏感哈希海明距离海量数据相似度
-
Java集合面试题
-
Java集合面试题
-
java 使用BigDecimal运算的时候报错No exact representable decimal result 博客分类: 技术分享 java运算BigDecimal