首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Java面试总结】Java基础(下篇)

(可以快速找到所需要的对象) 为什么要有 hashCode 我们先以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode:当你把对象加入 HashSet时,HashSet 会先计算对象的...为什么Java中只有值传递? 在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。...通过上面的例子,我们知道了一个方法不能修改一个基本数据类型的参数,而对象引用作为参数就不一样,请看例2。...NullPointerException(要访问的变量没有引用任何对象时,抛出该异常)、ArithmeticException(算术运算异常,一个整数除以 0时,抛出该异常)和ArrayIndexOutOfBoundsException...singletonXxx(): 返回一个只包含指定对象(只有一个或一个元素)的不可变的集合对象,此处的集合可以是:List,Set,Map。

64820

Core Java 52 问(含答案)

引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 Java 调用方法传递的是实参引用的副本。...为什么说Java中只有值传递。 24. 对象实例化和初始化之间的区别 ? Initialization(实例化) 是创建新对象并且分配内存的过程。...Java 虚拟机会从上至下匹配异常处理器。因此,前面的 catch 代码块所捕获的异常类型不能覆盖后面的,否则编译器会报错。...在 Java 语法中,所有的检查异常都需要程序显式地捕获,或者在方法声明中用 throws 关键字标注。通常情况下,程序中自定义的异常应为检查异常,以便最大化利用 Java 编译器的编译时检查。...所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

37220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    本节将介绍与聚合相关的最佳实践和原则。 我们对聚合根和子集合实体都使用实体这个术语,除非明确写出聚合根或子集合实体。 聚合和聚合根原则 包含业务原则 实体负责实现与其自身属性相关的业务规则。...如果我们有一个业务规则,如:用户不能对锁定的 Issue 进行评论,我们如何不通过检索数据库中数据的情况下,检查 Issue 的锁定状态呢?...一个设计良好的构造函数,担负以下职责: 获取所需的实体属性参数,来创建一个有效的实体。应该强制只传递必要的参数,并可以将非必要的属性作为可选参数。 检查参数的有效性。 初始化子集合。...初始化子集合,当使用 Labels 集合时,不会获取到空引用异常。 构造函数将参数id传递给base类,不在构造函数中生成 Guid,可以将其委托给另一个 Guid生成服务,作为参数传递进来。...无参构造函数对于ORM是必要的。我们将其设置为私有,以防止在代码中意外地使用它。 实体属性访问器和方法 上面的示例代码,看起来可能很奇怪。比如:在构造函数中,我们强制传递一个不为null的Title。

    3.1K30

    最近我遇到的10个Java面试问题

    Type annotations 类型注释提供了在使用类型的任何地方应用注释的能力,而不仅仅是在声明中。与可插入类型系统一起使用时,该特性支持改进的代码类型检查。 3、您知道集合类型有哪些?...我们把这个问题称为钻石问题。它的名字来自上面的图片,它描述了警告。 8、你怎么能让一个类不可变的? 我认为这是一个相当困难的问题。...它包含静态变量,这些静态变量可以容纳其自身的惟一和私有实例。当用户希望将类的实例化限制为一个对象时,可以使用它。当需要单个对象来协调跨系统的操作时,这通常是有帮助的。 10、什么是依赖注入?...这是您在Java EE或Spring工作时必须知道的第一个问题。控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。...通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。 组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。

    67930

    刷完牛客网910道Java题目,快速总结上万字,带你扫清Java基础面试障碍

    答:泛型提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型。泛型限制了集合容纳的对象类型,如果添加其它类型的任何元素,它会在编译时报错。...必须注意地是,对象序列化保存的是对象的“状态”,即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。 为什么要序列化?...在JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。...答:JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。...注意此时的设置初始值为默认值,具体赋值在初始化阶段完成。 (4)解析 虚拟机常量池内的符号引用替换为直接引用(地址引用)的过程。 (5)初始化 初始化阶段对静态变量和静态代码块执行初始化工作。

    38920

    ​第3章 对于所有对象都通用的方法

    第8条 覆盖equals时请遵守通用约定 不覆盖equals 不覆盖equals的情况下,类的每个实例都与它自身相等,如果满足以下任何一个条件,就是所期望的结果: 类的每个实例本质上都是唯一的 不关心类是否提供了...) 对于任何非null的引用值x,x.equals(x)必须返回true 对称性(symmetric) 对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(...对于任何非null的引用值,x,x.equals(null)必须返回false 感觉又回到了学数学交换律什么的的时候了~ 有些类(如集合,HashMap)与equals方法息息相关,所以重写的时候要仔细小心...高质量的equals ej对equals提了几点建议: 使用==操作符检查”参数是否为这个对象的引用” 如果是,则返回true....Object通用约定(在Object类中的注释即是): 在应用程序的执行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一地返回同一个整数

    52320

    Java泛型深入理解「建议收藏」

    然而,当我们使用数据的时候,需要将获取的Object对象转换为我们期望的类型(String),如果向集合中添加了非预期的类型(如Integer),编译时我们不会收到任何的错误提示。...我们在介绍泛型时指出向ArrayList中插入String类型的对象,编译时会报错。现在为什么又可以了呢?...当我们从集合中获取元素时,默认会将对象强制转换成泛型参数指定的类型(这里是Integer),如果放入了非法的对象这个强制转换过程就会出现异常。...再说,你如果又用arrayList2往里面add()新的对象,那么到时候取得时候,我怎么知道我取出来的到底是String类型的,还是Object类型的呢? 所以,要格外注意泛型中引用传递问题。...编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如List在运行时仅用一个List类型来表示。为什么要进行擦除呢?这是为了避免类型膨胀。 3.

    84020

    忍者级别的操作JavaScript函数

    但是,因为我们在函数上s会用了非直接引用,也就是ninja对象的chirp属性,所以才能够实现递归,这也就引出来一个问题:引用丢失 引用丢失的问题 上面的示例代码,依赖于一个进行递归调用的对象属性引用。...缓存记忆有两个主要的优点: 在函数调用获取之前计算结果的时候,最终用户享有性能优势 发生在幕后,完全无缝,最终用户和开发者都无需任何特殊的操作或者为此做任何初始化工作。...我们可以将状态和缓存信息存储在一个封装的独立位置上,不仅在代码组织上有好处,而且外部存储或缓存对象无需污染作用域,就可以获取性能的提升。...别激动,下面还有更多的奇淫技巧~ 伪造数组方法 有时候我们想创建一个包含一组数据的对象。如果只是集合,则只需要创建一个数组即可。但是在某些情况下,除了集合本身,可能会有更多的状体需要保存。...通过如上代码,我们将传递给函数的对象都合并到一个对象中。在javascript中,没有强制函数声明多少个参数就得穿入多少个参数。函数是否可以成功处理这些参数,完全取决于函数本身的定义。

    67131

    学过 C++ 的你,不得不知的这 10 条细节!

    我在阅读 《Effective C++ (第三版本)》 书时做了不少笔记,从中收获了非常多,也明白为什么会书中前言的第一句话会说: 对于书中的「条款」这一词,我更喜欢以「细节」替换,毕竟年轻的我们在打...如下面的 PI 宏定义,在程序编译时,编译器在预处理阶段时,会先将源码中所有 PI 宏定义替换成 3.14: #define PI 3.14 程序编译在预处理阶段后,才进行真正的编译阶段。...说明「按值传递」,在进入函数时,会产生一个副本,离开作用域后就会消耗,说明这里是存在开销的。...---- 细节 03:确定对象被使用前先被初始化 内置类型初始化 如果你这么写: int x; 在某些语境下 x 保证被初始化为 0,但在其他语境中却不保证。...---- 方式二:精心周到的语句顺序 把代码的顺序重新编排以下就可以避免此问题,例如一下代码,我们只需之一在赋值 pb 所指东西之前别删掉 pb : A& A::operator=(const A& rhs

    75520

    笔记《Effective Java》02:对所有对象都通用的方法

    今天整理第二章节:对所有对象都通用的方法。2、在重写equals方法时要遵守通用约定要避免犯错,最简单的方式就是不重写。这样的话,该类的实例只会与自身相等。...传递性:对于任何非null的引用值x、y和z,如果x.equals(y)返回 true,并且y.equals(z)返回true,那么x.equals(z)必须返回 true一致性:对于任何非null的引用值...3.1、为什么要重写hashCode如果没有这样做,类就会违反hashCode的通用约定,这将使其实例无法正常应用与诸如HashMap和HashSet等集合中。...,我们使用clone()方法来复制对象时,如果对象中包含数组等引用类型,应当在复制构造器中对这些引用类型也进行深复制。...;6.1、小结总而言之,每当要实现一个可以合理地进行排序地值类时,都应该让这个类实现Comparable接口,这样他的实例就可以轻松地被排序、查找和用在基于比较地集合中。

    7210

    【C++ 类和对象 进阶篇】—— 逻辑森林的灵动精灵,舞动类与对象的奇幻圆舞曲

    如果这个成员变量没有默认构造函数,那么就会编译出错,我们要初始化这个成员变量,需要用初始化列表!...带参数构造函数(Parameterized Constructor) 定义:包含一个或多个参数的构造函数,允许在创建对象时为对象成员传递初始值。...作用:通过传递不同的参数,创建对象时可以初始化不同的值。...它通常在以下几种情况下被调用: 对象作为函数参数传递时(按值传递) 从函数返回一个对象(返回值时) 初始化一个对象为另一个同类型对象的副本(拷贝初始化) 拷贝构造函数的特点: 拷贝构造函数是构造函数的⼀...如果需要显式实现赋值运算符重载要注意以下几点: 检查自赋值:如果左边对象和右边对象是同一个对象(即自赋值),则无需执行任何操作。

    3900

    Java Getter和Setter

    诸如Hibernate,Spring和 Struts之类的某些框架 可以检查信息或通过getter和setter注入其实用程序代码。...这意味着两个变量都引用内存中的同一对象 myScores 数组对象。因此,对scores 或 myScores 变量所做的更改 实际上是在同一对象上进行的。...由于getter方法直接返回内部变量score的引用,因此外部代码可以获得该引用并更改内部对象。 这种情况的解决方法是,我们应该返回对象的副本,而不是直接在getter中返回引用。...仅引用被复制,因此这就是两个Collection不同但它们包含相同对象的原因。换句话说,这是因为我们没有提供任何复制对象的方法。...它甚至可能是导致您的代码行为异常的问题的根源。或更糟糕的是,可以通过隐式操纵获取器和设置器的参数并从中获取对象来轻易地利用您的程序。因此,请小心并考虑实施上述最佳实践。

    7K11

    c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

    关键字用于修改方法和属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。   调用虚方法时,将为重写成员检查该对象的运行时类型。...方法参数上的ref方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在在该变量中。若要使用ref参数,必须将变量作为ref参数显示传递到方法。...方法参数上的out方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。   当希望方法返回多个值时,声明out方法非常有用。....;   11、C#中有没有静态构造函数,如果有是做什么用的?   有。静态构造函数用于初始化类。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。...在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。

    2K20

    Java面试知识点总结(牛客网)

    抽象类可定义包含非final的变量; 抽象类可以不继承抽象类或不实现接口声明的所有方法。 抽象类可以在不提供接口方法实现的情况下实现接口 10. 什么是值传递和引用传递?...区别 同步方法默认用this或者当前类class对象作为锁; 同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法; 同步方法使用关键字 synchronized...垃圾回收是在内存中存在没有引用的对象或超过作用域的对象时进行。  垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。...调用时机:当垃圾回收器要宣告一个对象死亡时,至少要经过两次标记过程:如果对象在进行可达性分析后发现没有和GC Roots相连接的引用链,就会被第一次标记,并且判断是否执行finalizer( )方法,如果对象覆盖...当一个对象到GC Roots不可达时,在下一个垃圾回收周期中尝试回收该对象,如果该对象重写了finalize()方法,并在这个方法中成功自救(将自身赋予某个引用),那么这个对象不会被回收。

    61820

    Java 面试问题大全

    但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。...请参考答案中的示例代码,这里面一步一步教你创建一个线程安全的 Java 单例类。当我们说线程安全时,意思是即使初始化是在多线程环境中,仍然能保证单个实例。...任何修改都会创建一个新的对象,如 String、Integer及其它包装类。详情参见答案,一步一步指导你在 Java 中创建一个不可变的类。 16)我们能创建一个包含可变对象的不可变对象吗?...StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内,当没有任何对象指向它时将会被GC回收 WeakReference,顾名思义, 是一个弱引用, 当所引用的对象在...为什么要使用? 当你将你的应用从 32 位的 JVM 迁移到 64 位的 JVM 时,由于对象的指针从 32 位增加到了 64 位,因此堆内存会突然增加,差不多要翻倍。

    92240

    C# 12.0中的10个新功能

    在本文中,我们将深入探讨 C# 12.0 的 10 大功能,探讨它们是什么、它们为什么重要、何时使用它们以及它们与以前的替代方案相比如何。在我们踏上 C# 最新创新的激动人心的旅程时,请系好安全带!...Alias Any Type:简化复杂类型引用 内容:能够为任何类型的类型创建别名,包括元组和构造的泛型类型。 原因:此功能显著提高了代码的可读性和可维护性,尤其是在处理复杂类型时。...Ref Fields:高效的引用处理 内容:可以保存对变量的引用的字段,允许更高效的数据结构和算法。 原因:此功能支持创建性能更高的代码,尤其是在涉及大型数据结构或低级编程的情况下。...何时使用:在性能关键型场景中,或者实现受益于引用语义的自定义集合和数据结构时。 上一个版本:没有直接的等效版本;类似的功能需要不安全的代码或复杂的解决方法。...原因:此扩展改进了类型安全性和重构支持,使引用代码元素变得更加容易,而不会冒着拼写错误或中断性变更的风险。 何时使用:在属性、反射或日志记录方案中引用语言元素时。

    9610

    java核心技术基础知识整理

    10、初始化及类的加载 1.加载的含义:通常,加载发生在创建类的第一个对象时,但访问static域或static方法时,也会发生加载。static的东西只会初始化一次。...2.加载过程:加载一个类的时候,首先去加载父类的静态域,然后再加载自身的静态域,之后去初始化父类的成员变量,后加载父类的构造方法,最后初始化自身的成员变量,后加载自身的构造方法。...,不能向迭代变量赋值;适合集合的遍历; 如果遍历集合或数组时,如果需要访问集合或数组的下标,则最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。...,则后面的不再进行判断;||称为逻辑或(短路或)如果前面的条件满足true则后面的不再判断; · 在开发之中为了性能的提高,不需要所有条件进行判断,所以使用短路与和短路或操作; ·...,表明任何类或对象都可以访问这个方法; 3)static表明main()方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名

    86020

    Android Handler机制11之Handler机制总结

    // 一旦调用这句代码,就在此线程中创建了Looper对象,这就是为什么我们要在调用线程start()方法后,才能得到Looper对象,即当调用Looper.myLooper()时不为null...(二)、什么是内存泄露 Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收。...也就是说,一个对象不被任何应用所指向,则该对象会在被GC发现的时候被回收;另外,如果一组对象只包含相互的引用,没没有来自他们外部的引用(例如有两个对象A和B相互持有引用,但没有任何外部对象持有指向A或B...在Java中,非静态(匿名)内部类会引用外部类对象。而静态内部类不会引用外部类对象。 -垃圾回收机制中约定,当内存中的一个对象的引用计数为0时,将会被回收。...对于上面的代码,用户在关闭Activity之后,就算后台线程还没有结束,但由于仅有一条来自Handler的弱引用指向Activity,所以GC仍然会在检查的时候把Activity回收掉。

    2.7K10

    Python基础知识点总结

    l Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。...答案:如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用...__init__什么都不返回. l 只有在__new__返回一个cls的实例时后面的__init__才能被调用. l 当创建一个新实例时调用__new__,初始化一个实例时用__init__. stackoverflow...Python默认定义了三代对象集合,索引数越大,对象存活时间越长。 举例: 当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M划到一个集合A中去,而新分配的内存都划分到集合B中去。...36.函数装饰器有什么作用 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

    74120

    Effective Java(二)

    覆盖 equals 时请遵守通用约定 覆盖 equals 方法看起来似乎很简单,但是有许多覆盖方式会导致错误,并且后果非常严重。...最容易避免这类问题的办法就是不覆盖 equals 方法,在这种情况下,类的每个实例都只与它自身相等。如果满足了以下任何一个条件,这就正是所期望的结果: 类的每个实例本质上都是唯一的。...对称性(symmetric):对于任何非 null 的引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时, x.equals(y) 必须返回true。...现在我们按照顺序逐一查看以下5个要求: 自反性(Reflexivity) 第一个要求仅仅说明对象必须等于其自身。很难想象会无意识地违反这一条。...为了成功地实现这种独立性,可能需要在 super.clone 返回对象之前,修改对象的一个或更多个域。

    45620
    领券