//基础最重要,如果面试官问一个答不上一个,那有难度的都都不用问了,直接就pass了,就像我,嘿嘿。

//每天最好熟记10个问题,这些问题在编程是会很厚帮助,帮你避免很多不应该出现的错误。

一、面向对象的特征

先说说啥叫面向对象。这个对象可不是你谈的那个对象啊。我还记的我刚学Java的时候,老师说:“万物皆对象,但如果你敢在面试官面前这样说,就别想被录取了”。万物皆对象有点假大空的意思。解释对象时最好具体为一类事物。面向对象就是考虑这类对象具有的属性和功能。比面向过程更容易扩展补充。

抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。比如说有一群小脑斧,我们把他们的共同特征总结出来,而不是只关注其中一只小脑斧喜欢吃啥,是啥颜色等。

继承继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。注意,子类只能继承父类的公共域和公共方法。通俗点说就是儿子可以继承爸爸愿意给他的东西,爸爸藏起来的就不能得到了。想想看儿子除了继承爸爸的东西,是不是还可以有自己的东西,所以一般在java中子类比父类更详细,具有的内容更多。

封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。比如用手机打电话时只需按几个键,而不需要关心手机是如何将号拨出去的。手机具体的操作细节就可以当成被封装起来了。

多态多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。java的引用变量有两种类型:编译时的类型,运行时的类型如果编译时的类型和运行时的类型不一致,就叫多态。简单来说就是编译时调用父类的方法,实际执行的是子类的方法,或者是父类表现出来的行为特性不像父类,像子类,这种现象叫多态。注意:属性不具有多态性。最常用到多态的是:父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。

方法重写:方法重写(override)实现的是运行时的多态性(也称为后绑定),子类继承父类并重写父类中已有的或抽象的方法,。注:和父类有相同的返回值

方法重载:方法重载(overload)实现的是编译时的多态性(也称为前绑定),一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。注:参数必须不同,对返回值类型没有要求

二、public,private,protected,default (不写时默认就是这个)范围

从小到大private(类)<default(同一包下)<protected(子类公开)<public(公共)

三、String 是最基本的数据类型吗,String,StringBuffer,StringBulider的区别?

Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;(很重要,面试也会问基础数据类型)

string是只读字符串,确定后就不变了,不能操作;stringBulider,stringBuffer的字符串可以直接被修改(增加删除字符都可以),stringBulider线程不安全,但速度快。一般来说都用StringBuffer。

四、基本数据类型操作

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);其中有隐含的强制类型转换

五、Java有没有goto,const;

当然有了,但目前没有用到,所以java把他们称为保留字。

六、==和equals的区别

==比较的是他们的引用地址是不是一样,eqluals比较的是值是否相等。偷点懒,就不new对象举例了,等到看内存堆栈部分再说)

七、基础类型和包装类

原始类型: 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对象就够了。

八、逻辑操作符和条件操作符的区别

逻辑操作(&,|,^)、条件操作(&&,||)

逻辑操作符不仅可以操作布尔型还可以操作数值型;逻辑操作符不会短路

短路:如果&&左边的表达式的值是false,右边的表达式会被直接pass掉,就不用管它了

九、内存中的栈(stack)、堆(heap)和静态区(static area)

堆内存:

1、存储的全部是对象,每个对象都包含一个与之对应的class信息(class的目的是得到操作指令)

2、jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

注:理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用

栈内存:

1、每个线程都有一个栈区,栈中保存对象的引用,还有就是函数调用的现场

2、每个栈中的数据都是私有的,其他栈不能访问(我的钱,别人不能取)

3、栈分为3个部分:基本变量区、执行环境上下文,操作指令区

4、栈小但操作快

注:”逃逸分析”:从Java 6的某个更新开始可以将一些局部对象放在栈上以提升对象的操作性能

静态区

存放字面量和常量

来  看这个  String str = new String("hello");

str放在栈,new出来的字符串放在堆 ,"hello"放在静态区

并且它创建了两个对象,一个静态区的,一个new创建在堆上的对象(可能会被问到)

十、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

swith现在除了long型不行,剩下的都可以了。(String--java7;enum--java5)

今天先到这了。/-==/

java面试题复习(一)的更多相关文章

  1. Java面试题复习笔记(数据库)

    1.数据库分类? 关系型数据库和非关系型. 常用关系型:Myspl.Oracle.SQLServer 非关系型:Redis.Hadoop.Memcache.Mogobd 2.关系数据库三范式? 范式就 ...

  2. Java面试题复习笔记(Web方向)

    1.Http中get和post请求的区别? 共同点:都是Http请求方式,用户可以通过不同的请求方式完成对资源(Url)的操作.具体来讲就是get一般用于获取/查询资源信息,post用于更新资源信息. ...

  3. java面试题复习(八)

    71.如何通过反射创建对象? 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()  方法2:通过类对象的getConstructor()或 ...

  4. java面试题复习(七)

    61.jdbc的操作步骤 加载驱动:Class.forName("oracle.jdbc.driver.OracleDriver"); 创建连接:Connection con =D ...

  5. java面试题复习(六)

    51.实现多线程的方法 一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如 ...

  6. java面试题复习(五)

    41.阐述final.finally.finalize的区别 final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract ...

  7. java面试题复习(四)

    31.内部类可以引用它的外部类的私有成员吗? 可以,内部类对象可以访问创建它的外部类对象的成员 32.final关键字有哪些用法? 修饰类时该类不能被继承,修饰方法时,该方法不能被重写,修饰变量时表示 ...

  8. java面试题复习(三)

    21.静态嵌套类和内部类的不同? 答:静态嵌套类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化.而通常的内部类需要在外部类实例化后才能实例化.//还是考的static的知识 ...

  9. java面试题复习(二)

    //我又回来了 11.数组有没有length()方法?String有没有length()方法? 数组只有length属性,String有length()方法.注意:JavaScript获取字符串长度使 ...

随机推荐

  1. 学习笔记CB005:关键词、语料提取

    关键词提取.pynlpir库实现关键词提取. # coding:utf-8 import sys import importlib importlib.reload(sys) import pynlp ...

  2. rapid7/metasploitable3 CTF摘要

    rapid7/metasploitable3 俗话说,没图说个JB.我专门做了个图以供欣赏,做图技术可能有点糙,见谅见谅. 2016年11月,rapid7发布了metasploitable3,以后简称 ...

  3. 转:Excel—“撤销工作表保护密码”的破解并获取原始密码

    在日常工作中,您是否遇到过这样的情况:您用Excel编制的报表.表格.程序等,在单元格中设置了公式.函数等,为了防止其他人修改您的设置或者防止您自己无意中修改,您可能会使用Excel的工作表保护功能, ...

  4. Oracle Base64加解密

    参考 http://blog.csdn.net/liuzhigang1237/article/details/7591439

  5. SpeedReader for Mac(快速阅读器)v1.6免费版

    SpeedReader for Mac是一款运行在Mac平台上的阅读软件,通过这款软件就可以自行调整阅读速度.通过SpeedReader Mac版用户可以将想要阅读的内容拖入到软件中,调整速度和字体, ...

  6. Django 00-socket、wsgi及初始django学习心得

    HTTP基本原理1.http简述:http协议永远都是客户端发起请求,服务端回送请求.客户端和服务端本质上是一个socket客户端和服务端,http协议可以说是基于socket的再上层封装2.http ...

  7. JSP学习1---创建一个简单的jsp程序

    一.新建一个“Dynamic Web Project”动态Web项目 1.1输入项目名称 Project1,在Dynamic Web module version(动态Web模块版本),选择3.0(注 ...

  8. GDI与GDI+性能比较

    编写程序对GDI和GDI+绘制进行了比较,经过比较,GDI相对GDI+还是有一些性能优势的. 同时比较了每次绘制创建TGPGraphics对象和共用一个TGPGraphics对象的情况,两者性能相差不 ...

  9. 【转】Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置

    Syncthing – 数据同步利器---自己的网盘,详细安装配置指南,内网使用,发现服务器配置 原贴:https://www.cnblogs.com/jackadam/p/8568833.html ...

  10. .NET版本与CLR版本及兼容性

    WIN7原生的.net是2.0和3.5,打开和关闭windows功能里面可以看到.另外C:\Windows\Microsoft.NET\Framework下面也能看到..net framework1. ...