细节!重点!易错点!--面试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 ...
随机推荐
- C# L该系统的应用istView简单的图像浏览器
最近有同学问我怎么用ListView加载图像列表,在...前面"C#系统中的应用"于TreeView+ListView+ContextMenuStrip控件实现树状图显示磁盘文件夹 ...
- iOS开发中地图开发的简单应用
iOS上使用地图比Android要方便,只需要新建一个MKMapView,addSubView即可.这次要实现的效果如下: 有标注(大头针),定位,地图. 1.添加地图 1.1 新一个Single V ...
- c++构造函数析构函数调用顺序
#include <iostream> using namespace std; class A { public: A () { cout<<"A 构造 " ...
- Cin、Cout 加快效率方法
std::ios::sync_with_stdio(false); 在main 函数中加上这么一句话. 可以打消iostream的输入输出缓存,可以节省许多时间,使效率与scanf与printf相差无 ...
- QT 静态编译后中文可能会出现乱码
QT 静态编译后中文可能会出现乱码.这是因为处理文字编码的 libqcncodecs 库是以 plugin 形式存放在 QT 静态编译目录/plugs/codecs/libqcncodecs.a 文件 ...
- redis(三)redis+Keepalived主从热备秒级切换
一 简介 安装使用centos 5.10 Master 192.168.235.135 Slave 192.168.235.152 Vip 192.168.235.200 编译环境 yum -y in ...
- 基于visual Studio2013解决C语言竞赛题之0523魔方阵
题目
- ListView优化问题
可以参考:http://blog.csdn.net/bill_ming/article/details/8817172和http://blog.csdn.net/xiangjai/article/de ...
- WebView使用详解
一.用WebView处理页面导航 可以加载本地资源也可以加载web资源,区别是我们要加载本地资源要实现在assets文件夹里添加一个.html资源.调取网页的时候可以用loadUrl方法把网址添加进去 ...
- SQL SERVER 2008R2sp1配置Database Mail –用SQL 数据库发邮件
步骤1)创建配置文件和帐户 看图片吧,挺简单的: 中间略过的一些步骤,就点下一步即可. 下面我们测试一下: Step 2)配置邮件: 在完成账户和配置文件创建之后,我们需要配置Database Mai ...