将类名与文件名一一对应就可以方便虚拟机 在相应的路径(包名)中找到相应的类的信息。如果不这么做的话,就很难去找,而且开销也会很大。...---- 为什么一个java源文件中只能有一个public类? 答案: 每个编译单元(文件)只能有一个public类。...一个源文件中可以存在类名和文件名不一致的情况,但不能用public修饰....而且在编译单元的内部,可以有一个公共(public)类,它必须拥有与文件相同的名字(包括大小写形式,但排除.java 文件扩展名)。如果不这样做,编译器就会报告出错。...编译一个.java 文件时,我们会获得一个名字完全相同的输出文件;但对于.java 文件中的每个类,它们都有一个.class 扩展名。
,过长和过短都不会在编译时抛出问题 Ruby 在声明类型的时候不需要像 Java 那样声明类型,这也是动态语言的特性,我个人是比较喜欢的 条件判断 Ruby 的条件判断主要有以下三种: if 语句 unless...,但是平时常用的也就 each, for 会比较多,在循环上的区别,大多只是两种语言在语法上的区别 方法 分类 Ruby 中的方法大致可分为 3 类: 实例方法 类方法 函数式方法 实例方法:Ruby...中的实例方法 Instance method 和 Java 中的普通方法类似,顾名思义就是调用方必须是一个类的实例(对象),需要调用实例方法就必须先通过类构造一个实例对象才能进行调用,具体请看示例代码:...Java 通过 public class 修饰类(内部类通过 class 修饰),Ruby 则通过 class 修饰类 Java 类名必须与文件名相同,Ruby 的文件名和类名不要求强制关联 两种编程语言在构造函数上对比的示例代码...,不过建议在多人项目中不要用太多语法糖,不然可能会造成项目代码可读性混乱 异常处理 很多程序员大部分时间都花在查错上,所以迅速定位异常很关键,先看看 Ruby 的异常格式 文件名:行号:in 方法名:错误信息
异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理。 Throwable类中常用方法如下: 1....我们知道,异常是异常类的实例对象,我们可以创建异常类的实例对象通过throw语句抛出。...问2: 为什么抛出的异常一定是可检查异常(除了Exception中的RuntimeException及其子类以外,其他的Exception类及其子类)?...所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。...匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。
这四个类是泛化的,并不提供多少出错信息,虽然实例化这几个类是语法上合法的(如:new Throwable()),但是最好还是把它们当虚基类看,使用它们更加特化的子类。...提早抛出 异常堆栈信息提供了导致异常出现的方法调用链的精确顺序,包括每个方法调用的类名,方法名,代码文件名甚至行数,以此来精确定位异常出现的现场。 ?...通过逐步回退跟踪堆栈信息并检查代码,我们可以确定错误原因是向readPreferences()传入了一个空文件名参数。...堆栈信息立即反映出什么出了错(提供了非法参数值),为什么出错(文件名不能为空值),以及哪里出的错(readPreferences()的前部分)。这样我们的堆栈信息就能如实提供: ?...但这里的技巧是在合适的层面捕获异常,以便你的程序要么可以从异常中有意义地恢复并继续下去,而不导致更深入的错误;要么能够为用户提供明确的信息,包括引导他们从错误中恢复过来。
java异常和错误 异常是程序中的一些错误,但并不是所有的错误都是异常,也就是在的程序中,不存在所谓的“异常”,只存在错误并且错误有时候是可以避免的。...Error Error用来表示编译时和系统错误,一般我们不用关心,这里再重申一个概念,异常就是发生错误时被抛出的一个通知,所以Error是在编译时和系统错误时被抛出的异常。...try { // 有可能发生的运行错误代码; } 如果在方法内部抛出了异常或者在方法内部调用的其他方法抛出了异常,这方法将在抛出异常后终止,如果不希望方法就此终止,那么在方法内设置一个特殊的块来捕获异常...也就是说只有匹配的catch字句才能执行,即便是下面还有匹配的类型为什么下面还会存在匹配的类型,因为类继承原因,下面还存在父类的异常),也不会执行,具有唯一匹配性。...InstantiationException: 当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常。实例化失败有很多原因。
Customer 类的实例仍然可以如你所料响应 name 方法,但是为什么呢?...包含模块时 Ruby 会悄悄地创建单例类,并将其插入在继承体系中包含它的类的上方。 单例方法(类方法和针对对象的方法)存储于单例类中,它也会被插入继承体系中。...除了属性列表,Struct::new 方法还能接受一个可选的块 # 也就是说,我们能在块中定义实例方法和类方法。...比如,它们允许子类的实例和父类的实例相比较,这说得通嘛?...和 throw 第五章:元编程 第 28 条:熟悉 Ruby 模块和类的钩子方法 所有的钩子方法都需要被定义为单例方法 添加、删除、取消定义方法的钩子方法参数是方法名,而不是类名,如果需要,使用 self
实例 下面的例子中声明有两个元素的一个数组,当代码试图访问数组的第四个元素的时候就会抛出一个异常。...如果抛出异常的数据类型与 ExceptionType1 匹配,它在这里就会被捕获。 如果不匹配,它会被传递给第二个 catch 块。 如此,直到异常被捕获或者通过所有的 catch 块。...例如:throw new IOException(); throw抛出的只能够是可抛出类Throwable或者其子类的实例对象。...throw和throws的区别 throw 语法 throw 异常对象; 或 throw new 异常类型(参数列表); 说明 一般实在代码块的内部,当程序出现某种逻辑错误时,由程序员主动抛出某种特定类型的异常...当然更推荐进行处理操作,以避免后续不必要的错误。 方法中, throw和return都会触发方法中断操作,因此在未加入判断的情况下,不可同时出现。
在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误的方法抛出封装了错误信息的对象(异常)到其调用程序,发出已经发生问题的信号,然后立即退出;而且,程序并不在调用该方法的代码处继续执行...异常(Exception)也称例外、差错、违例等,是特殊的运行错误对象,它对应于java中的特定的运行错误处理机制。Java中引入了异常和异常类。 ...Error:JVM系统内部错误、资源耗尽等,应用程序不处理Error类。 Exception:其他编程错误等一般性问题。一般所说的异常都指Exception及其子类。 ...然后在主线程中原先调用该子任务的地方先创建一个该线程类的实例,再调用线程类中的start方法启动线程。 ...在Java中,文件和目录都是用File对象来表示的,创建和区分方法:先创建一个File对象,并指定文件名或目录名,若指定文件名或目录名不存在,则File对象的新建并不会创建一个文件或目录;需要用createNewFile
异常体系 Java中的所有异常都来自顶级父类Throwable;Throwable下有两个子类Exception和Error;Error是程序无法处理的错误,一旦出现这个错误,则程序将被迫停止运行,...抛出异常分为显式和隐式两种,显式异常的主体是应用程序,显式异常是在程序中通过throw关键字手动抛出异常实例。...隐式抛异常主体是JVM,指的是JVM运行过程中碰到无法继续运行的异常,自动抛出异常,比如数组越界异常; 构造异常实例比较消耗资源。...构造异常实例时,JVM需要生成该异常的栈轨迹,该操作会逐一访问当前线程的JAVA栈帧,并且记录下各种调试信息,包括栈帧指向的方法的名字,方法的类名,文件名,以及代码的哪一行触发了该异常; JVM是如何捕获异常的...target是6,表示异常处理器从索引6的字节码开始; 当程序触发异常时,JVM会从上到下遍历异常表中的所有条目,当触发异常的字节码索引值在某个异常表条目的监控范围内,JVM会判断抛出的异常和该条目想捕获的异常是否匹配
源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。...switch语句的一个条件 catch 和try搭配扑捉异常信息 char 16-bit Unicode字符数据类型 class 定义类 const 未使用 continue 不执行循环体剩余部分 default...int 32位整型数 interface 接口,一种抽象的类型,仅有方法和常量的定义 long 64位整型数 native 表示方法用非java代码实现 new 分配新的类实例 package 一系列相关类组成一个包...this 表示调用当前实例 或者调用另一个构造函数 throw 抛出异常 throws 定义方法可能抛出的异常 transient 修饰不要序列化的字段 try 表示代码块要做异常处理或者和finally...配合表示是否抛出异常都执行finally中的代码 void 标记方法不返回任何值 volatile 标记字段可能会被多个线程同时访问,而不做同步 while while循环 Java注释 在Java的编写过程中我们需要对一些程序进行注释
对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。 类:类是一个模板,它描述一类对象的行为和状态。...方法:方法就是行为,一个类可以有很多方法。逻辑运算、数据修改以及所有动作都是在方法中完成的。 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。...源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。...this 表示调用当前实例 或者调用另一个构造函数 throw 抛出异常 throws 定义方法可能抛出的异常 transient 修饰不要序列化的字段 try...表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行 finally中的代码 void 标记方法不返回任何值 volatile 标记字段可能会被多个线程同时访问,而不做同步
可以使用字符串类型的文件名来创建一个输入流对象来读取文件: InputStream f = new FileInputStream("C:/java/hello"); 也可以使用一个文件对象来创建一个输入流对象来读取文件...使用字符串类型的文件名来创建一个输出流对象: OutputStream f = new FileOutputStream("C:/java/hello") 也可以使用一个文件对象来创建一个输出流来写文件...资料 理解Java中字符流与字节流的区别 Java中的流、字符流和字节流 字节流与字符流的区别详解 Java 流(Stream)、文件(File)和IO 异常 异常和错误的区别:异常能被程序本身可以处理...4、在写异常处理的时候,一定要把异常范围小的放在前面,范围大的放在后面,,Exception这个异常的根类一定要放在最后一个catch里面,如果放在前面或者中间,任何异常都会和Exception匹配的,...2、非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台 3、运行时异常: 就是非检查性异常 4、非运行时异常: 就是检查性异常 错误与异常 1、error---错误 : 是指程序无法处理的错误
19.01_异常(异常的概述和分类) A:异常的概述 异常就是Java程序在运行过程中出现的错误。...所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常 编译时异常 Java程序必须显示处理,否则程序就会发生错误,无法通过编译 运行时异常 无需显示处理...b:toString() 获取异常类名和异常信息,返回字符串。 c:printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。...B:案例演示 分别演示编译时异常对象和运行时异常对象的抛出 C:throws和throw的区别 a:throws 用在方法声明后面,跟的是异常类名 可以跟多个异常类名,用逗号隔开 表示抛出异常,由该方法的调用者来处理...中的删除不走回收站。
因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件。当条件生成时,错误将引发异常。...其他 ClassCastException 类型转换异常类 ArrayStoreException 数组中包含不兼容的值抛出的异常 SQLException 操作数据库异常类 NoSuchFieldException...()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常 4.自定义异常 使用Java内置的异常类可以描述在编程时出现的大部分异常情况。...匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。...我们知道,异常是异常类的实例对象,我们可以创建异常类的实例对象通过throw语句抛出。
19.01_异常(异常的概述和分类) A:异常的概述 异常就是Java程序在运行过程中出现的错误。...所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常 编译时异常 Java程序必须显示处理,否则程序就会发生错误,无法通过编译 运行时异常 无需显示处理...b:toString() 获取异常类名和异常信息,返回字符串。 c:printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。...B:案例演示 分别演示编译时异常对象和运行时异常对象的抛出 C:throws和throw的区别 a:throws 用在方法声明后面,跟的是异常类名 可以跟多个异常类名,用逗号隔开 表示抛出异常,由该方法的调用者来处理...19.17_File类(File类的删除功能) A:删除功能 public boolean delete():删除文件或者文件夹 B:案例演示 File类的删除功能 注意事项: Java中的删除不走回收站
从Java语法角度: 又因为main() 方法是静态的,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。...解析如下: Java保存的文件名必须与类名一致; 如果文件中只有一个类,文件名必须与类名一致; 一个Java文件中只能有一个public类; 如果文件中不止一个类,public类名必须与文件名一致; 如果文件中不止一个类...所以对于Widget而言,文件的名称必须是Widget.java,而不是widget.java或WIDGET.java。如果不匹配,同样将得到编译时错误。...但是当你的类被 public 修饰时,此时文件名必须和该类保持一致(例如 public class A{} 只能放在 A.java 文件中,不然在用 javac 编译时会提示错误:类 A 是公共的,应在名为...注:有很多初学者 ( 我也是 ) 可能会认为文件名应该也和 main 方法所在类有关系,其实不然。
概述 在运行的时候发生不正常的情况。在Java中采用类的形式对异常问题进行描述和封装对象。 ?...image.png 对比Exception和Error Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(...** 6、ClassCastException** 类转换异常,将一个不是该类的实例转换成这个类就会抛出这个异常。...,抛给方法的调用者处理,用在方法声明后面,跟的是异常类名,可以跟多个异常类名,用逗号隔开。...,由该方法的调用者来处理 抛出异常throw 用在方法体内,跟的是异常对象名,抛出的时候直接抛出异常类的实例对象。
一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象:对象是类的一个实例,有状态和行为。...逻辑运算、数据修改以及所有动作都是在方法中完成的。 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定。...源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记Java是大小写敏感的),文件名的后缀为.java。(如果文件名和类名不相同则会导致编译错误)。...this 表示调用当前实例 或者调用另一个构造函数 throw 抛出异常 throws 定义方法可能抛出的异常 transient 修饰不要序列化的字段 try 表示代码块要做异常处理或者和finally...配合表示是否抛出异常都执行finally中的代码 void 标记方法不返回任何值 volatile 标记字段可能会被多个线程同时访问,而不做同步 while while循环 Java注释 类似于C/C
异常处理 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解 [toc] 什么是异常处理 在程序中可能会出现各种各样的异常,比如出现了错误,常见错误主要分为语法错误和编译错误,有的错误编译器是可以检查出来的...) 当然,也可以通过断言等方式来处理一些错误,当assert中的判别式结果为false的时候,就直接异常退出程序 C++中如何实现异常处理 C++的异常处理机制是由三个部分组成的:检查(try)、抛出(...关键字用于接收throw抛出的异常,并针对异常进行相应处理,catch和被检查的代码段被合称为catch块 形式: try { 被检查的代码段 }catch(异常信息类型 变量名·一般情况下不写变量名...·){ 处理异常的代码段 }注意 如果throw的表达式是类的话,可以不用单独实例化出一个对象,直接使用匿名对象,因为有的时候会定义一些空类来专门作为异常信息用,没必要为了异常信息实例化一个对象 class...块必须紧跟try块,catch不能脱离try单独使用,且两者之间不能夹杂其他语句;但是try块是可以单独使用的,即只检查不处理,catch块在另一个函数里面 花括号不能省略 由于一段代码中可能存在多种错误情况
使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。 为什么要学习Groovy 为什么要学习Groovy,简单来说就是Groovy可以用较少的代码实现较多的功能。...具体规则如下: 如果在一个groovy文件中没有任何类定义,它将被当做script来处理,也就意味着这个文件将被透明的转换为一个Script类型的类,这个自动转换得到的类将使用原始的groovy文件名(...去掉扩展名,没有包名,在default包中)作为类的名字。...在一个groovy文件中可以包含多个不同可见性的类定义,并且没有强制性的要求其中有一个类的类名与文件名相同。groovyc编译器会很乐于把该文件中定义的所有的类都编译成*.class文件。...在没有经过明确的编译过程即执行时,groovy将通过文件名来查找类。在这种情况下,名称将会很重要。Groovy只能找到那些和文件名匹配的类。
领取专属 10元无门槛券
手把手带您无忧上云