Java 7 day--内部类、垃圾回收机制、异常、常用类(Date类、Calendar类、Math类、枚举类)

本文详细介绍了Java中的内部类,包括它们的定义、特点和分类。接着讨论了垃圾回收机制的工作原理,强调了其在内存管理中的重要性。异常处理部分解释了什么是异常,以及如何通过try-catch-finally进行异常处理。最后,概述了Java中常用的类,如包装类、String类、时间处理相关类(Date和Calendar)以及Math和枚举类的使用。
摘要由CSDN通过智能技术生成

一、内部类

什么是内部类:
把一个类定义在另一个类的内部称为内部类。
内部类的使用:
创建内部类的时候,需要在内部类前面添加外部类来进行修饰。
InnerClassDemo为内部类
TestInnerClass:

InnerClassDemo.InnerClass inner=new InnerClassDemo().new InnerClass();        

内部类特点:
1.内部类可以方便的访问外部类的私有属性,外部类不可访问内部类的私有属性。
2.内部类中不能定义静态属性。
3.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的,如果要访问外部类的,需添加 外部类名.this.属性。

内部类的分类:
1.匿名内部类: 只使用一次的类,可以不考虑创建具体的类,采用new interface()(添加未实现的类)。
2.静态内部类:
在内部类中可以定义静态内部类,使用static关键字修饰。
使用规则:外部类.内部类 类的引用名称=new 外部类.内部类();
3.方法内部类:
方法内部类是指:将内部类定义在外部类的方法中。

注意事项:
(1)方法内部类不能在外部类的方法以外的地方使用,所以方法内部类不能使用访问控制符和static修饰符。
(2)方法内部类如果想使用方法的参数,那么参数前必须加上final关键字。

二、垃圾回收机制

对象空间的分配:
使用new关键字创建对象。
-对象空间的释放:
传统的C/C++语言,需要程序员负责回收已分配内存。显式回收垃圾回收的缺点:程序忘记及时回收,从而导致内存泄漏,降低系统性能;程序错误回收程序核心类库的内存,导致系统崩溃。
-Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,成为垃圾回收机制。

可以提高编程效率。
保护程序的完整性。
其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。

垃圾回收机制关键点
1.垃圾回收机制只回收JVM堆里的对象空间。
2.对其他物理连接,比如数据库连接、输入流输出流、Socket连接为力。
3.现在的JVM有多种垃圾回收实现算法,表现各异。
4.垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。
5.可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。
6.程序员可以通过System.gc()或者Runtime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收已然不确定。
7.垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让另一个新的引用变量重新引用该对象,则会重新激活对象)。
8.永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

三、异常

什么是异常: 在程序运行过程中,出现的不正常情况叫做异常。
注意:
1.相同的代码在运行的时候,根据输入的参数或者操作的不同,有可能会发生异常。
2.如需解决代码中出现的异常,推荐使用异常机制来处理程序运行过程中出现的问题。
3.程序在运行过程中如果出现了问题,会导致后面的代码无法正常执行,而使用异常机制之后,可以对异常情况进行处理,同时后续的代码会继续执行,不会中断整个程序。
4.在异常的处理过程中,不要只是简单的输出错误,尽可能详细的输出异常。
e.printStackTrace():打印异常的堆栈信息。

什么是异常处理
Java编程语言使用异常处理机制为程序提供了错误处理的能力。
程序中预先设置好对付异常的处理方法–>程序运行–>异常–>对异常进行处理–>处理完毕,程序继续运行

Java中如何进行异常处理

1.捕获异常

try-catch
try{代码逻辑} catch(Exception e) {异常处理}
try{代码逻辑} catch(具体的异常Exception e) {异常处理} catch(具体的异常):更丰富的处理。
注意: 使用多重的catch的时候一定注意相关异常的顺序,将子类放在最前面的catch,父类放在后面的catch。

执行过程中可能存在的情况:
(1)正常执行,只执行try中代码。
(2)遇到异常情况,会处理try中异常代码之前的逻辑,之后执行catch中的代码。
(3)使用多重catch时,会遇到异常子类不匹配的情况,建议在catch最后将所有异常父类写上。

try-catch-finally
是否发生异常都执行,不执行的唯一情况是catch块中有异常。

finally包含哪些处理逻辑?
1.IO流的关闭操作一般设置在finally中。
2.数据库的连接关闭操作设置在finally中。

总结:
try语句在返回前,将其他所有的换作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:
情况一:如果finally中有return语句,则会将try中的return语句“覆盖”掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:
1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。
2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

2.声明异常 throws
异常情况出现的时候,可以使用try-catch-finally的方式对一场进行处理,也可以将异常向外抛出,由外部进行处理。
1.在方法调用过程中,可以存在N个方法之间的调用,如每个方法中都包含异常情况,那么需要在每个方法中都进行try-catch,或者在方法最外层使用throws方法,对所有方法出现的异常集中处理。
2.如何判断使用throws还是try-catch?
判断整个调用的过程中,外层的调用方法是否有对异常的处理,有的话直接用throws。

3.抛出异常 throw

throw new Exception("wrong");

4.自定义异常
java的api提供了丰富的异常类,但是有时不满足我们的需求,则需要自定义异常。

步骤:
1.继承Exception类;
2.自定义实现构造方法;
3.需要使用的时候,使用throw new 自定义异常的名称。

常见的异常类型
Exception异常层次结构的父类
ArithmeticException算术错误,如以零作除数
ArrayIndexOutOfBoundsException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
IllegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException数字格式转换异常,如把“abc”转换成数字

四、常用类

包装类

包装类是基本类型封装到一个类中。
包含属性和方法,方便对象操作。
包装类位于java.lang包中。
在这里插入图片描述包装类和基本类型
1.基本数据类型转换为包装类(装箱)

Integer i=new Integer(10);Integer i=new Integer(10);
Integer i=Integer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值