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

java核心技术总结

,方法名和类名相同,无返回值声明(实际上会返回对象),可以参也可以含参; 不写构造器的情况下,JVM自动一个类中注入一个参的构造器,如果写了构造器(不管有参还是无参),则不会自动生成; 许多框架在对类进行实例化的时候会调用参构造器...,所以构建类的时候最好明确提供一个参的构造器以防止出错; 构造器一般用 public 修饰,少数情况会将构造器私有,来限制类对象的创建(比如单例设计的时候); 4、关于类的初始化顺序 五、java...,异常是我们能够截获和处理的问题,另一些问题比较严重,是我们不应截获和无法处理的,这些就是错误 2、检查异常和运行时异常 二者都是在运行的时候发生; 检查异常是编译器能够预知的异常,代码中可能出现检查异常编译器强制我们进行处理...return ,因为可能覆盖 try–catch 中的 return; 4、为什么需要自定义异常 统一了对外异常展示的方式,可以隐藏底层的异常,这样更安全,异常信息也更加的直观; 系统中有些错误是符合...extends Fruit> 意思是具有 Fruit 子类类型,但是无法确定到底是 Fruit 的哪个子类,所以往里面 add 元素会报错(除了null); get方法正常使用因为无论什么子类都是可以向上转型为

46810

Object类解析

而深拷贝需要重写clone方法,实现对原堆里的对象的复制及引用类型,这样原对象发生改变是不会影响到拷贝出来的对象的,因为堆里有两份。 clone方法的保护机制是什么?...由于Object类并不知道我们子类有哪些引用,显然Object实现深拷贝是做不到的。...当然如果一个类重写了equals方法,那么这个类一般也重写hashCode方法。...3、finalize() 这个方法用于释放资源,由于JAVA的GC完全由JVM来进行,我们无法指定程序何时发生GC,我们只能显示的通知JVM要进行GC,所以finalize()这个方法什么时候调用是不确定的...在对象被GC时,可以在这个方法里使这个对象“复活”,具体是:this = new Object(); 如果运行这个方法抛异常了怎么样? 这个方法如果抛异常了终止对当前对象的回收。

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

Java对象初始化顺序

虽然小示例中使用了 String 类型,Initializer 类的实际代码中有一个用于注册的委托对象,与 Lower 类的功能是相同的 — 至少 Lower 类是这个意图。...那么,到底发生什么?当查看初始化顺序的时候一切就变的清晰了: 1.main() 函数调用了 Lower 构造器。 2.Lower 的一个实例被准备好了。...然而,如果一个明确地赋值 null 的操作,执行流程略有不同:当父类构造器完成后,在其余的构造器运行前,任何变量初始化都会执行(参见java语言规范12.5节)。...这是一个很好的例子,不仅方便我们如何注意一些创建对象的细节(或者知道去哪里查看 Java 编码规范,打印的或者在线的),还显示了为什么像这样写初始化是很糟糕的。...我们一点都不应该关心 Upper 的子类。相反的,如果因为一些原因对某些字段的初始化不能在子类本身被完成,它将只需要它自己的某些初始化帮助类的变体。

70310

10 Java 异常

如果试图打开的文件不在某个目录中,就会抛出 FileNotFoundException 异常。在这个例子中,我们想捕获这个异常,然后文件可能出现的下一个位置继续尝试。...非受检异常 Java 环境中有些失败是无法预料的,这些失败可能是由运行时条件或滥用库代码导致的。...为什么要有这个区分呢?我们自己定义异常的时候应该使用受检还是未受检异常呢?对于这个问题,业界有各种各样的观点和争论,没有特别一致的结论。...但如果没有父子关系情况下,最好明确声明抛出每一个异常,因为上层调用者根据这些异常信息进行相应的处理。...如果父类或接口的方法中没有异常抛出, 那么子类覆盖方法时,也不可能抛出异常.如果子类方法发生异常,就必须进行 try 处理,绝对不能抛. 一句话就是子类不能抛出更大的异常.

75030

JDK1.8源码(一)——java.lang.Object类

讲清楚Java的两种导包类型了,我们回到为什么可以直接使用 Object 类,看到上面查找类文件的第③步,编译器自动导入 java.lang 包,那么当然我们能直接使用了。...一个类必须要有一个构造器的存在,如果没有显示声明,那么系统默认创造一个无参构造器,JDK的Object类源码中,是看不到构造器的,系统自动添加一个无参构造器。...是否是同一个类:如果 equals 的语义每个子类中有所改变,就使用 getClass 检测;如果所有的子类都有统一的定义,那么使用 instanceof 检测   5、将 otherObject...5、getClass 方法    上面我们介绍 equals 方法时,介绍如果 equals 的语义每个子类中有所改变,那么使用 getClass 检测,为什么这样说呢?   ...前面我们说过判断一个元素是否相等可以通过 equals 方法,没增加一个元素,那么我们就通过 equals 方法判断集合中的每一个元素是否重复,但是如果集合中有10000个元素了,但我们新加入一个元素时

1.3K160

Java异常处理扫盲贴

Error vs Exception Java程序执行过程中所发生的异常事件可分为两类: Error:Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。...Java中,错误通常是使用Error的子类描述。...Exception:Exception分支中有一个重要的子类RuntimeException(运行时异常),该类型的异常自动为你所编写的程序定义ArrayIndexOutOfBoundsException...如果finally如果有return的话,catch在运行return之前运行finally的逻辑,然后直接运行finally的return,输出41。 异常注意事项 子类不能抛出父类没有的异常。...子类抛出的的异常与父类抛出的异常相同或者是父类抛出的异常的子类 如果父类中被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常。如果子类中有异常发生,那么子类只能try,不能throws

48831

Java关键字——instanceof

注意:编译器检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。...4、obj 为 class 接口的实现类   了解Java 集合的,我们知道集合中有个上层接口 List,其有个典型实现类 ArrayList public class ArrayList extends...  我们新建一个父类 Person.class,然后创建它的一个子类 Man.class public class Person { }   Man.class public class Man...6、问题   前面我们说过编译器检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。...如果 obj 强制转换为 T 时发生编译错误,则关系表达式的 instanceof 同样产生编译时错误。 在这种情况下,表达式实例的结果永远为false。

1.8K70

有效处理Java异常的三个原则,你知道吗?

什么出错? 在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么抛出,如果你的异常没有回答以上全部问题,那么可能你没有很好地使用它们。...另外,其中包含的异常信息("文件名为")通过明确回答什么这一问题使得异常提供的信息更加丰富,而这一答案是我们之前代码中抛出的NullPointerException所无法提供的。...延迟捕获 菜鸟和高手都可能犯的一个错是程序有能力处理异常之前就捕获它。Java编译器通过要求检查出的异常必须被捕获或抛出而间接助长了这种行为。...如果 readPreferences()被要求读取不存在的文件时会发生什么情况?当然,FileNotFoundException会被记录下来,如果我们当时去看日志文件的话,就会知道。...然而当程序尝试从文件中读取数据时会发生什么?既然文件不存在,变量in就是的,一个 NullPointerException就会被抛出。 调试程序时,本能告诉我们要看日志最后面的信息。

1.6K10

Java异常体系中的秘密

所以,介绍Java异常你所不知道的一些秘密之前,先让大家复习一下Java异常体系。 ? Throwable是整个Java异常体系的顶层父类,它有两个子类,分别是:Error和Exception。...这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生Exception异常体系中,除了RuntimeException类及其子类的异常,均属于checked异常。...那么,try-with-resources为什么能够避免大量资源释放代码呢?答案是,由Java编译器来帮我们添加finally代码块。...要解释这个问题,先来看一个例子,请问下面代码中的test()函数返回什么结果?...当异常真的发生的时候,处理策略也很简单,存在异常的地方添加一个if语句判定即可,但是这样的应对策略我们的程序出现越来越多的null判定,我们知道一个良好的程序设计,应该让代码中尽量少出现null关键字

1K100

Java异常架构与异常关键字

在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么抛出。...此类错误发生时,JVM 将终止线程。 这些错误是不受检异常,非代码性错误。因此,当此类错误发生时,应用程序不应该去处理此类错误。按照Java惯例,我们是不应该实现任何新的Error子类的! 3....虽然 Java 编译器不会检查运行时异常,但是我们也可以通过 throws 进行声明抛出,也可以通过 try-catch 对它进行捕获处理。如果产生运行时异常,则需要通过修改代码来进行避免。...例如,若会发生除数为零的情况,则需要通过代码避免该情况的发生! RuntimeException 异常会由 Java 虚拟机自动抛出并自动捕获(就算我们没写异常捕获语句运行时也抛出错误!!)...:6) 结果说明:try语句块中有除数为0的操作,该操作抛出java.lang.ArithmeticException异常。

53020

前端入门14-JavaScript进阶之继承声明正文-继承

权限控制 Java 中有权限修饰符,子类可以使用父类中非私有的属性和方法。 但在 JavaScript 中,没有公有、私有权限之说,所有定义原型中的属性,子对象中都可以使用。...而且,类机制是静态的,Java中,并不会存在在运行期,修改类相关属性而影响子类的场景。...但 a 对象创建时是继承自 A.prototype,这是一个继承自 Object.prototype 的对象,后续手动修改了构造函数 A 的 prototype,让 a 对象的继承关系自动跟随着发生变化吗...修改构造函数prototype 我们看一下输出,a 对象仍旧是之前的继承结构,它的原型链并没有因为构造函数的 prototype 发生变化而跟随着变化。...子类继承后,如果不实现直接调用这些方法,抛异常。 说白了,就是通过抛异常方式来模拟 Java 中的抽象方法机制,这种方式无法让开发工具在编写代码期间就检测出来,需要代码实际运行期间才能发现。----

41450

招银网络二面:Exception 和 Error 有什么区别?

Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。...这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。 Checked Exception 和 Unchecked Exception 有什么区别?...如果子类没有覆盖该方法,则该方法返回的信息与 getMessage()返回的结果相同 void printStackTrace(): 控制台上打印 Throwable 对象封装的异常信息 try-catch-finally...其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。 catch块 :用于处理 try 捕获到的异常。...不要把异常定义为静态变量,因为这样导致异常栈信息错乱。每次手动抛出异常,我们都需要手动 new 一个异常对象抛出。 抛出的异常信息一定要有意义。

49410

Java中的异常Exception和捕获,自定义异常

异常概述 1.1 什么是程序的异常  使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,系统的运行过程中仍然遇到一些问题,因为很多问题不是靠代码能够避免的。...否则一旦发生异常,程序也挂掉。 指针访问 试图读取不存在的文件 网络连接中断 数组角标越界 … 说明: 无论是Error还是Exception,还有很多子类,异常的类型非常丰富。...当代码运行出现异常时,特别是我们不熟悉的异常时,不要紧张,把异常的类名,找到对应API中去了解是什么类型的异常。 2.3 编译时异常和运行时异常 Java程序的执行分为编译时过程和运行时过程。...所以,我们通常将一定要被执行的代码声明finally中。 唯一的例外,使用 System.exit(0) 来终止当前正在运行的 Java 虚拟机。...此时,如果方法b,c,d中有异常,我们通常选择使用throws,而方法a中通常选择使用try-catch-finally。 5.

1.2K30

Java基础教程(10)-Java中的异常处理机制

异常是一个运行时错误。异常对象Java异常是一个描述代码段中发生的异常(出错)情况的对象。当异常情况发生一个代表该异常的对象被创建并且导致该错误的方法中被引发。...在编写代码的时候, 不需要显⽰的捕获,但是如果不捕获, 在运⾏期如果发⽣异常就会中断程序的执⾏;这种异常⼀般可以理解为是代码原因导致的。 ⽐如发⽣指针、 数组越界等。 这些异常都是可以避免的。...也就不需要我们显⽰的进⾏处理。关键字Java异常处理通过5个关键字控制:try、catch、throw、throws和 finally。程序声明了你想要的异常监控包含在一个try块中。...如果在try块中发生异常,它被抛出。你的代码可以捕捉这个异常(用catch)并且用某种合理的方法处理该异常。系统产生的异常被Java运行时系统自动引发。手动引发一个异常,用关键字throw。...把可能发生异常的语句放在 try { … } 中,然后使用 catch 捕获对应的 Exception 及其子类

11710

Java面试题3:Java异常篇

1、finally 块中的代码什么时候被执⾏? 答: Java 语⾔的异常处理中,finally 块的作⽤就是为了保证⽆论出现什么情况,finally 块⾥的代码⼀定会被执⾏。...答: 执行,并且finally的执行早于try里面的return 结论: 1.不管有木有出现异常,finally块中代码都会执行; 2.当try和catch中有return时,finally仍然执行...owException 2.被检查异常 定义:Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。特点 : Java编译器检查它。...答: 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。...另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类

6610

开发中造成指针的常见写法,如何预防!

3. 2 无结果仍返回对象 实际开发中有些同学会有一些非常 “个性” 的写法。 为了避免指针或避免检查到 null 参数抛异常,直接返回一个参构造函数创建的对象。...我们来分析一下原因, IDEA 的 target - classes 目录下找到 DEMO 编译后的 class 文件,IDEA 自动帮我们反编译: public class OrderUpdateParam...如果我们没有拉取源码的习惯,直接通过前面的转换工具类去转换。 我们潜意识认为外部接口的对象类型也都是包装类型,这时候很容易因为转换出现 NPE 而导致线上 BUG。...设想一下,如果一个批次请求无数据,不是返回空集合而是 null,怎样? 很不幸,又一个指针异常向你飞来 … 此时要根据具体业务场景来判断如何处理这里可能产生的指针异常。...总结 本节主要讲述指针的含义,指针常见的中枪姿势,以及如何避免指针异常。下一节将为你揭秘 当 switch 遇到指针,又会发生什么奇妙的事情。

40720

Java 异常之 RuntimeException和Exception的区别

Java Runtime自动catch到程序throw的RuntimeException,然后停止线程,打印异常。...按照我们异常处理的知识,如果一个方法通过throws抛出了异常,那么可以抛出异常的方法中不适用try…catch,但是调用这个方法的地方必须有try…catch来处理。...虽然RuntimeException的异常可以不使用try…catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,开发代码时最好使用try…catch...如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。...8、IllegalArgumentException:非法参数,把字符串转换成数字的时候经常出现的一个异常,我们可以自己的程序中好好利用这个异常。

79720

看完这篇Exception 和 Error,和面试官扯皮就没问题了

认识 Exception 之前,有必要先了解一下什么是 Throwable。...那么,按照这种逻辑关系,我们可以对 Throwable 及其子类进行归类分析 ?... Java 中有这几个关键字 throws、throw、try、finally、catch 下面我们分别来探讨一下 throws 和 throw Java 中,异常也就是一个对象,它能够被程序员自定义抛出或者应用程序抛出...但是在这种情况下,第二个异常会抹掉第一个异常。异常堆栈中也无法找到第一个异常的记录,怎么办,难道像这样来捕捉异常么?...如果应用程序执行的是 Java 方法,那么这个计数器记录的就是虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器值则为(Undefined)。

41520

最新Java面试题 每一题都是经典

do结构至少执行一次循环体。...方法重载: 发生在同一个类中,方法名必须相同,参数列表不同(参数类型不同、个数不同、顺序不同),方法返回值和访问修饰符可以不同,发生在编译时。...List、 Set和Map的区别 1、List中的元素,有序、可重复、可为; 2、Set中的元素,无序、不重复、只有一个元素; 3、Map中的元素,无序、键不重,值可重、可一个键、多个值;  break...重载是一个类,重写是子类中 重载的参数列表不同,重写参数列表相同 重载和返回值无关, 重写的返回值相同或者是父类方法返回值的子类 重载可以使用任意访问修饰符,重写访问修饰符大于等于父类方法修饰符...可以访问 private  私有的,本类中可以访问 静态变量和普通成员变量的区别 静态变量是被static修饰的变量,也称为类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝

87410

Java异常(Error与Exception)分析与常见异常处理

Java语言中,将程序执行中发生的不正常情况称为“异常”。我们即将讲解什么是异常?异常的分类?怎么去处理异常?...一、什么是异常 Java语言中,将程序执行中发生的不正常情况称为“异常”,异常不是我们开发过程中的语法错误和逻辑错误。... Java中,错误通过Error的子类描述。 Exception(异常):是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。...所以对于这种异常我们只能,加强代码规范,多调试,排查解决这些异常。当然,如果我们要强制处理也是可以的。...Java异常其实在开发中也是很重要的,定义接口的,我们经常要对错误的情况进行分析和处理,这样对用户来说相对更加友好,而不是直接把错误代码暴露出去。​

40540
领券