//基础最重要,若是面试官问一个答不上一个,那有难度的都都不用问了,直接就pass了,就像我,嘿嘿。java
//天天最好熟记10个问题,这些问题在编程是会很厚帮助,帮你避免不少不该该出现的错误。面试
1、面向对象的特征编程
先说说啥叫面向对象。这个对象可不是你谈的那个对象啊。我还记的我刚学Java的时候,老师说:“万物皆对象,但若是你敢在面试官面前这样说,就别想被录取了”。万物皆对象有点假大空的意思。解释对象时最好具体为一类事物。面向对象就是考虑这类对象具备的属性和功能。比面向过程更容易扩展补充。安全
抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。好比说有一群小脑斧,咱们把他们的共同特征总结出来,而不是只关注其中一只小脑斧喜欢吃啥,是啥颜色等。jvm
继承:继承是从已有类获得继承信息建立新类的过程。提供继承信息的类被称为父类(超类、基类);获得继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了必定的延续性,同时继承也是封装程序中可变因素的重要手段。注意,子类只能继承父类的公共域和公共方法。通俗点说就是儿子能够继承爸爸愿意给他的东西,爸爸藏起来的就不能获得了。想一想看儿子除了继承爸爸的东西,是否是还能够有本身的东西,因此通常在java中子类比父类更详细,具备的内容更多。ide
封装:通常认为封装是把数据和操做数据的方法绑定起来,对数据的访问只能经过已定义的接口。面向对象的本质就是将现实世界描绘成一系列彻底自治、封闭的对象。好比用手机打电话时只需按几个键,而不须要关心手机是如何将号拨出去的。手机具体的操做细节就能够当成被封装起来了。函数
多态:多态性是指容许不一样子类型的对象对同一消息做出不一样的响应。简单的说就是用一样的对象引用调用一样的方法可是作了不一样的事情。java的引用变量有两种类型:编译时的类型,运行时的类型若是编译时的类型和运行时的类型不一致,就叫多态。简单来讲就是编译时调用父类的方法,实际执行的是子类的方法,或者是父类表现出来的行为特性不像父类,像子类,这种现象叫多态。注意:属性不具备多态性。最经常使用到多态的是:父类型引用引用子类型对象,这样一样的引用调用一样的方法就会根据子类对象的不一样而表现出不一样的行为。性能
方法重写:方法重写(override)实现的是运行时的多态性(也称为后绑定),子类继承父类并重写父类中已有的或抽象的方法,。注:和父类有相同的返回值lua
方法重载:方法重载(overload)实现的是编译时的多态性(也称为前绑定),一个类中定义多个同名的方法,但要求每一个方法具备不一样的参数的类型或参数的个数。注:参数必须不一样,对返回值类型没有要求spa
2、public,private,protected,default (不写时默认就是这个)范围
从小到大private(类)<default(同一包下)<protected(子类公开)<public(公共)
3、String 是最基本的数据类型吗,String,StringBuffer,StringBulider的区别?
Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;(很重要,面试也会问基础数据类型)
string是只读字符串,肯定后就不变了,不能操做;stringBulider,stringBuffer的字符串能够直接被修改(增长删除字符均可以),stringBulider线程不安全,但速度快。通常来讲都用StringBuffer。
4、基本数据类型操做
float f=2.8;//坑爹啊,居然不对。记住像2.8之类的是双精度(double),把它赋值给float向下转型了,会出现精度损失,必须强制类型转换。
shout s=2;s=s+1和shout s=2;s+=2;哪一个对?
2是int类型,s+1也是int型,必须强转类型;s+= 2;至关于s1= (short)(s+ 2);其中有隐含的强制类型转换
5、Java有没有goto,const;
固然有了,但目前没有用到,因此java把他们称为保留字。
6、==和equals的区别
==比较的是他们的引用地址是否是同样,eqluals比较的是值是否相等。(偷点懒,就不new对象举例了,等到看内存堆栈部分再说)
7、基础类型和包装类
原始类型: boolean,char,byte,short,int,long,float,double
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
包装类型就是把基础类型变成了对象。并且java提供自动装箱拆箱
我偷了个题能够看看
public class Test {
public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4); }
}
答案的 true、flase;
由于:当咱们给一个Integer对象赋一个int值的时候,会调用Integer类的静态方法valueOf;
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
IntegerCache是Integer的内部类,其代码以下所示
private static class IntegerCache {
static final int low = -128;
static final int high;
static final Integer cache[];
static {
// high value may be configured by property
int h = 127;
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
high = h;
cache = new Integer[(high - low) + 1];
int j = low;
for(int k = 0; k < cache.length; k++)
cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7)
assert IntegerCache.high >= 127;
} private IntegerCache() {}
}
代码看不懂不要紧,记住整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象就够了。
8、逻辑操做符和条件操做符的区别
逻辑操做(&,|,^)、条件操做(&&,||)
逻辑操做符不只能够操做布尔型还能够操做数值型;逻辑操做符不会短路
短路:若是&&左边的表达式的值是false,右边的表达式会被直接pass掉,就不用管它了
9、内存中的栈(stack)、堆(heap)和静态区(static area)
堆内存:
一、存储的所有是对象,每一个对象都包含一个与之对应的class信息(class的目的是获得操做指令)
二、jvm只有一个堆区(heap)被全部线程共享,堆中不存放基本类型和对象引用,只存放对象自己
注:理论上整个内存没有被其余进程使用的空间甚至硬盘上的虚拟内存均可以被当成堆空间来使用
栈内存:
一、每一个线程都有一个栈区,栈中保存对象的引用,还有就是函数调用的现场
二、每一个栈中的数据都是私有的,其余栈不能访问(个人钱,别人不能取)
三、栈分为3个部分:基本变量区、执行环境上下文,操做指令区
四、栈小但操做快
注:”逃逸分析”:从Java 6的某个更新开始能够将一些局部对象放在栈上以提高对象的操做性能。
静态区
存放字面量和常量
来 看这个 String str = new String("hello");
str放在栈,new出来的字符串放在堆 ,"hello"放在静态区
而且它建立了两个对象,一个静态区的,一个new建立在堆上的对象(可能会被问到)
10、switch 是否能做用在byte 上,是否能做用在long 上,是否能做用在String上?
swith如今除了long型不行,剩下的均可以了。(String--java7;enum--java5)
今天先到这了。/-==/