单例模式(一种设计模式):
在获取当前类的实例化对象,是同一个对象
当前对象操作的时候成员变量确保一致
内存效率高
饿汉模式
static SingletonDemo sing = new SingletonDemo();
懒汉模式
public static SingletonDemo sing;
静态代码块 单例模式
static {
sing = new SingletonDemo();
}
实例:
public class SingletonDemo {
//私有化的成员变量
private int num = 100;
//饿汉模式
//static SingletonDemo sing = new SingletonDemo();
//懒汉模式
public static SingletonDemo sing;
//静态代码块 单例模式
static {
sing = new SingletonDemo();
}
//只能在当前类里面访问
private SingletonDemo(){
}
//安全的单例模式 用于确保返回的是sing对象
public synchronized static SingletonDemo getInstance(){
if(sing == null){
sing = new SingletonDemo();
return sing;
}else{
return sing;
}
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public static SingletonDemo getSing() {
return sing;
}
public static void setSing(SingletonDemo sing) {
SingletonDemo.sing = sing;
}
}
class test{
public static void main(String[] args) {
//SingletonDemo S3 = new SingletonDemo();
SingletonDemo s1 = SingletonDemo.getInstance();
System.out.println(s1.getNum());
SingletonDemo s2 = SingletonDemo.getInstance();
System.out.println(s1 == s2);
}
}
输出结果为:
100
true
异常(Throwable):
描述:异常是在编译时或者运行时出现的不正常的情况 java用类进行对异常封装
正常的代码和异常代码相结合,提高代码的阅读星和健壮性
关键字:throw 抛出异常 用早方法体中 实例化对象的方 有throw的地方必然会有异常出现
throws 抛出异常 方法申明中 以类的形式抛出异常 有throws的地方可能有异常
try catch:用于捕获异常 try代码块只要放置可能出现异常的代码 catch代码块如果有异常就会执行
finally: 最终执行语句(不管有没有异常都会执行) 一般用于:关闭文件流、关闭锁等
继承体系:
父类:Throwable
java.lang.error JVM异常信息(不需要处理)
java.lang.Exception
运行时异常:RunTimeException
编译:Exception 必须处理
异常继承中的特点:
1.父类抛出异常的情况下,子类可以抛异常也可以不抛
2.父类抛出异常的情况下,子类的异常层级不能比父类高
3.子类可以抛出多个比父类层级低的异常
4.父类在没有异常抛出情况下,子类不能抛出编译时异常
(关于异常的层级,网上有很多这样的结构图)
注意:能捕获的异常,就不要抛
关于自定义异常,实例:
public class MyException extends Exception {
/*
* 自定义异常
* Throwable error Exception
*/
private String message;
public String getMessage() {
return message;
}
public MyException(){
super();
}
public MyException(String message){
super(message);
this.message = message;
}
}
class Person1{
static int num = 0;
public static void getMyException() throws MyException{
if(num == 0){
throw new MyException("程序崩溃了");
}
}
public static void main(String[] args) {
try {
getMyException();
} catch (MyException e) {
// TODO: handle exception
System.out.println(e.getMessage());//打印提示信息
}
}
}
输出结果: 程序崩溃了
断言:
JDK1.4新功能 JVM 默认关闭 -da -disableassertions 关闭断言功能
开启 -ea -enableassertions 开启断言功能
一般用于开发和测试阶段时抛出一个Error对象
例如:
public class ExceptionAssert {
public void showAssert(){
int a = 2;
assert a > 2;//类似于if语句
System.out.println(a);
}
public static void main(String[] args) {
ExceptionAssert arrertEx = new ExceptionAssert();
arrertEx.showAssert();
}
}
当开启断言时,会出现如下错误:
Exception in thread "main" java.lang.AssertionError
at com.ss.day13.ExceptionAssert.showAssert(ExceptionAssert.java:5)
at com.ss.day13.ExceptionAssert.main(ExceptionAssert.java:11)