Java基础面试题

基础

  • 谈谈你对Java的理解
  1. 平台无关性
  2. GC
  3. 语言特性
  4. 面向对象
  5. 类库
  6. 异常处理
  • 谈谈你对一次编译,到处运行这句话的理解?
  1. 在Java中,我们使用Javac命令对程序进行编译,他会生成一个.class文件,我们可以直接在不同的操作系统上运行这个.class文件,因为每一个操作系统有不同的JVM,Java语言在不同系统运行时不需要进行编译,Java虚拟机在执行字节码的时候,把字节码转换从具体平台上的机器指令.

数据类型

  • Java的基本数据类型
  1. 基本数据类型有:byte/8位,char/16位,short/16位,int/32位,float/32位,long/64位,double/64位
  • 什么是自动装箱,自动拆箱
  1. 每一个基本数据类型都有一个对象的包装类,基本类型和包装类型之间的赋值使用自动装箱与拆箱完成.int的包装类是Integer,比如说Integer a = 3;自动装箱,调用了Integer.valueOf(2);
  • new Integer(123)Integer.valueof(123)的区别在哪里?
  1. new Integer(123)每次都会新建一个对象;
  2. Integer.valueof(123)会使用IntegerCache里面的对象,多次调用取得同一个对象的引用
  3. Integer缓存池的大小是-128 ~ 127;

String

  • 讲讲String类为什么不可变?为什么这样设计?
  1. String被声明为final,因此它不可被继承.
  2. String内部使用char类型的数组存储数据,并且char数组用final修饰,数组不可变,保证String不可变
  3. String类不可变,线程安全;
  4. 保证HashCode哈希值的不可变性
  5. String类不可变.每次都要在堆里面创建一个对象,性能价差
  • String,StringBuffer,StringBuilder区别?
  1. String是一个不可变类,一旦一个String对象被创建之后,包含在这个对象中的字符串是不可修改,直到销毁.
  2. StringBuffer对象表示一个字符序列可变的字符串,可以通过提供的,append().insert(),reverse()等方法改变这个字符串,一旦获得了自己想要的字符串,可以通过toString()方法将他转变成一个String对象.
  3. StringBuilder和StringBuffer类似,只不过,StringBuilder线程不安全,StringBuffer线程安全.但是StringBuilder效率高.
  • String str = "i" 和 String str = new String("i")一样吗?
  1. 不一样,内存分配方式不一样,前者Java虚拟机会将其分配到常量池中,而后者会被分配到堆内存中,堆用来存放对象.
  • 请你讲讲&和&&的区别?
  1. & 和 && 都能作为逻辑与操作,但是 && 具有短路功能,当左边的条件表达式返回false则无需继续执行右边表达式,而 & 都需要进行.
  2. & 还能作为与运算符
  • 你还知道哪些运算符?
  1. ~ 按位非,单目运算符,将操作数的每个位全部取反
  2. ^按位异或,两位相同返回0,不相同返回1
  3. <<左移运算符
  4. >>右移运算符
  5. >>>无符号右移运算符
  • ==和equals的区别?
  1. ==: 如果比较的是基本数据类型,则比较的是数值是否相等,如果比较的是引用类型,比较的是他们的对象的地址是否相等.
  2. equals:用来比较两个对象的内容是否相等,equals不能用来比较基本数据类型,如果没有重写equals,判断两个对象的内存地址是否相等
  • 为什么重写equals还要重写hashcode?
  1. equals():判断两个对象的内存地址是否相等
  2. hashcode(): 根据两个对象的内存地址生成的hash码是否相等
  3. 当你HashMap里面key存储的是引用类型的数据的时候,HashMap中put时候会判断key是否有重复,先求出key的hashcode(),若相等在比较equals(),若相等,则认为他们是相同的,不能两个都put进去;
  4. 如果你只重写了equals()方法,那么会出现,表面两个对象的地址相等,但还是能够put进去,因为本质上他们的hashcode()还是不同的.
  5. 重写hashcode()是为了同一个key,能够得到相同的hashcode值,这样Hashmap能够定位到我们指定的key上;重写equals()是为了向Hashmap表明当前对象的key上保存的对象是相等的,这样我们才真正获得了这个key所对应的键值对.

关键字

  • 讲讲Java里面的final关键字
  1. final可以用来修饰基本类型变量,表明变量不可变;也可以修饰引用类型变量,表示引用的地址不会改变.
  2. final可以用来修饰方法:表明方法不能被重写
  3. final可以用来修饰类:表明方法不能被继承
  • 讲讲static关键字
  1. static可以用来修饰变量,说明这是一个静态变量,或者类变量,可以直接使用类名来访问
  2. static可以用来修饰方法,说明这是一个静态方法,说明他在类加载的过程中就存在了,它不依赖任何实例,可以通过类名访问.
  3. 静态语句块在类初始化时只运行一次

面向对象

  • Java的三个特性?谈谈理解
  1. 封装:他指的就是将对象的状态信息,属性等,隐藏在对象的内部,不允许外部程序直接访问对象内部信息,而是通过该类向外暴露的方法来实现对内部信息的操作和访问.
  2. 继承:通过关键字extends赖实现,一个类只能继承一个父类
  3. 多态:Java的引用类型有两种类型,一个是编译类型(方法重载),一个是运行类型(方法重写),编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋予该变量的对象决定,所以当编译和运行时类型不一致,就会出现所谓的多态.
  • 访问控制符?各自的作用范围?
  1. private只能访问同一个类中的信息
  2. default可以访问同一个类和同一个包下中
  3. protected可以访问同一个类,同一个包,以及子类中
  4. public可以访问全局范围内.
  • 重写和重载的区别
  1. 重载,是编译时多态,同一个类中相同的方法具有不同的参数列表,不能根据返回值类型区分
  2. 重写:是运行时多态,子类重写父类里面的方法,具有相同的返回值,参数列表.
  3. 构造器不能被重写,但是能够被重载
  • 能否重写一个private或者static方法
  1. 重写方法,就是意味着你要继承,不能继承.
  2. private修饰的方法只能在当前类中使用,你继承肯定是一个子类,而不是当前类
  3. 方法重写是根据运行时冬天绑定的,而static是编译时静态绑定的,所以static方法跟任何类的实例都不相关.所以不能继承,不能重写.
  • 抽象类和接口有什么区别
  1. 抽象类是一个类,用来被继承,接口用来被实现
  2. 抽象类中可以定义构造方法,接口不能
  3. 抽象类中可以有具体的方法和抽象的方法,但是接口中只能有抽象的方法
  4. 抽象类的权限可以是public,默认和protected,不能是private,接口默认是public
  5. JDK1.8之后,接口中可以有默认的具体的实现方法.抽象类中也可有静态方法
  • 深克隆和浅克隆的区别?
  1. 浅克隆:拷贝对象和原始对象的引用类型引用同一个对象。浅克隆只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅克隆。
  2. 深克隆:拷贝对象和原始对象的引用类型引用不同对象。深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝(例:JSON.parse() 和 JSON.stringify(),但是此方法无法复制函数类型)。

异常

  • Error和Exeption有什么区别?
  1. Error类和Excepttion类都是Throwable类
  2. Error类一般是指虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足等,这类错误将导致应用程序中断.
  3. Exception类分位运行时异常和受检查异常,运行时异常如空指针异常,指定的类找不到,数组越界,方法传递参数错误,类型转换;受检查异常:可以用try...catch捕获.
  • throw和throws有什么区别
  1. Throw用于抛出异常对象,后面跟异常对象,用在方法体内部
  2. Throws是方法可能抛出异常的声明,在方法体外.后面跟异常类名
  • 主线程可以捕捉到子线程的异常吗
  1. 线程的设计理念是线程的问题应该线程自己本身来解决,而不要委托到外部.
  2. 正常情况下,主线程不会捕捉到子线程的异常
  • Java 的泛型是如何工作的 ? 什么是类型擦除 ?
  1. 泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如:List<String> 在运行时仅用一个 List 来表示。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容

  • “噔噔噔”,连绵的轱辘声,在这片平原上飘动。 细细的秀冬,生长成簇,伴随淡淡玫熙的香气,绿色和浅黄色交融,成了这条...
    请叫我斯人阅读 208评论 0 0
  • 近几日,肠胃不舒服,病情稍重,感觉瘦了许多。上秤一称,果不其然,三斤以上的肉没了。 有两个礼拜了,一直有点拉肚子,...
    静水流深深几许阅读 288评论 0 4
  • 昨天晚上,有新入学前班的学生在哭,哭了好几个,然后有一个管理的爷爷吓唬他们,鬼会来的。但是那个小孩子说,爷...
    墨江030鄢倩阅读 148评论 0 0
  • 这是早年李安导演拍完父亲三部曲的《喜宴》之后,接受采访时候说的一段话: (除李安外的画面皆来自电影《喜宴》) 李安...
    心家园成长工作室阅读 239评论 0 0
  • 院子里有一个监狱里回来的儿时的一个同校,我们都熟悉,彼此都很客气 ,遇到了也聊几句,没打过交道,听说他摆了一个摊子...
    花色春秋阅读 385评论 2 3