Java面试之基础题---对象Object
参数传递:Java支持两种数据类型:基本数据类型和引用数据类型。
原始数据类型是一个简单的数据结构,它只有一个与之相关的值。引用数据类型是一个复杂的数据结构,它表示一个对象。原始数据类型的变量将该值直接存储在其存储器地址处。使用对象和引用变量时会有所不同。。Java中的所有参数都通过值传递。
当参数是原始是原始数据类型时,实际参数的值将复制到参数。在方法主体中对参数值进行的任何更改只会更改形式参数的副本,而不会更改实际参数的值。当参数通过参考值传递时,存储在实际参数中的参考被复制到形式参数。实际参数和形式参数都指向内存中的相同对象。形式参数可以通过直接更改实例变量的值或通过调用对象上的方法来修改对象。通过形式参数对对象进行任何修改都可以通过实际参数立即可见,因为它们对保存对内存中同一对象的引用。形式参数本身可以被修改以引用方法内的另一个对象。要禁用将引用类型形式参数更改为引用不同对象的方法,在引用类型形式参数声明中使用关键字final。
可变长度参数:(varargs:variable-length arguments),声明一个接受可变数量的参数的方法或构造函数。声明可变长度参数,在方法参数的数据类型之后添加一个省略号...,省略号...之前和之后添加空格时可选的。可变长度参数方法可以有多个参数,但最多可以有一个可变长度参数。可变长度参数方法的可变长度参数必须是参数列表的最后一个,可以使用for循环来处理可变长度参数的参数列表。length属性给出了可变长度参数传递的值的数量。
重载可变长度参数方法
方法重载规则适应于可变长度参数方法。可以使用可变长度参数重载一个方法,只要方法的参数在连续顺序或数字上不同。
Java的关键字this。它是对类的当前实例的引用。它只能在实例的上下文使用。当实例变量或类变量被具有相同名称的另一个变量覆盖时,需要使用关键字this限定一个实例变量,并使用类名称定义一个类变量。可以使用关键字this来限定实例方法名。
final关键字不允许修改或替换其原始值或定义。可以在以下三个上下文中使用:变量声明,类声明,方法声明。变量被声明为final,它只能被赋值一次。final变量的值在设置后不能修改。变量声明包括局部变量的声明,方法/构造函数的形式参数,实例变量和类变量。final变量的值只设置一次,它不能被重新赋值。有两种方法来初始化final变量的值:(1)在声明时给予初始化。(2)将其初始化延迟到稍后的时间。必须在第一次读取final变量之前初始化它。
final类,它不能被扩展或继承。
final方法,不能在包含该方法的类的子类中重新定义(覆盖或隐藏)
构造函数是用于在对象创建后立即初始化对象的代码块。构造函数的结构看起来类似于一个方法。构造函数名称与类的名称相同。构造函数名称后面是一对括号,可能包括参数。可选的,右括号后面可以是关键字throws,其后面是逗号分隔异常列表。
重载构造函数:一个类可以有多个构造函数。也叫重载构造函数。如果一个类有多个构造函数,它们的顺序和参数类型都必须与其它构造函数不同。每个对象创建表达式调用一次构造函数。可以在对象创建的过程中只执行一个构造函数的代码一次。
从另一个构造函数调用构造函数:构造函数可以调用同一类中的另一个构造函数。必须使用关键字this从另一个构造函数调用另外一个构造函数。如果构造函数调用另一个构造函数,它必须是构造函数体中的第一个可执行语句。构造函数不能调用自身,因为它将导致递归调用。
从构造函数返回:构造函数在其声明中不能返回类型。但可以在构造函数体中使用没有返回表达式的return语句。当一个构造函数中的返回语句被执行时,控制返回给调用者,忽略构造函数的其余代码。
静态初始化块:静态初始化器。当类定义被加载到JVM中时,只对一个类执行一次静态初始化器,需要在其声明的开头使用static关键字。在一个类中可以有多个静态初始化器。所有静态初始化器都按文本出现的顺序执行,并在任何实例初始化器之前执行。
Java Object 类:在java.lang 包中。所有的Java类都直接或间接扩展Object类。所有的Java类都是Object类的子类,Object类是所有类的超类。Object类本身没有超类。Object类的引用变量可以保存任何类的对象的引用。Object类有九个方法。可以在Java中的所有类中使用。toString、equals、hashCode、clone、finalize没有实现,需要子类自定义。在对象销毁前被垃圾收集器调用。notify、notifyAll、wait、getClass()在Object类中实现,不能自定义它。它返回对对象的Class对象的引用。
对象的哈希代码:哈希码(也叫散列码)是一个整数值。计算整数的算法称为散列函数。Java使用散列码从基于散列的集合中有效地检索数据。Object类有一个返回int的hashCode方法,它是对象的哈希码。该方法的默认实现通过将对象的内存地址转换为整数来计算对象的哈希码。如果两个对象使用equals()方法相等,则它们必须具有相同的哈希码。如果对同一个对象多次调用hashCode()方法,则该方法必须返回相同的整数值。如果一个类覆盖这两个方法中的任何一个,它必须基于散列集合覆盖该类的对象以保证能正确工作。Java 7 引入了一个实用程序类java.lang.Objects 。它包含一个hash()方法,用于计算任意数量值的哈希码。
equals()方法的特性:1.自反性。x.equals(x)应该返回true
2、对称性。如果x.equals(y)返回true,那么y.equals(x)
3、传递性,如果x.equals(y)为true,且y.equals(z),那么x.equals(z)
4、一致性,如果x.equals(y)返回true,它应该返回true,知道x或y的状态改变
类的toString()方法非常重要。当需要对象的字符串表示时,Java会自动调用toString()方法。当连接一个字符串和一个对象时,实例调用的就是toString()方法。
Java对象克隆:Java不提供克隆(复制)对象的自动机制。克隆对象意味着逐位复制对象的内容。要支持克隆操作,请在类中实现clone()方法。clone()方法声明为protected。因此,不能从客户端代码调用它。需要在类中声明clone()方法为public来克隆类的对象。它的返回类型是Object。这就需要使用clone()方法转换返回值。
Java提供了一种在对象即将被销毁时执行资源释放的方法。在Java中创建对象,但是不能销毁对象。JVM运行一个称为垃圾收集器的低优先级特殊任务来销毁不再引用的所有对象。垃圾回收器给我们一个机会,在对象被销毁前执行清理代码。Object类有一个finalize()方法就是用于在对象被销毁之前执行清理代码,这个方法声明为protected,Object类中的finalize()方法不会做任何事情。所以需要覆盖类中的finalize()方法。
Java不可变对象:在创建状态后无法改变状态的对象称为不可变对象。一个对象不可变的类称为不可变类。不变的对象可以由程序的不同区域共享而不用担心其状态改变。不可变对象本质上是线程安全的。关键字final声明属性,那么属性不可变,对象也就是不可变的。
Java面试之基础题---对象Object的更多相关文章
- java面试| 精选基础题(2)
关注微信公众号"java从心",置顶公众号 每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 继续挖掘一些有趣的基础面试题,有错望指出来哈,请赐教~ 1.包装类的装箱与拆 ...
- java面试| 精选基础题(3)
每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 系列文章 java面试| 精选基础题(1) java面试|精选基础题(2) 1.float f=3.4;是否正确? 答:不正确,编译无法通过 ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- java面试一日一题:java中垃圾回收算法有哪些
问题:请讲下在java中有哪些垃圾回收算法 分析:该问题主要考察对java中垃圾回收的算法以及使用场景 回答要点: 主要从以下几点去考虑, 1.GC回收算法有哪些 2.每种算法的使用场景 3.基于垃圾 ...
- java面试一日一题:讲下mysql中的undolog
问题:请讲下mysql中undo log的作用 分析:mysql中有很多日志,例,bin log undo log redo log,要弄清楚这些日志的作用,就要了解这些日志出现的背景及要解决的问题: ...
- java面试一日一题:mysql中常用的存储引擎有哪些?
问题:请讲下mysql中常用的引擎有哪些? 分析:该问题主要考察对mysql存储引擎的理解,及区别是什么? 回答要点: 主要从以下几点去考虑, 1.mysql的存储引擎的基本概念? 2.mysql中常 ...
- java面试一日一题:讲下在什么情况下会发生类加载
问题:请讲下在什么情况下会发生类加载? 分析:该问题主要考察对java中类加载的知识,什么是类加载,为什么会发生类加载,什么情况下发生类加载? 回答要点: 主要从以下几点去考虑 1.什么是类加载: 2 ...
- java面试一日一题:java中的垃圾回收器
问题:请讲下java中垃圾回收器有哪些? 分析:该问题主要考察hotspot虚拟机下实现的垃圾回收器 回答要点: 主要从以下几点去考虑, 1.垃圾回收器的种类 2.每种垃圾回收器的着重点是什么 前边的 ...
- Java入门 - 语言基础 - 04.对象和类
原文地址:http://www.work100.net/training/java-object-class.html 更多教程:光束云 - 免费课程 对象和类 序号 文内章节 视频 1 概述 2 J ...
随机推荐
- android的handle
Handler的定义: 用来接收子线程发送过来的数据,并利用该数据直接更新主线程的UI. 安卓中,一个应用启动时会开启一个主线程(UI线程),他的责任是负责管理界面中的控件.比如当你点击一个Butt ...
- 前端生成全球唯一码GUID
function GUID() { this.date = new Date(); //先new一个时间备用 GUID.prototype.newGUID = function () { this. ...
- jQuery deferred应用之ajax详细源码分析(二)
在上一节中,我只贴出了$.Deferred的源码分析,并没用讲解怎么使用它,现在我们先看看$.ajax是如何使用它,让我们进行异步任务的处理. 如果没看上节的代码,请先稍微了解一下jQuery Def ...
- github入门一
一.首先安装gitbash(自行百度)我使用的版本是Git-2.12.2.2-64-bit.exe 二.配置gitbash本地客户端 1.初始设置 1.1.设置姓名和邮箱地址 git config - ...
- web前端性能优化 (share)
本文转自:http://www.cnblogs.com/50614090/archive/2011/08/19/2145620.html 一. WEB前台的优化规则 一.尽量减少 HTTP 请求 有几 ...
- sql创建作业--自动执行存储过程
创建自动执行存储过程: 1.创建参数 2.删除已有同名的作业 3. 创建作业 4.创建作业步骤 5.连接服务器 6.创建作业调度 7.启动作业 ALTER PROCEDURE dbo.sx_pro_A ...
- 在eclipse中查看你用的tomcat的路径
在eclipse中查看你用的tomcat的路径 打开eclipse,选择window->Preferences->Server->Runtime Environments选择你的 ...
- 在前台引用JSON对象
<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script&g ...
- -[UPAInitViewController startAPPay] in libUPAPayPlugin.a(UPAInitViewController.o)
问题 Undefined symbols for architecture arm64: "_PKPaymentNetworkChinaUnionPay", referenced ...
- ubuntu frp 自编译。本文不能按顺序来 请自己理解
go run:go run 编译并直接运行程序,它会产生一个临时文件(但不会生成 .exe 文件),直接在命令行输出程序执行结果,方便用户调试. go build:go build 用于测试编译包,主 ...