软件设计之Java入门视频(13)

news2024/11/13 11:02:24

软件设计之Java入门视频(13)

视频教程来自B站尚硅谷:

尚硅谷Java入门视频教程,宋红康java基础视频
相关文件资料(百度网盘)
提取密码:8op3
idea 下载可以关注 软件管家 公众号

学习内容:

该视频共分为1-717部分
本次内容涉及360-389
在写代码时,总是需要来回切换界面来看代码要求,这里推荐Snipaste,可以把截图以窗口形式放在屏幕上
记录内容:

  1. 内部类
  2. 异常

1、内部类

1)Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B称为外部类
2)内部类的分类:成员内部类(静态、非静态)局部内部类(方法内、代码块、构造器内)
3)成员内部类
  作为外部类的成员:
  a)可以调用外部类的结构
  b)可以被static修饰
  c)可以被四种不同权限修饰(public、缺省、protected、private)
  作为类的成员:
  a)可以定义属性、方法、构造器
  b)可以被final、abstract修饰

package test;

public class InnerClassTest {
    public static void main(String[] args) {
        //创建Dog类(静态成员内部类)
        Person.Dog dog = new Person.Dog();
        dog.show();
        //创建Bird类(非静态成员内部类)
        Person person = new Person();
        Person.Bird bird = person.new Bird();
        bird.sing();
    }

}

class Person{
    int age;
    public void eat(){
        System.out.println("吃饭");
    }
    public void method(){
        //局部内部类
        class AA{

        }
    }
    //静态成员内部类
    static  class Dog{
        int age;
        public void show(){
            System.out.println("叫");
        }
    }
    //非静态成员内部类
    class Bird{
        int age;
        public Bird(){

        }
        public void sing(){
            System.out.println("唱歌");
            Person.this.eat(); //调用外部类的非静态属性
        }
        public void display(int age){
            System.out.println(age); //方法形参
            System.out.println(this.age);//内部类属性
            System.out.println(Person.this.age);//外部类属性
        }
    }
}

2、异常

Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowErrorOOM。一般不编写针对性的代码进行处理。
Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:
空指针访问、试图读取不存在的文件、网络连接中断、数组角标越界
运行时异常:是指编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常。
编译时异常:是指编译器要求必须处置的异常。即程序在运行时由于外界因素造成的一般性异常。编译器要求Java程序必须捕获或声明所有编译时异常

Error举例

public class ErrorTest {
    public static void main(String[] args) {
       // main(args);  栈溢出 StackOverflowError
       Integer[] arr = new Integer [1024*1024*1024] //堆溢出  OOM OutOfMemoryError
       
    }
}

异常处理:抓抛模型

过程1:"抛":程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。并将此对象抛出。一旦抛出对象以后,其后的代码就不再执行。
过程2:“抓”:异常的处理方式
1)try-catch-finally
2) throws

try-catch-finally

1)finally是可选的
2)使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象类型,去catch中进行匹配
3)一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常处理,一旦处理完成,跳出当前try-catch结构(在没有写finally的情况)
4)catch中的异常类型如果没有子父类关系,声明在上/下不影响
5)catch中的异常类型满足子父类关系,则要求子类一定要声明在父类之上,否则报错unreachalbe
6)常用的异常对象处理的方式:String getMessage(); printStackTrace();
7)finally中声明的是一定会被执行的代码。即使catch中又出现异常、try/catch中有return语句等情况
8)像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。

package test;

import org.junit.Test;

public class ExceptionTest1 {

    @Test
    public void test1(){
        String str = "1223";
        str = "abc";
        try{
            int num = Integer.parseInt(str);
            System.out.println("----1");
        }catch (NumberFormatException e){
            System.out.println("出现数值转换异常");
        }
        System.out.println("----2");
        }
}

throws

1)"throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码,就不再执行!
2)try-catch-finally:真正的将异常给处理掉了
3)throw只是将异常抛给了方法的调用者
4) 重写方法异常抛出的规则: 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

如何选择try-catch与throws

1)如果父类中被重写的方法没有throws方式处理异常,则子类重写的方法也不能使用throws,意味着如果子类重写的方法中有异常,必须使用try-catch-finally方式处理。
2)执行的方法a中,先后又调用了另外的几个方法,这几个方法是递进关系执行的。我们建议这几个方法使用throw的方式进行处理。而执行的方法a可以考虑使用try-catch-finally方式进行处理。

手动抛出异常

package test;

public class StudentTest {
    public static void main(String[] args) {
        Student student = new Student();
        try {
            student.regist(-10);
            System.out.println(student);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

    }
}

class Student{
    private int id;
    public void regist (int id) throws Exception {
        if(id > 0){
            this.id = id;
        }else {
            //手动抛出异常对象
            // throw new RuntimeException("非法数据"); //此处是运行时异常,所以不会编译报错
            throw new Exception("非法数据");
        }
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                '}';
    }
}

自定义异常类

1)继承于现有的异常结构 ExceptionRuntimeException
2)提供全局常量:serialVersionUID
3)提供重载的构造器

public class MyException extends Exception{

    static final long serialVersionUID = -702321312412L;

    public MyException(){

    }

    public MyException(String msg){
        super(msg);
    }
}

练习

在这里插入图片描述

在idea中想要设置main方法的args[]实参:
在这里插入图片描述
在这里插入图片描述)

package test;

public class EcmDef {
    public static void main(String[] args) {
        try {
            int i =Integer.parseInt(args[0]);
            int j =Integer.parseInt(args[1]);

            int result = ecm(i,j);
            System.out.println(result);
        }  catch (NumberFormatException e){
            System.out.println("数据类型不一致");
        } catch (ArrayIndexOutOfBoundsException e){
            System.out.println("缺少命令行参数");
        } catch (ArithmeticException e){
            System.out.println("算数异常");
        } catch (EcDef e) {
            System.out.println(e.getMessage());
        }
    }


    public static int ecm (int i , int j) throws EcDef {
        if(i < 0 || j < 0){
            throw new EcDef("分子或分母为负数");
        }
        return i/j;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1907533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【低压电工】考试题库及低压电工考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年低压电工考试题库为正在备考低压电工操作证的学员准备的理论考试专题&#xff0c;每个月更新的低压电工考试总结祝您顺利通过低压电工考试。 1、【单选题】PE线或PEN线上除工作接地外其他接地点的再次接地称为(…

通过Vxlan实现数据中心互联有感

随着企业的发展&#xff0c;为满足跨地域运营、用户接入、异地灾备等场景&#xff0c;越来越多的企业通常在多地域部署多个数据中心。 数据中心互联DCl(Data Center Interconnection)是不同数据中心VM之间互相通信的一种解决方案使用VXLAN、BGP EVPN等技术&#xff0c;使数据中…

RoPE 旋转位置编码,详细解释(下)NLP 面试的女生彻底说明白了

RoPE 旋转位置编码&#xff0c;详细解释&#xff08;下&#xff09;NLP 面试的女生彻底说明白了 原创 看图学 看图学 2024年07月01日 07:55 北京 书接上文&#xff0c;上文见&#xff1a;这么解释 RoPE 旋转位置编码&#xff0c;女朋友睁大了双眼&#xff08;上&#xff09; …

12种增强Python代码的函数式编程技术

前言 什么是函数式编程&#xff1f; 一句话总结&#xff1a;函数式编程(functional programming)是一种编程范式&#xff0c;之外还有面向对象&#xff08;OOP&#xff09;、面向过程、逻辑式编程等。 函数式编程是一种高度抽象的编程范式&#xff0c;它倡导使用纯函数&#x…

【计算机网络】物理层(作业)

1、若信道在无噪声情况下的极限数据传输速率不小于信噪比为30dB 条件下的极限数据传输速率&#xff0c;则信号状态数至少是&#xff08;D&#xff09;。 A. 4B. 16C. 8D. 32 解析&#xff1a;可用奈奎斯特采样定理计算无噪声情况下的极限数据传输速率&#xff0c;用香农第二定…

Aqara 发布多款智能照明新品,引领空间智能新时代

7月8日&#xff0c;全球 IoT 独角兽品牌 Aqara 以“光&#xff0c;重塑空间想象”为主题&#xff0c;举办了线上智能照明新品沟通会。 会上&#xff0c;Aqara 正式发布一系列引领行业的智能照明新品&#xff0c;包括银河系列轨道灯 V1 以及繁星系列妙控旋钮 V1 等&#xff0c;…

Leetcode—97. 交错字符串【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—97. 交错字符串 2d动规实现代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int m s1.length();int n s2.length();int len s3.length();if(m n ! len) {return false;}vector<…

metersphere链接腾讯邮箱步骤

1、打开腾讯邮箱生成授权码 路径&#xff1a;设置-账户-账户安全 生成的授权码只会展示1次&#xff0c;注意保存 2、在系统设置-系统参数设置-邮件设置填写授权码和SMTP信息 SMTP信息在邮箱的客户端设置中可以获取到对应的信息 3、信息填写完后&#xff0c;可以测试连接&…

XDMA原理学习(1)——DMA技术详解

目录 一、什么是DMA&#xff1f;为什么需要DMA&#xff1f; 二、DMA分类 2.1 Block DMA 2.2 Scatter-Gather DMA 2.3 Ring buffer DMA 三、实际案例 3.1 STM32微处理器 3.1.1 Block DMA 3.1.2 Scatter-Gather DMA 3.1.3 使用场景举例&#xff1a; 3.1.4 配置与实现 …

Vue框架引入

vue简介 1.1.vue是什么?Vue官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ vue是一套构建用户界面的渐进式javascript框架 构建用户界面:将我们手里拿到的数据通过某种办法变成用户可以看见的界面前端工程师的职责:就是在合适的时候发出合适的请求,然后…

PyQt5显示QImage并将QImage转换为PIL图像保存到缓存

PyQt5显示QImage并将QImage转换为PIL图像保存到缓存 1、效果图 2、流程 1、获取摄像头资源,打开摄像头 2、截取图像 3、opencv读的通道是BGR,要转成RGB 4、往显示视频的Label里显示QImage 5、将QImage转换为PIL图像,并保存到缓存 6、获取图像中人脸信息3、代码 # -*- codin…

数据结构(Java):链表面试OJ题

1、题一&#xff1a;获取链表倒数第k个节点 . - 力扣&#xff08;LeetCode&#xff09; 1.1 思路解析 此题我们使用双指针法求解。 首先&#xff0c;我们要知道&#xff0c;倒数的第k个节点&#xff0c;距离倒数第一个节点还需要移动k-1次。 1.那么我们可以定义出两个指针&…

VS2019运行显示缺少调试目标

出现问题点 如果点击运行显示上述错误&#xff0c;可以尝试先清理&#xff0c;然后重新生成 此时会出来一个调试目标路径&#xff0c;代表生成成功 但是运行还是显示缺少调试目标 右键项目&#xff0c;点击属性&#xff0c;然后修改路径&#xff0c;既可成功

最小爬楼梯(dp)

import java.util.Scanner;public class ClimbingStairsCost {public static int minCostClimbingStairs(int[] cost) {int n cost.length; // 获取输入的 cost 数组的长度int[] dp new int[n 1]; // 创建一个用于存储每个台阶最小花费的 dp 数组dp[0] 0; dp[1] 0; // 初始…

【Python】各种运行符及其运用实例

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言什么是运算符&#xff1f;算术运算符实例 比较运算符实例 赋值运算符实例 逻辑运算符实例 位运算符实例 成员运算符实例 身份运算符实例 运算符优先级实例 前言 关于九种数据…

【手撕数据结构】卸甲时/空间复杂度

目录 前言时间复杂度概念⼤O的渐进表⽰法小试牛刀 空间复杂度 前言 要想知道什么是空/时间复杂度,就得知道什么是数据结构。 这得分两层来理解。我们生活中处处存在数据&#xff0c;什么抖音热点上的国际大事&#xff0c;什么懂的都懂的雍正卸甲等等一系列我们用户看得到的&a…

抖音矩阵系统源代码开发部署,系统独立搭建,抖音搜索引擎优化(SEO)

抖音搜索引擎优化&#xff08;SEO&#xff09;技术框架概览。抖音SEO矩阵系统旨在提升视频的在线可见度和搜索排名。 一、系统概观 抖音SEO系统旨在增强视频内容的在线可见性及搜索排名&#xff0c;通过深入分析用户行为与需求&#xff0c;为内容创作者提供强大的支持。 二、…

51-3 内网信息收集 - 获取RDP密码信息(没有实验成功)

获取常见应用软件凭据 注意: %USERPROFILE% 是环境变量。在使用系统权限时,可以将 %USERPROFILE% 替换为绝对路径,或使用其他用户的令牌进行操作。 获取 RDP 保存的凭据(远程桌面) 为了避免每次连接服务器都进行身份验证,经常使用 RDP 远程桌面连接远程服务器的用户可能…

【js面试题】js的数据结构

面试题&#xff1a;说说你了解的js数据结构 JavaScript中的数据结构是编程的基础&#xff0c;它们帮助我们以高效的方式存储和操作数据。 下面将详细介绍 这些数据结构的来源、概念和应用场景。 数组 Array 来源&#xff1a; 数组是一种线性数据结构&#xff0c;起源于计算…

你可以终止 forEach 吗?

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 理解 forEach JavaScript 的forEach方法是一种流行的数组迭代工具。它为每个数组元素执行一次提供的函数。但是&#xff0c;与传统的for 和 while循环不同&#xff0c;forEa…