关于finally语句块
1、finally语句块可以直接和try语句块连用 try...finally...
2、try...catch...finally也可以
3、在finally语句中的代码是一定会执行的
finally语句块是一定会执行的,所以通常在程序中为了保证某资源一定会释放,
所以一般在finally语句块中释放资源
final finalize finally 三者区别
final: 1、如果一个类被声明为final,意味着该类不能在派生出新的子类
不能作为父类被继承,因此,一个类不能同时被abstract和final声明;
2、将变量或方法声明为final,可以保证在使用中不被改变,但是只能引用,不能重写;
其初始化可以在两处:一是在定义处
二是在构造函数中
finalize:finalize是方法名,java奇数允许使用finalize()方法在垃圾收集器将对象从内存中清除
出去前做的必要的清理工作
finally:在异常处理是提供finally块来执行任何清除操作,如果抛出一个异常,
那么相匹配的catch子句就会执行,然后控制就会进入finally块
重写的方法不能比被重写的方法抛出更宽泛的异常
class A{
public void m1() throws IOException();
}
class B extends A{
public void m1() throws FileNotFoundException();
}
自定义异常
/*
固定写法:只需要构造两个构造方法就行
自定义无效名字异常
1、编译时异常:直接继承Exception
2、运行时异常:直接继承RuntimeException
*/
public class IllegalNameException extends Exception{//编译时异常
//public class IllegalNameException extends RuntimeException{//运行时异常
public IllegalNameException(){}
public IllegalNameException(String msg){
super(msg);
}
}
数组
数组:
1、数组是一种引用数据类型
2、数组是一种简单的数据结构,线性的结构
3、数组是一个容器,可以用来存储其他元素,数组
是可以存储任意数据类型的元素
4、数组分为一维数组,二维数组,三维数组,多维数组
5、数组长度不可变
总结:
1、JVM分为堆和栈,栈存储了main方法栈帧:里面存放的是地址
堆存放的是对象或数值
2、数组中每个元素都有下标,有索引,从0开始,任何一个数组都有length属性用来获取数组中元素的个数
3、获取数组元素:获取第一个元素:a1[0];获取最后一个元素a1[a1.length-1]
4、数组的优点:查找效率高;缺点:随意的增删元素效率比较低
什么时候使用动态初始化,什么时候使用静态初始化
1、无论是动态初始化还是静态初始化,最终的内存分布都是一样的
2、如果在创建数组的时候,知道数组中应该储存神呢数据,这个时候当然采用静态初始化方式
如果在创建数组的时候,无法预测到数组中存储什么数据,只是先开辟空间,采用动态初始化方式
深入一维数组
c = (Cat)a;
c.move();
}else if(a instanceof Dog){
Dog d = (Dog)a;
d.eat();
}
}
}
}
class Animal{
}
class Dog extends Animal{
public void eat(){
System.out.println("Dog eat");
}
}
class Cat extends Animal{
public void move(){
System.out.println("Cat move");
}
}