细节!重点!易错点!--面试java基础篇(一)
今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正。
1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的。
2.任何静态代码块都会在main方法之前执行。
3.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次;父类优先于子类;按照成员定义顺序初始化。
例顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。
4.java中一个文件可以定义多个类,但只能有一个类被public修饰,且访问的类名与文件名必须相同,每一个类都会生成一个字节码文件。
5.构造函数的特点:1)名字必须与类名相同;2)构造函数不能被继承,不能被覆盖,但是可以被重载;3)子类可以通过super关键字来显示的调用父类的构造函数,但当父类没有提供无参的构造函数时,子类的构造函数必须显示的调用父类的构造函数。
6.java中的接口常量默认使用public static final修饰。
7.java在处理基本数据类型时,都是按照值传递,其他的都是按照引用传递。
8.clone方法,深复制和浅复制的区别:深复制把复制的对象所引用的对象都复制了一遍;浅赋值仅仅赋值所考虑的对象,不复制他所引用的对象。
9.三种获取类的方法:1)class.forName(); 2)类名.class; 3)实例.getClass()。
10.四种创建对象的方法:1)通过new实例化;2)通过反射机制;3)通过clone()创建;4)通过反序列化的方式创建对象。
11.当子类中定义的成员变量和父类中定义的成员变量相同时,子类成员变量会覆盖父类的成员变量,不会继承。
12.java提供两种用于多态的机制,编译时多态和运行时多态。编译时多态是通过方法重载实现的,运行时多态是通过方法覆盖实现的。
13.方法重载和方法覆盖:覆盖是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。覆盖要求参数列表相同,重载要求参数列表不同。
14.抽象类和接口的异同:1)abstract只能用来修饰类或者方法,不能用来修饰属性。2)抽象类表示的是一个实体,而接口表示的是一个概念。
3)只要包含一个抽象方法的类就必须被声明为抽象类 4)子类为父类中的所有抽象方法提供具体的实现,否则他们也是抽象类。
相同点:1)接口和抽象类都不能被实例化 2)接口的实现类或者抽象类的子类只有实现了他们之中的抽象方法后才能被实例化。
不同点:1)接口只有定义,其方法不能再接口中实现,只有实现接口的类才能实现接口中定义的方法,而抽象类可以有定义与实现,即方法可以在抽象类中被实现
2)接口需要实现implements 但抽象类需要被继承extends,一个类可以实现多个接口,但是一个类智能继承一个抽象类。
3)接口强调特定功能的实现,设计理念为has-a;抽象类强调所属关系,其设计理念为is-a
4)接口中定义的成员变量默认为public static final,只能够有静态的不能被修改的数据成员,而且必须为其赋初值,所有成员方法必须是public和abstract的。
抽象类可以有自己的数据成员,也可以有费抽象的方法,成员默认为default的,也可以被定义为private,protected和public的。
当功能需要被积累时,使用抽象类,不需要积累时,使用接口。
5)接口被用于实现比较常用的功能,便于日后的维护或者添加删除方法,抽象类更倾向于充当公共类的角色。
接口可以继承接口,抽象类可以实现抽象类,抽象类也可以继承具体类,抽象类也可以有静态类的main方法。
15.内部类:主要分为四种 静态内部类 ;成员内部类 ;局部内部类 ;匿名内部类
1)静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法;非静态内部类不能有静态成员。
2)局部内部类像局部变量一样,不能被public protect private以及static修饰
3)匿名内部类是一种没有类名的内部类,不能使用关键字class extends implements 没有构造函数,他必须继承其他类或者实现其他接口。
16.this与super:this指针指向当前实例对象,super可以用来访问父类的方法或者成员变量。
17.当子类的构造函数需要调用父类的构造函数时super()必须为构造函数中的第一条语句。
18.final,finally,finalize区别:
final:1)final用于声明属性,方法,类,表示不可变属性,方法不可覆盖,类不可被继承。(不可变有两层含义:引用不可变;对象不可变。final指的是引用的不可变)
2)final类,该类不能被继承,所有的方法不能被重写,但是属性可变。一个类不能既被声明为abstract又被声明为final。
finally:作为异常处理的一部分,跟在try/catch后并且附带一个语句块,表示这段语句最终一定会被执行。
finalize:是object类的一个方法,在垃圾回收器执行时会调用被用于回收对象的finalize方法。
19.assert:作为一种软件调试方法,住要作用是对一个boolean表达式进行检查
与C语言中的assert异同:java是assert是关键字,C语言中使用的是库函数,assert是编译时开启,而java语言则是在运行时开启。
20.static关键字:主要作用:为某种特定的数据类型或者对象分配单一的存储空间;实现某个方法或属性与类而不是与对象关联在一起。
1)静态成员变量:静态成员变量属于类不属于某个对象,在内存中指有一个复制,另外,java中不能在成员函数内部定义静态变量。
2)静态成员方法:静态方法属于类不属于某个对象,静态方法中不能使用this和super关键字。static关键字一个很重要的用途就是用来实现单例模式。(单例模式:隐藏构造函数,提供一个静态创建对象的方法)
3)静态代码块:不在任何一个方法体内且只执行一次。
21.switch语句:支持int 或者int的包装类Integer ,一些能隐式转化成int类型的例如short byte 和 char 还有他们的包装类也支持。另外Java7中开始支持String类型。
22.volatile:是一个类型修饰符,他是被设计用来修饰不同线程访问和修改的变量。系统每次用到它的时候会从对应的内存当中提取。
23.instanceof:是java语言中的一个二元算符,他的作用是判断一个引用类型的变量所指向的对象是否是一个类的实例。
24.java中存在八种基本数据类型:byte short int long float double char boolean(需要注意java中默认声明的小数是double类型的,所以float a=1.1是不合法的)
25.不可变类:所有基本类型的包装类都是不可变类(引用不可变)。
创建一个不可变类五个原则:
1)类中所有成员变量被private所修饰。
2)类中没有写或者修改成员变量的方法,只提供构造函数一次生成。
3)确保类中的所有方法不会被子类覆盖(利用final达到目的)。
4)如果一个类成员不是不可变类,那么在成员初始化或者使用get方法获取该成员变量时,需要通过clone方法来确保类的不可变性。
5)如果有必要覆盖Object的equals和hashCode方法。
26.值传递和引用传递:1)在方法调用中,实参会把它的值传递给形参,形参知识用实参的值初始化一个临时的存储单元,形参虽然与实参有相同的值却有着不同的存储单元。
2) 原始数据类型在传递参数时都是按照值传递,而包装类型都是按照引用类型在传递。
27.不同数据类型的转换:
自动转化。
1)char类型会转换为高级类型,会专函为其对相应的asc码。
2)byte char short类型参与运算时会自动转换为int类型。但当使用+=时就不会产生类型转换。
3)基本数据类型和boolean类型时不能相互转化的。
当需要高级数据类型转化为低级数据类型时就需要进行强制类型转换。
28.round ceil floor方法:round方法表示四舍五入,ceil方法表示向上取整,floor方法表示向下取整。
29.i++表示先使用i在给i自增,++i表示先给i自增,在使用i。
30.>>与>>>:>>在执行右移操作时,若参与的数字为正数,则在高位补零,若为负数,则在高位补1。>>>则不同,无论运算的数字为正数或负数,在执行运算时都会在高位补0。
细节!重点!易错点!--面试java基础篇(一)的更多相关文章
- 细节!重点!易错点!--面试java基础篇(二)
今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断 ...
- 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇
Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...
- java基础篇---HTTP协议
java基础篇---HTTP协议 HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- Java基础篇 - 强引用、弱引用、软引用和虚引用
Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...
- java基础篇 之 构造器内部的多态行为
java基础篇 之 构造器内部的多态行为 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...
- java基础篇1
JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...
随机推荐
- CreateThread与_beginthread, _beginthreadex创建线程的基本概念和区别(1)
这三个函数都可以创建新的线程,但都是如何创建的呢?当然MSDN文档最权威: Creates a thread to execute within the virtual address space o ...
- pod update --verbose --no-repo-update
最近使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动 原因在于当执行以上两个命令的时候会升级Co ...
- NYIST 914Yougth的最大化【二分搜索/Dinkelbach算法】
转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187637.html 题目链接:http://acm.nyist.net/JudgeOnline/p ...
- RBAC - 基于角色的权限控制
ThinkPHP中关于RBAC使用详解 自己的源码下载:百度网盘,thinkPHP文件夹下,RBAC文件夹. 重要的是,权限信息的写入函数等.在源码中能找到,Modules/Amin/Common/c ...
- iOS 类别和扩展(Categories和Extensions)
分类(Category) 分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法. 此外,分类能够保证你的实现类和其他的文件区分开. 1 #import “UI ...
- 通过SecureCRT和PuTTY连接臻云CentOS版云主机
原文地址:http://jingyan.baidu.com/article/fa4125acb6648128ac7092dc.html 如何通过SecureCRT和PuTTY工具远程连接臻云CentO ...
- Android ListView两种长按弹出菜单方式
转自:http://www.cnblogs.com/yejiurui/p/3247527.html package com.wyl.download_demo; import java.util.Ar ...
- wifi密码破解方法总结(含破解软件下载链接)
眼下网上流行有非常多无线password的破解方法,总结起来最有用的还是这两种:第一种是Wirelessnetview+WinAirCrackPack软件组合,这个方法简单方便:另外一种就是大家熟悉的 ...
- Android:创建可穿戴应用 - 安装和依赖管理
安装可穿戴应用 在开发时,你能够像一般移动应用一样直接把应用安装到可穿戴设备中. 使用adb install或者 Android Studio上的Play button. 当你准备好要公布时,你须要把 ...
- scanf()常犯错误
------------------------------------------------------------------------ <> 本意:接收字符串. 写成代码:voi ...