//基础最重要,如果面试官问一个答不上一个,那有难度的都都不用问了,直接就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. git忽视上传规则文件 .gitignore

    语法 语法 作用 例子 "/" 忽略根目录下的文件 /data "*" 忽略所有文件 *.txt => 1.txt,2.txt... "?&qu ...

  2. Spring-Cloud-Netflix

    Spring Cloud Netflix组件以及部署 (1)Eureka,服务注册和发现,它提供了一个服务注册中心.服务发现的客户端,还有一个方便的查看所有注册的服务的界面. 所有的服务使用Eurek ...

  3. web前端调试的消除缓存对更改页面的影响

    平时调试网页的时候经常会短时间多次修改html和css文件,已达到最好的体验效果,但是有时候因为浏览器缓存的原因就导致虽然代码修改了,但是 页面还是没什么变化, 经常以为是自己代码修改的不对, 之后发 ...

  4. car的旅行路线

    https://www.luogu.org/problemnew/show/P1027 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形 ...

  5. Centos7 + Python3.6 + Django + virtualenv + gunicorn + supervisor 环境配置详解

    跟着网上的教程走发现行不通阿!好多都是写个大概,而且每人的环境都是有些许差异的,比如说权限问题阿,等等都会造成安装的失败 说明:本教程在你已经拥有Centos7系统,已经安装好nginx服务器,已经安 ...

  6. 敏捷开发SCM

    敏捷的目标:自组织,提高交付质量和交付速度:敏捷中实现拥抱变化是通过迭代增量实现的:所谓的迭代是循环,循环一种机制和模式,增量则是价值的增加,迭代增量,就是通过每次工作流程的循环实现业务价值的提升:那 ...

  7. wakatime记录 coding时间的工具

    想记录下自己每天coding 的时间以及每个在各个项目上coding的时间,之前一直也没有什么好的办法,无意之间发现wakatime这个插件可以记录自己每天有效的coding时间. wakatime ...

  8. Linux csplit命令详解

    Linux csplit命令 Linux csplit命令用于分割文件.拆解文件主要是split和csplit命令,如果说split是按大小来拆分的话,那么csplit则可按匹配来拆分: 将文件依照指 ...

  9. 如何使用linux+xvfb+python+rfs+firefox+jenkins实现UI自动化

    首先说一下背景,在项目中使用windows执行机进行rfs脚本运行时,遇到两个问题: 1.Jenkins的多个slave节点和master的连接通过windows插件去建立,如果出现slave断连,无 ...

  10. Windos下pip配置豆瓣源

    C:\Users\liche\pip 下创建pip.ini文件 pip.ini [global] index-url = http://pypi.douban.com/simple [install] ...