1、包装器
Java中的基本数据类型不是对象型(引用类型)。但是在程序中有时需要对对象而不是基本数据类 型进行操作。因此,java里提供了一种叫做包装类(wrapper),它能够把基本数据类型包装成对象类型。但是数组对象没有类。
基本数据类型及包装类型的对应关系:
boolean Boolean
byte Byte
char Character
double Double
float Float
int Integer
long Long
short Short
2、装箱和拆箱
自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象。自动装箱与 拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单 直接。
public class Ig1 {
public static void main(String[] args) {
int a = 30;
Integer b = 20;//自动装箱
Integer n = Integer.valueOf("30");
System.out.println(b.intValue());
//拆箱操作
int c = n;
int cc = n.intValue();
System.out.println(cc);
System.out.println(c);
//Integer valueOf(int i):返回一个表示指定的 int 值的 Integer 实例。
//Integer valueOf(String s):返回保存指定的 String 的值的 Integer 对象。
3、异常概念
异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导 致的。在Java等面向对象的编程语言中异常属于对象。
最开始大家都将程序设计导致的错误(Error)不属于异常(Exception)。 但是一般都将Error作为异常的一种,所以异常一般分两类,Error与Exception。
异常类型 说明
Exception 异常层次结构的根类
RuntimeException 运行时异常,多数 java.lang 异常的根类
ArithmeticException 算术谱误异常,如以零做除数
ArraylndexOutOfBoundException 数组大小小于或大于实际的数组大小
NullPointerException 尝试访问 null 对象成员,空指针异常
ClassNotFoundException 不能加载所需的类
NumberF ormatException 数字转化格式异常,比如字符串到 float 型数字的转换无效
IOException I/O 异常的根类
FileNotF oundException 找不到文件
EOFException 文件结束
InterruptedException 线程中断
IllegalArgumentException 方法接收到非法参数
ClassCastException 类型转换异常
SQLException 操作数据库异常
4、异常处理
try块:感觉有异常的语句代码块
catch块:是有异常时要执行的代码块
finally:有没有异常必须要执行的块代码
throw:用于try catch块代码中,用来抛出一个异常
throws:用方法声明 处,抛出多个异常
finally 在异常处理时,代表最终有没有异常,有没有return continue break 都要执行代码段
public class Try1 {
public static void main(String[] args) {
System.out.println("main:"+testReturn1()); //2 //3
}
public static int testReturn1() {
int i = 1;
try {
i++;
System.out.println("try:"+i);
return i; //2
//不写return时最终上面结果为3
}catch (Exception e) {
i++;
System.out.println("catch:"+i);
}finally {
i++; //3
System.out.println("finally:"+i);
//执行这一步但最终值不输出这个
}
return i; //2
}
}
import java.util.InputMismatchException;
import java.util.Scanner;
public class Try2 {
public static void main(String[] args) {
/* try{
Scanner sc = new Scanner(System.in);
System.out.println("\n请输入数字a");
int a = sc.nextInt();
System.out.println("\n请输入数字b");
int b = sc.nextInt();
System.out.printf("%d / %d = %d %n", a, b, a/b);
}catch(Exception e){
System.out.println("\n输入有误,必须都输入数字,且第二个b不能输入0");
}
System.out.println("谢谢使用");
*/ Scanner sc = new Scanner(System.in);
while (true){
try {
System.out.println("请输入数字a");
int a = sc.nextInt();
System.out.println("请输入数字b");
int b = sc.nextInt();
System.out.printf("%d / %d = %d %n", a, b, a / b);
break;
}catch (ArithmeticException e){
System.out.println("第二个不能输入0");
}catch (InputMismatchException e){
System.out.println("输入有误,必须输入数字");
if(sc.hasNext()) sc.next();
}catch (Exception e){
System.out.println("\n系统未知异常");
}
continue;
}
System.out.println("程序结束!");
}
}
5、try - with - -resources语句
try-with-resources自JDK7引入,在JDK9中进行了改进,使得用户可以更加方便、简洁的使用try-with-resources。
try-with-resources 是 JDK 7 中一个新的异常处理机制,它能够很容易地关闭在 try-catch 语句块中使用的资源。所谓的资源(resource)是指在程序完成后,必须关闭的对象。try-with-resources 语句确保了每个资源在语句结束时关闭。所有实现了 java.lang.AutoCloseable 接口(其中,它包括实现了 java.io.Closeable 的所有对象),可以使用作为资源。
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo {
public static void main(String[] args) {
String str = "hello 中文效果 ".concat(String.format("%tF %<tT",System.currentTimeMillis()) );
System.out.println(str);
//java 1.7 try - with - -resources
String f = "user.text";
try (FileWriter writer = new FileWriter(f)) {
writer.write(str);
} catch (IOException e) {
e.printStackTrace();
}
//传统处理异常代码的实现
FileWriter writer = null;
try {
writer = new FileWriter(f);
writer.write(str);
}catch (Exception e) {
e.printStackTrace();
}finally {
try {
writer.close();
}catch (IOException e){
throw new RuntimeException(e);
}
}
}
}
5、Finalize()方法
垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点:
- 当对象不再被程序所使用的时候,垃圾回收器将会将其回收
- 垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他可以 尽快回收资源(System.gc()和Runtime.getRuntime().gc())
- 垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize()方法
- GC主要针对堆内存
finalize() 是Object里面的一个方法,当一个堆空间中的对象没有被栈空间变量指向的时候,这 个对象会等待被java回收
final、finally与finalize的区别
简单区别:
final用于声明属性,方法和类,分别表示属性不可改变(常量),方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集 时的其他资源回收,例如关闭文件等。