本文内容摘自臧圩人的<<java面试解惑>>
转载请注明出处.
一:
静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成了。
静态变量和静态初始化块之间的顺序取决于它们在类中出现的先后顺序;
变量和初始化块之间的先后顺序也取决于它们在类中出现的先后顺序;
二:
大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:
1. 使用new创建对象。
2. 调用Class类的newInstance方法,利用反射机制创建对象。
常量的值在编译的时候就被确定。
三:
堆和栈
• 栈(stack):主要保存基本类型(或者叫内置类型)
(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,
速度仅次于寄存器(register),快于堆。
• 堆(heap):用于存储对象。
四:变量(属性)的覆盖
1. 由于private变量受访问权限的限制,它不能被覆盖。
2. 属性的值取父类还是子类并不取决于我们创建对象的类型,而是取决于我们定义的变
量的类型。
3. friendly、protected和public修饰符并不影响属性的覆盖。
4. 静态变量和静态常量属于类,不属于对象,因此它们不能被覆盖。
5. 常量可以被覆盖。
6. 对于基本类型和对象,它们适用同样的覆盖规律。
五:final修饰变量初始化
1. 在定义的时候初始化。
2. final变量可以在初始化块中初始化,不可以在静态初始化块中初始化。
3. 静态final变量可以在静态初始化块中初始化,不可以在初始化块中初始化。
4. final变量还可以在类的构造器中初始化,但是静态final变量不可以。
六:finally被执行(之前执行了return,break,continue 也会执行的原因)
编译器在编译return new ReturnClass();时,将它分成了两个步骤,new ReturnClass()和return,前一个创建对象的语句是在finally语句块之前被执行的,而后一个return语句是在finally语句块之后执行的,也就是说finally语句块是在程序退出方法之前被执行的。
七:值传递?
有一种说法是当一个对象或引用类型变量被当作参数传递时,也是值传递,这个值就是对象的引用,因此JAVA中只有值传递,没有引用传递。还有一种说法是引用可以看作是对象的别名,当对象被当作参数传递给方法时,传递的是对象的引用,因此是引用传递。这两种观点各有支持者,但是前一种观点被绝大多数人所接受,其中有《Core Java》一书的作者,以及JAVA的创造者James Gosling,而《Thinking in Java》一书的作者Bruce Eckel则站在了中立的立场上。
结论:
1. 基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法
给原变量重新赋值,也无法改变它的值。
2. 对象和引用型变量被当作参数传递给方法时,在方法实体中,无法给原变量重新赋值,
但是可以改变它所指向对象的属性。至于到底它是值传递还是引用传递,这并不重要,重要的是我们要清楚当一个引用被作为参数传递给一个方法时,在这个方法体内会发生什么。
八:基本数据类型
1. 未带有字符后缀标识的整数默认为int类型;未带有字符后缀标识的浮点数默认为
double类型。
2. 如果一个整数的值超出了int类型能够表示的范围,则必须增加后缀“L”(不区分大小
写,建议用大写,因为小写的L与阿拉伯数字1很容易混淆),表示为long型。
3. 带有“F”(不区分大小写)后缀的整数和浮点数都是float类型的;带有“D”(不区分
大小写)后缀的整数和浮点数都是double类型的。
4. 编译器会在编译期对byte、short、int、long、float、double、char型变量的值进行检查,
如果超出了它们的取值范围就会报错。
5. int型值可以赋给所有数值类型的变量;long型值可以赋给long、float、double类型的
变量;float型值可以赋给float、double类型的变量;double型值只能赋给double类型变量。
九:当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:
1. 只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
2. 否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
3. 否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;
4. 否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。
十:当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如下规则:
• 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,
且运算结果与运算符左边数值类型相同。
十一:
当使用“==”运算符在基本类型和其包装类对象之间比较时,遵循如下规则:
1. 只要两个操作数中有一个是基本类型,就是比较它们的数值是否相等。
2. 否则,就是判断这两个对象的内存地址是否相等,即是否是同一个对象。
十二::Math.round()执行结果:
1. 参数的小数点后第一位<5,运算结果为参数整数部分。
2. 参数的小数点后第一位>5,运算结果为参数整数部分绝对值+1,符号(即正负)不变。
3. 参数的小数点后第一位=5,正数运算结果为整数部分+1,负数运算结果为整数部分。
十三:能用于switch case的数据类型:
1. byte、char、short、int四种基本类型以及它们的包装类(需要Java5.0/1.5以上版本支持)
都可以用于switch语句。
2. long、float、double、boolean四种基本类型以及它们的包装类(在Java所有版本中)
都不能用于switch语句。
3. enum类型,即枚举类型可以用于switch语句,但是要在Java5.0(1.5)版本以上才支
持。
4. 所有类型的对象(包括String类,但在Java5.0/1.5以上版本中,该项要排除
byte、char、short、int四种基本类型对应的包装类)都不能用于switch语句。
十四:
我们可以把JAVA中的类分为以下三种:
1. 类:使用class定义且不含有抽象方法的类。
2. 抽象类:使用abstract class定义的类,它可以含有,也可以不含有抽象方法。
3. 接口:使用interface定义的类。
继承规则:
1. 类和抽象类都只能最多继承一个类,或者最多继承一个抽象类,并且这两种情况是互
斥的,也就是说它们要么继承一个类,要么继承一个抽象类。
2. 类、抽象类和接口在继承接口时,不受数量的约束,理论上可以继承无限多个接口。
当然,对于类来说,它必须实现它所继承的所有接口中定义的全部方法。
3. 抽象类继承抽象类,或者实现接口时,可以部分、全部或者完全不实现父类抽象类的
抽象(abstract)方法,或者父类接口中定义的接口。
4. 类继承抽象类,或者实现接口时,必须全部实现父类抽象类的全部抽象(abstract)方
法,或者父类接口中定义的全部接口。
十五:前期绑定、后期绑定
1. 前期绑定:在程序运行之前进行绑定,由编译器和连接程序实现,又叫做静态绑定。
比如static方法和final方法,注意,这里也包括private方法,因为它是隐式final的。
2. 后期绑定:在运行时根据对象的类型进行绑定,由方法调用机制实现,因此又叫做动
态绑定,或者运行时绑定。除了前期绑定外的所有方法都属于后期绑定。
十六:重载和重写
• 重写,英文名是overriding,是指在继承情况下,子类中定义了与其基类中方法具有相同
型构的新方法,就叫做子类把基类的方法重写了。这是实现多态必须的步骤。
• 重载,英文名是overloading,是指在同一个类中定义了一个以上具有相同名称,但是型构
不同的方法。在同一个类中,是不允许定义多于一个的具有相同型构的方法的。
十七:实现多线程
实现线程的方式有两种:
1. 继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。
2. 实现java.lang.Runnable接口,实现它的run()方法,并将线程的执行主体放入其中。
我们要启动一个线程,必须调用方法来启动它,这个方法就是Thread类的start()方
法,而不是run()方法(既不是我们继承Thread类重写的run()方法,也不是实现Runnable接口的run()方法)。
http://dtr1988.iteye.com/blog/1224138
分享到:
相关推荐
3. **java解惑.pdf**:这很可能与博客主题相呼应,详细解答了Java编程中的疑惑,比如异常处理、多线程、集合框架、内存管理等复杂话题。 4. **网络安全防护措施百分百.ppt**:网络安全是任何应用开发都不可忽视的...
"JAVA解惑.大全和问题解析"这个资源就是针对这些问题提供的一份详尽的解答指南。它涵盖了Java的基础知识、常见疑惑点以及易错知识点,旨在帮助Java初学者和进阶者解决实际编程中的困扰。 1. **基础概念解析**: - ...
"Java解惑(中文).pdf"是针对Java初学者的答疑解惑指南,它可能包含了一些常见问题和陷阱,以及如何避免和解决这些问题的方法,对初学者来说非常实用。 "Java深度历险.rar"可能是一本深入探讨Java高级特性的书籍,...
JAVA面试题解惑系列.pdf Java面试题(基础).pdf JVM 实用参数系列 - v1.0.pdf JVM与性能优化知识点整理.pdf JVM面试专题.docx JVM面试专题及答案.pdf Linux系统Redis笔记.docx MongoDB学习笔记.docx mybatis原理....
这个压缩包很可能是狂神为了帮助初学者和进阶者深入理解Java编程语言而精心准备的一系列教程或笔记。 JavaSE是Java平台的基础,它提供了开发和运行桌面应用、服务器应用以及嵌入式系统的环境。在JavaSE中,我们主要...
"Java解惑.pdf"可能是一份专门解答Java开发中常见问题和困惑的文档。开发者在实际工作中可能会遇到各种难题,这份文档可能会提供清晰的解释和解决方案,帮助他们解决实际问题,提高开发效率。 总的来说,《Java葵花...
文件"da"可能是资料的目录或者压缩包中的一个组件,其具体内容无法直接得知,但通常在Java培训资料中,这样的文件可能会包含源代码示例、项目文件、笔记或者讲义。通过这些文件,学习者可以动手实践,加深对理论知识...
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全栈开发),有任何使用问题欢迎随时与我联系,我会及时为您解惑,...
项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助...
对于有疑问的用户,博主也提供了私聊的方式进行答疑解惑。 总之,这个项目是一个完整的云笔记应用实例,通过SpringBoot、Spring MVC、Spring Data和JSP等技术,实现了文件共享、笔记创建、编辑和检索等功能。它不仅...
【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可...
描述中的“详细的代码讲解”暗示了这个压缩包可能包含一系列的示例代码,这些代码通常会展示如何创建和使用EJB组件,包括怎样定义Bean接口、实现业务逻辑、管理事务以及与其他Java EE组件交互。这种实践性的学习方式...
【子文件名列表】"binus2021-main"可能表示这个压缩包的主要部分,包含了一系列与Java学习相关的文件和目录。这些文件可能包括: 1. **课件**:PDF文档或PPT演示文稿,详细解释Java的概念和语法。 2. **代码示例**...
例如,`.doc`文件可能是教程或笔记,`.zip`文件可能包含了示例工程,可以下载后进行本地实践。 6. **分布式任务调度的优势**:通过分布式任务调度,可以有效地解决单机调度的局限性,提高任务处理能力,同时支持...
3. 在线学习:用户可以观看视频课程,系统可能还包含笔记记录、进度追踪等辅助学习工具。 4. 互动交流:包括课程讨论区、问答环节,促进用户间的知识分享和答疑解惑。 5. 教师管理:教师可以发布课程、更新教学资源...
这个压缩包很可能是包含了一系列关于信息技术基础知识的文章、讲义或练习题,旨在帮助用户系统地回顾和理解核心概念。 【描述】"基础复习资料.zip" 的描述简洁明了,直接指出了其内容性质——基础复习材料。这表明...
笔记 经验 习题答案 应用设计 技术资料 电子大赛 开发板 模块 驱动开发 移动开发 加密解密 压缩解压 编译器/仿真器 多媒体处理 图形图像 游戏 音视频 传感器 连接器 软件 Altium Designer Atmel studio CAD CAM ...
在线答疑解惑:系统支持在线答疑解惑功能,用户可以在平台上提出英语学习中遇到的问题,其他用户或专业教师可以给予解答和建议。 学习任务管理:用户可以制定学习任务并记录学习进度,系统提供任务提醒和学习计划...
(2)资源分享:用户可上传考研资料,如笔记、讲义、模拟试题等,并附带描述和分类。 (3)论坛讨论:用户可以在特定板块发起话题,其他用户可以回复,实现在线讨论。 (4)问答求助:用户可以提出疑问,其他用户或...