细节!重点!易错点!--面试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。

时间: 2024-10-22 15:17:29

细节!重点!易错点!--面试java基础篇(一)的相关文章

细节!重点!易错点!--面试java基础篇(二)

今天来给大家分享一下java的重点易错点第二部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.字符串创建与存储机制:当创建一个字符串时,首先会在常量池中查找是否已经有相同的字符串被定义,其判断的依据是String类型equals的返回值,若已经定义,则直接获取对其的引用.此时不需要创建新的对象,如果没有定义,首先创建这个对象,然后把它加入到字符串池中,再将它的引用返回.(例:new String(”aaa“)可能创建了1个或者2个对象,如果常量池中原来有aaa那么之创建了一个对象,如果没

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律 掌握好IO流的规律,再开发中会很好用 下面来总结一下: 1,明确源和目的 源:输入流 InputStream 和Reader 目的:输出流 OutputStream 和Writer 2,操作的数据是否是纯文本. 是:使用字符流 不是:使用字节流 3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分 源设备: 内存,硬盘,键盘 目的设备: 内存,硬盘,控制台 这里的源就是你想进行的操作,比如说你想从c盘复制一个文

java基础篇---I/O技术(三)

接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象输入流(ObjectInputStream).使用对象输出流输出序列化对象的步骤,有时也成序列化,而使用对象输入流读入对象的过程,有时也称为反序列化 一个对象产生之后实际上是在内存中为其开辟了一个存储空间,方便存储信息. 对象序列化就是把一个对象变成二进制的数据流的一个方法,通过对象序列化可以反驳的

黑马程序员——Java基础篇之对象归要

1.static关键字 1.1.static可以修饰成员变量,成员方法,还有类(其中这里的类是内部类) 1.2.static修饰的部分会随着类的加载而加载: 加载过程:当JVM执行static修饰的代码时,会在内存的共享区给static部分开辟一个空间,供该类持有,static部分不是某个对象的部分,而是该类共有的,所以当一个函数会被多个对象调用时,最好定义成static,这样比较节省空间. 1.3.静态方法只能访问静态成员 原因:如果静态方法中调用了非静态的变量,那么由于静态方法是随着类的加载

Java基础篇Socket网络编程中的应用实例

说到java网络通讯章节的内容,刚入门的学员可能会感到比较头疼,应为Socket通信中一定会伴随有IO流的操作,当然对IO流比较熟练的哥们会觉得这是比较好玩的一章,因为一切都在他们的掌握之中,这样操作起来就显得非常得心应手,但是对于IO本来就不是多熟悉的哥们来说就有一定的困难了,在搞清楚IO流操作机制的同时还必须会应用到Socket通信中去,否则会对得到的结果感到非常郁闷和懊恼,下面就和大家一起分享一下自己遇到一点小麻烦后的感触以及给出的解决办法. 要求:客户端通过Socket通信技术上传本地一

Java 基础篇之反射

Java 基础篇之反射 反射# 使用反射获取程序运行时的对象和类的真实信息. 获取 Class 对象# 每个类被加载之后,系统会为该类生成一个对应的 Class 对象,通过该 Class 对象可以访问到 JVM 中的这个类. 使用 Class 类的 forName(String clazzName) 静态方法.字符串参数的值是某个类的全限定类名,必须包含完整的包名 调用某个类的 class 属性 调用某个对象的 getClass() 方法.该方法是 java.lang.Object 类中的一个方

面试准备&总结-Java基础篇

在vps的服务器到期了,在hw又不能访问,直接在博客园写笔记了.  基础篇 1. 集合类的继承关系,源码实现原理,初始大小和如何增长. - list类初始大小10,加载因子为1,扩容到1.5+1.底层是个Object数组,调用 System.arraycopy进行拷贝. - Vector同上,扩容倍数是两倍,是同步的,线程安全. - HashMap初始大小16,加载因子0.75f,扩容到2倍.底层是数组+链表,调用resize()调整位置. - HashTable初始大小11,加载因子0.75f

JAVA基础篇NO1--环境变量的配置及命名规则

标签(空格分隔): java基础 一:计算机概述 计算机:硬件和软件 硬件:控制器 运算器 存储器 输入和输出设备       存储器:外存(硬盘) 内存 软件:系统软件 应用软件   系统软件:windows Linux DOS IOS Android Unix macOS           裸机:没有安装操作系统   应用软件:QQ Office MD web APP 二:软件开发与计算机语言 什么是软件?按照特定的组织顺序的数据和指令的集合 计算语言分类 :机器语言(二进制0和1) 汇编

JAVA基础篇八(Java,C++中的网络)

基础篇写到这里,C++和JAVA的基础知识也要讲完了,至于更深入的使用,则需要单独寻找每种语言特有的类库. 讲到网络,不可避免地要讲TCP/IP的基本使用方法.本文只对两种语言的网络实现做简单介绍,后续学习中如果有详细说明,会逐步添加到本文中. 1.C++网络知识 简单的TCP/IP: server端: #include <WINSOCK2.H> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") void