CGB2108-Day11-异常-抽象

1.异常


1.1 异常的继承结构
异常层次中的根节点Throwable

Error : 目前我们编码解决不了的问题
Exception : 通常可以通过编程解决的问题
1)编译时异常 : 不用运行就已经报错了,比如,少写了分号/父类对象调用子类的特有功能。。。
2)运行时异常 : RunTimeException,编写以及保存的时候没有报错,但是在执行中报错了
注意: 运行时异常是可以通过编译的,不强制要求处理,方法上有默认抛出RunTimeException
1.2 异常处理方案
1.捕获处理try-catch : 自己解决,格式:

try{ 可能会出现异常的所有的代码 }catch(预测的异常类型 异常名字){ 如果匹配到了我们预测的异常类型,就执行此处异常的处理方案 }

2.向上抛出throws :在本方法不解决这个问题,谁来调用这个方法,谁解决问题,格式:

public void play() throws 异常类型1,异常类型2 {}

package cn.tedu.review;

import java.util.InputMismatchException;
import java.util.Scanner;

/*本类用于复习异常的解决方案*/
public class TestException {
    public static void main(String[] args) {
        //1.调用方法,求两个整数除法的结果
        //method1();//try-catch分别单独处理了两个子类型异常
        //method2();//try-catch使用多态,用父类型异常做统一处理
        //method3();//throws本方法不处理异常,将异常抛出
        /*main()不能直接调用method3(),因为实际上被抛出的问题没有被解决,该报错还报错*/
        f();//用来在main()调用method3()之前,处理掉问题
    }
    private static void f() {
        try{
            method3();//调用方法3,即使它抛出异常,我们也在此处处理掉了,不会抛给main()
        }catch (Exception e){
            System.out.println("数据不对!");
        }
    }
    //private static void method3() throws ArithmeticException,InputMismatchException{
    private static void method3() throws Exception{
        System.out.println("输入第一个数:");
        int a = new Scanner(System.in).nextInt();
        System.out.println("输入第二个数:");
        int b = new Scanner(System.in).nextInt();
        System.out.println(a/b);
    }

    private static void method2() {
        try{
            System.out.println("输入第一个数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("输入第二个数:");
            int b = new Scanner(System.in).nextInt();
            System.out.println(a/b);
        //不管是子异常:算术异常还是输入不匹配异常,都可以被Exception匹配到
        }catch (Exception e){
            //提供的通用的解决方案
            System.out.println("您输入的数据不正确,请重新输入!");
        }
    }
    //ArithmeticException--除数为0
    //InputMismatchException--接收的数据类型不是整形
    /*解决方案一:*/
    private static void method1() {
        try{
            System.out.println("输入第一个数:");
            int a = new Scanner(System.in).nextInt();
            System.out.println("输入第二个数:");
            int b = new Scanner(System.in).nextInt();
            System.out.println(a/b);
        //针对于算术异常-子异常 特有的解决方案:
        }catch (ArithmeticException e){
            System.out.println("除数不能为0!");
        //针对于与输入不匹配异常-子异常 特有的解决方案
        }catch (InputMismatchException e){
            System.out.println("请输入整型的数据:");
        }
    }
}

2.抽象


2.1 抽象类
被关键字abstract修饰的类是抽象类
一旦一个类中包含了抽象方法,那么这个类必须被声明成一个抽象类
抽象类中的方法不做限制,非常自由:全普 / 全抽 / 半普半抽
抽象类不可以实例化–创建对象
抽象类有构造方法,它自己不用,但是为了子类创建对象时调用
如果一个子类继承了抽象父类,那么有两种解决方案:
1)作为一个抽象子类:不实现/实现部分抽象父类的抽象方法,躺平
2)作为一个普通子类:需要实现抽象父类的全部抽象方法,还债
2.2 抽象方法
被关键字abstract 修饰的方法就是抽象方法
抽象方法没有方法体{ },直接以分号结束
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 nmos 晶体管 Verilog-A 建模代码的示例: ``` `include "constants.vams" module nmos_v1 (drain, gate, source, body, vbs, vgs, vds, ids); // 定义端口 inout drain, source, gate, body; input vbs, vgs, vds; output ids; // 定义参数 parameter REAL W = 1e-6; // 晶体管宽度 parameter REAL L = 1e-6; // 晶体管长度 parameter REAL tox = 2.5e-9; // 氧化层厚度 parameter REAL nsub = 1e16; // 衬底掺杂浓度 parameter REAL eps_ox = 3.9*8.854e-12; // 氧化层介电常数 parameter REAL eps_si = 11.7*8.854e-12; // 硅介电常数 parameter REAL mu = 0.05; // 迁移率 // 定义局部变量 real Vth; real vdsat; real idsat; real vfb; real phi_f; real eps_eff; real Cox; real Cgs; real Cgd; real Cgb; real Cdb; real gamma; real lambda; real W_eff; real L_eff; real Vgs; real Vds; real Vbs; real VT; real VG; real VD; real VSB; real ID; real Rd; real Rs; real gm; real gmb; real go; real Cgso; real Cgdo; real Cgbo; real Cdbo; real Cgsd; real Cgbd; real Cox_inv; real VDD; // 计算局部变量 Vth = 0.5 * (sqrt(4*nsub*eps_si*phi_f) + gamma*sqrt(eps_si)*Vsb - Vdsat); vdsat = Vgs - Vth; idsat = 0.5*mu*Cox*W_eff/L_eff*(Vgs-Vth)^2*(1+lambda*Vds); vfb = -phi_f + eps_si/eps_ox*phi_f; phi_f = kT/q*log(nsub/ni); eps_eff = eps_si*eps_ox/(eps_si+eps_ox); Cox = eps_ox/tox; Cgs = Cox*W*L_eff/(L_eff+W_eff); Cgd = Cgs; Cgb = Cox*W*Leff/(Leff+W_eff); Cdb = Cox*Leff*L/(L+W_eff); gamma = sqrt(2*q*eps_si*nsub)/(Cox*Vt); lambda = 0; W_eff = W-gamma*(sqrt(phi_f-Vbs)-sqrt(phi_f)); L_eff = L-lambda*W_eff; VT = Vt*log((nsub)/ni); VG = gate; VD = drain; VSB = body; ID = 0; Rd = 0; Rs = 0; gm = 0; gmb = 0; go = 0; Cgso = 0; Cgdo = 0; Cgbo = 0; Cdbo = 0; Cgsd = 0; Cgbd = 0; Cox_inv = 1/Cox; VDD = 1.8; // 计算电流 if(VD > VG) begin ID = mu*Cox*W_eff/L_eff*(Vgs-Vth-Vds/2)*Vds*(1+lambda*Vds); Rd = 1/lambda/mu/W_eff*Cox*L_eff; end else begin ID = mu*Cox*W_eff/L_eff*(Vgs-Vth)^2*(1+lambda*Vds); Rd = 0; end if (VG <= Vth) begin ID = 0; Rd = 0; end if (ID > idsat) begin ID = idsat; Rd = Vdsat/idsat; end if (ID < 0) begin ID = 0; Rd = Vdsat/idsat; end // 计算导通电阻 if (VDS <= Vgs-Vth) begin Rs = 1/(mu*Cox*W_eff/L_eff*(Vgs-Vth-VDS/2)); end else begin Rs = 1/(2*mu*Cox*W_eff/L_eff*(Vgs-Vth)*(Vdsat-VDS/2)); end // 计算导通电阻的变化量 if (VDS < Vgs-Vth) begin gm = mu*Cox*W_eff/L_eff*(2*(Vgs-Vth-VDS/2)); gmb = 0; go = mu*Cox*W_eff/L_eff*Vdsat; Cgso = Cox*W_eff*gamma/2; Cgdo = Cox*W_eff*gamma/2; Cgbo = Cox*Leff/gamma; Cdbo = Cox*Leff/gamma; Cgsd = Cox*L_eff/gamma; Cgbd = 0; end else if (VDS < vdsat) begin gm = mu*Cox*W_eff/L_eff*(2*(Vgs-Vth-Vdsat/2)); gmb = 0; go = mu*Cox*W_eff/L_eff*Vdsat; Cgso = Cox*W_eff*gamma/2; Cgdo = Cox*W_eff*gamma/2; Cgbo = Cox*Leff/gamma; Cdbo = Cox*Leff/gamma; Cgsd = Cox*L_eff/gamma; Cgbd = 0; end else begin gm = mu*Cox*W_eff/L_eff*(2*(Vgs-Vth-Vdsat/2)); gmb = 0; go = 0; Cgso = Cox*W_eff*gamma/2; Cgdo = Cox*W_eff*gamma/2; Cgbo = Cox*Leff/gamma; Cdbo = Cox*Leff/gamma; Cgsd = Cox*L_eff/gamma; Cgbd = 0; end // 输出电流和阻值 ids = ID; endmodule ``` 该代码定义了一个名为 `nmos_v1` 的模块,其中包含了各种局部变量和计算公式,以及从输入端口 `drain`, `gate`, `source`, `body`, `vbs`, `vgs`, `vds` 中读取输入信号的代码。最后,该模块通过输出端口 `ids` 输出计算出的电流值。在模拟器中调用该模块时,需要传递相关参数,如晶体管的宽度、长度、氧化层厚度、衬底掺杂浓度等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值