JAVA学习篇13——单例模式、异常、断言

本文深入探讨了单例模式的实现方式,包括饿汉模式、懒汉模式和静态代码块单例模式,并通过示例代码展示了如何确保类的唯一实例。此外,还详细解析了Java异常处理机制,包括异常的抛出、捕获、层级结构及自定义异常的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 单例模式(一种设计模式):
                在获取当前类的实例化对象,是同一个对象
                当前对象操作的时候成员变量确保一致
                内存效率高
         饿汉模式
                 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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值