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