一文简述JAVA内部类和异常
内部类和异常
内部类
在一个类的内部定义的一个类,例如,A类中定义了一个B类,则B类相对于A类就是内部类,而A类相对于B类就是外部类
- 成员内部类
- 静态内部类
- 局部内部类
- 匿名内部类
成员内部类
public class outer {
private int ID;
public void out(){
System.out.println("外部类方法");
}
public class inner{
public void in(){
System.out.println("内部类方法");
}
public void getId(){
System.out.println(ID); //内部类可以获得外部类的私有属性,但是外部类使用内部类要借助内部类的对象
}
}
}
这就是一个类中定义一个内部类,可以通过实例化这个外部类来实例化内部类
outer o = new outer();
outer.inner o2 = o.new inner();
o2.in();
o2.getId();
静态内部类
上述inner类的定义中直接改为 public static inner即为静态内部类,静态内部类无法访问外部非静态属性(static会先加载)
一个java类中可以有多个class类,但是这个public class之外不能再写public class
public void method(){
class inner1{
//局部内部类
public void in(){
}
}
}
匿名内部类(甚至匿名内部接口)
public class internalClass {
public static void main(String[] args) {
outer o = new outer();
outer.inner o2 = o.new inner();
o2.in();
new Apple().show();
UserService use = new UserService(){
@Override
public void hello(){
System.out.println("hello");
}
};
}
}
class Apple{
public void show(){
System.out.println("1");
}
}
interface UserService{
void hello();
}
这些都是非常见的用法,记录下来,这样用方便在于可以直接调用匿名内部类的方法
异常
异常和中断等具体将会写在”操作系统部分“
一般需要掌握以下三种类型的异常:
- 检查型异常:最具代表性的是用户错误或问题引起的异常,例如打开一个不存在的文件等
- 运行时异常:该类异常可能会在编译时被忽略
- 错误ERROR:错误不是异常,是脱离程序员控制的问题,例如:栈溢出等等
java.lang.Throwable为所有异常的超类
异常总的分为两大类:错误Error和异常Exception
Error类对象由JVM生成并抛出,大多数错误与代码编写者执行的操作无关。当运行错误时,JVM不再有继续操作所需要的内存资源,将会发生OutOfMemoryError,这些异常发生时,JVM一般会选择终止线程;
Error是程序无法控制和处理的,而Exception通常情况下是可以被程序处理的
捕获和抛出异常
简单地说,异常总是先被抛出,后被捕捉的。
异常处理5个关键字:try, catch, finally, throw, throws
int a = 1;
int b = 0;
//try 监控区域
try{
System.out.println(a/b);
}catch (ArithmeticException e ){ //捕获异常,若栈溢出的话,该类异常捕获不到,类型不同
System.out.println("发生异常,变量b不能为0");
}finally { //一般处理善后工作
System.exit(0);
}
//finally可以不要,但是在IO中,有些资源需要关闭,一般可以放在finally中处理
以上为捕获异常的一个例子,若ArithmeticException e改为Throwable e,则均可被捕获。可写多个catch,相当于多个if进行判断,catch中所写的异常类型要从小到大来捕获,否则会报错
选中sout(a/b); IDEA中 ctrl+alt+T 可自动补写 try catch finally等
try {
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace(); //打印错误的栈信息
} finally {
}
以上为IDEA自动补写部分
主动抛出异常,用到throw,一般在方法中使用
public static void main(String[] args) {
int a = 1;
int b = 0;
new exceptiondemo2().test(1,0);
}
public void test(int a,int b){
if(b==0){
throw new ArithmeticException();
}
}
方法上主动抛出异常,则用throws
public void test(int a,int b)throws ArithmeticException{
}
自定义异常类可写一个类继承于Exception,可重写打印信息方法.toString
public void doA(int a) throws Exception1,Exception3{......}
throws E1,E2,E3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常E1,E2,E3可能是该方法产生的。throws只是告知该方法可能会产生的异常,而throw则会在具体语句抛出异常
void doA(int a) throws Exception1,Exception2,Exception3{
try{
......
}catch(Exception1 e){
throw e;
}catch(Exception2 e){
System.out.println("出错了!");
}
if(a!=b)
throw new Exception3("自定义异常");
}
该段共可能出现3种异常,E1出现时,先catch后throw,而E2出现时只进行了捕获,后续没有抛出E2,if为自定义的判断。
throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
以上仅为内部类和异常的知识总结,不够详细,未涉及的部分可能会在未来补充。
一文简述JAVA内部类和异常的更多相关文章
- java内部类和异常类的概念
1.内部类的外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类中的 方法,内部类中不可以声明类的变量和方法,外嵌的类体可以用内部类声明对象,作为外嵌类的成员.内部类仅供他的外嵌类使用. ...
- 一文简述Java IO
Java IO 本文记录了在学习Java IO过程中的知识点,用于复习和快速查阅,不够详细的部分可能会在后续补充. 什么是流 流:内存与存储设备(外存)之间传输数据的通道 IO:输入流输出流(如rea ...
- 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing ...
- java.util.ConcurrentModificationException异常分析
Java在操作ArrayList.HashMap.TreeMap等容器类时,遇到了java.util.ConcurrentModificationException异常.以ArrayList为例,如下 ...
- Core Java 总结(异常类问题)
所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 下面的代码输出结果是多少?为什么?并由 ...
- 关于java中的异常问题 1
1.首先参考一下关于java异常处理方面的知识 查看博客http://lavasoft.blog.51cto.com/62575/18920/ 这里介绍的很好,下面从中学习到一些东西,摘抄如下: 1. ...
- Java基础之异常
1.异常的概念 异常:程序在运行时出现的不正常情况,也可以说是出现的问题: Java中的异常:出现的不正常的问题也是一类事物,这类事物有一些共性的东西,比如有名称,有产生的原因等,将这些共性的部分抽取 ...
- Java学习笔记--异常描述
异常描述 1.简介 为了全面了解"异常"的概念,先来分析一个实例.假定要编写一个Java程序,该程序读取用户输入的一行文本,并在终端显示该文本.这里是一个演示Java语言I/O功能 ...
- java中的异常类型以及区别????
一.引言 根据JDK的文档我们能够找到异常所在的包:java.lang.Throwable中,Throwable是所有异常类的根类,error是错误,在java.lang.error中,而Except ...
随机推荐
- 1月加密货币交易所访问量破3亿!NGK生态星空计划、NGK生态所带来双重利好!
据最新数据显示,2021年一月份,加密货币交易所网站的访问量急剧上升.约有3.44亿访问者涌入了加密货币交易所,超过2020年12月的1.96亿访问者总数,创2018年1月以来新高. 加密货币交易所网 ...
- std::vector与std::list效能对比(基于c++11)
测试对象类型不同,数量级不同时,表现具有差异: 测试数据对象为std::function时: test: times(1000)vector push_back time 469 usvector e ...
- .net core 和 WPF 开发升讯威在线客服系统:怎样实现拔网线也不丢消息的高可靠通信(附视频)
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...
- 手把手教你Spring Boot整合Mybatis Plus 代码生成器
一.在pom.xml中添加所需依赖 <!-- MyBatis-Plus代码生成器--> <dependency> <groupId>com.baomidou< ...
- 微信小程序:添加全局的正在加载中图标效果
在发送请求的时候,显示一个正在加载中的小图标.在加载下一页的时候也显示正在加载中.同时数据请求回来了,把加载中进行关闭. 开发----API-----界面 在哪里添加这两段代码会比较方便呢?一个项目有 ...
- Js和JQuery基础
1.JavaScript的组成 CMAScript (核心):规定了JS的语法和基本对象 DOM 文档对象模型:处理网页内容的方法和接口 BOM 浏览器对象模型:与浏览器交互的方法和接口 2.Java ...
- MySQL连接中出现的问题
异常: Establishing SSL connection without server's identityverification is not recommended. According ...
- 第28天学习打卡(Date和Calendar类 基本类型的包装类 集合 增强for循环 )
Date和Calendar类 简介 日期和日历类,用于操作日期相关信息. 构造方法 Date(): 构造一个日期对象,当前系统时间,精确到毫秒. Date(long): 构造一个日期对象,时间为自&q ...
- 完全基于node的web应用
完全基于node的web应用 node js web fs fs文件路径 事实上通常"正确的方式"一般都不简单. 用例 模块 基本http服务器 基于事件驱动回调 模块化serve ...
- Python3.x 基础练习题100例(61-70)
练习61: 题目: 打印出杨辉三角形. 程序: if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in ...