异常和单例

1.==与equals的区别

1.1基本数据类型没有equals方法

1.2基本数据类型==判断两值是否相等

1.3引用类型判断地址是否相等

1.4基类的equals判断地址是否相等

1.5如String,Date等类创建重写了equals方法,x.equals(y)只要x,,y两引用对象(可以是不同实例对象)同属一个类且属性值相等,即判断相等。

2.(扩展)String缓存池问题https://blog.csdn.net/tiantiandjava/article/details/46309163

3.扩展)包装类的享元模式https://blog.csdn.net/jason0539/article/details/22908915

3.1 Integer类型在 -128-127之间 //享元模式

Integer i=127;

Integer b=127;

System.out.println(i==b);

输出 true //缓存池

 

Integer i=128;

Integer b=128;

System.out.println(i==b);

输出 false //无缓存池

4.单例模式

4.1单例模式的定义:一种设计模式,通过构造方法私有化,一个只能创建一个实例

饿汉模式

(1)构造方法私有化

(2)提供成员变量

(3)在类中方法外创建对象,再提供可访问的方法返回对象引用

懒汉模式

(1)构造方法私有化

(2)提供成员变量

(3)提供方法,在方法内部创建对象,并返回对象引用

两种模式区别

1.饿汉模式在类加载时创建对象

2.懒汉模式在调用方法是才,可能创建对象并返回引用

3.懒汉模式线程不安全https://blog.csdn.net/qq_35098526/article/details/79893628

4.2枚举类型属于单例模式

特点:可以控制一个类创建多个对象(枚举类型重写了toSring方法)

5.代码块

5.1普通代码块: 循环,判断语句,方法

5.2 构造方法代码块: {语句}只有花括号的语句(类加载时执行)

5.3静态代码块: static{语句}(类加载时执行)

源文件中代码执行顺序

静态变量——静态代码块——主方法(main)——构造代码块——构造方法

6.异常处理

语句

try{ //当异常处理的代码执行结束以后,是不会回到try语句去执行尚未执行的代码。

可能出错的语句

}catch( 异常类对象){

只有执行try里的语句出现异常,才会来执行这里的自定义的代码

a)    每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常对象。

  b)    常用方法:

   toString ( )方法,显示异常的类名和产生异常的原因

  getMessage( )  方法,只显示产生异常的原因,但不显示类名。

  printStackTrace( )  方法,用来跟踪异常事件发生时堆栈的内容。

 这些方法均继承自Throwable类 

  c) Catch捕获异常时的捕获顺序:  

i.    如果异常类之间有继承关系,在顺序安排上需注意。越是顶层的类,越放在下面(放前面可能是包含后面的类的父类,没意义)。再不然就直接把多余的catch省略掉。 

 

}finally{

肯定执行的代码

有些语句,不管是否发生了异常,都必须要执行,那么就可以把这样的语句放到finally语句块中。

通常在finally中关闭程序块已打开的资源,比如:文件流、释放数据库连接等。

}

6.1常见的四种异常

java.lang.ArithmeticException:除数不能为0

java.lang.NullPointerException空指针异常(指针本身为空,对指针本身操作不报错比如输出指针,但是通过指针做对对象的操作时,会报错,因为为空,不指向任何对象)

java.lang.ArrayIndexOutOfBoundsException:数组下标越界

java.lang.NumberFormatException.forInputString(NumberFormatException.类型转化异常常见Sting(包含非数字的串)类型转整型

6.2try, catch,finally ,return 执行顺序(在有返回值的函数中,return语句可能在try, catch,finally中,但不能看成try, catch,finally的一部分,return是独立的模块,遵循try, catch,finally ,return 执行顺序)

8异常的概念

8.1.Java异常是java提供的用于处理程序中错误的一种机制

8.2.所谓错误是指程序运行的过程中发生的一些异常事件

8.3设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。

8.4.Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给java运行时系统,这个过程称为抛出(throw)异常.

8.5.当java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。

10.Runtime Exception

10.1出现RuntimeException就一定是你的问题,可以不捕获(派生于RuntimeException的异常也一样)

11Java中RuntimeException和Exception的区别

11.1 在java的异常类体系中,Error(属于处理不了的错误,肯定被中断且无法跳过)和RuntimeException是非检查型异常,其他的都是检查型异常。

 

11.2 所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类 

 

11.3 不可以在不声明的情况下抛出非RuntimeException

 

11.4 简单的说,非RuntimeException必要自己写catch块处理掉。

 

11.5 RuntimeException不用try catch捕捉将会导致程序运行中断,若用则不会中断

12.任何语句都可以用Exception捕捉处理(不管是否有错,相当于保护)

12.1不属于运行可能出错的语句可以用RuntimeException捕捉处理(反正写了没有编译错误)(因为RuntimeException的异常有系统帮忙抛,自己不捕捉处理也行,但有异常肯定会被终止)

12.3RuntimeException捕捉处理异常,

12.3.1 不属于运行可能出错的语句无编译错误

13.2 处理自己捕捉不了的异常,属于RuntimeException类无编译错误,但肯定处理不了。

非RuntimeException类异常会有编译错误。

13非Exception和RuntimeException捕捉处理异常,

13.1 不属于运行可能出错的语句会有编译错误

13.2 处理捕捉不了的语句可能出现的异常会有编译错误

14.异常捕获处理时

在try catch finally 语句不能用throw new IOException();抛出没处理的异常,除非在外部用throws把这个异常抛过。

14.1throw new IOException();语句后有代码,该代码不能执行且会报编译错误(因为抛出异常就会终止或跳去处理,后面代码就没有执行可能了)。

15.很多运行可能出错的语句,非RuntimeException类错误必须用throws抛或用try catch语句捕捉处理(这些语句中类或方法可能在父类就用throws抛过不处理,所以组成新语句是运行可能出非RuntimeException类错误的语句),不然有编译错误。

16.方法重写声明异常原则

16.1子类声明的异常范围不能超过父类声明的范围。包含如下意思:

       1.    父类没有声明异常,子类也不能;

      2.    不可抛出原有方法抛出异常类的父类或上层类 

      3.    抛出的异常类型的数目不可以比原有的方法抛出的还多(不是指个数)

16.2没超过范围

1 子类不抛,没超过

2 子类抛父类异常子类没超过

3 子类抛RuntimeException异常类,没超过(RuntimeException类系统默认抛过的)

4. 父类抛抛RuntimeException异常类,当不存在,范围为0

17.父类构造函数抛出异常,子类构造函数会默认调用父类构造函数(跟普通调用函数的异常处理特点一样)。

11.6http://https://blog.csdn.net/wqc19920906/article/details/7913778212

 

8.javaBeanhttps://blog.csdn.net/qq_37922457/article/details/80900308

 

 

 

 

 

 

上一篇:Java- RuntimeException-无法编译的源代码 – 错误的树类型


下一篇:输入超出TextInputLayout的counterMaxLength时发生RuntimeException