垃圾回收机制(GC): Garbage Collection
垃圾:没有引用的对象,就是垃圾.
java程序的多个部分(方法、变量、对象)驻留在内存中以下两个位置:栈和堆。
*实例变量、数组和对象-------堆上。
*局部变量和方法-------------栈上。
java程序中,new 出来的东西都是驻留在堆(heap)内,栈(stack)里空间调用完都会自动释放,而堆里不是,
像C,C++都要人为的去主动释放,而JAVA会由JVM来处理,JVM何时去释放堆内存,只跟内存有关,
它在释放的时候会调用finalize()这个方法去释放,如果我们人为调用这个方法是无效的。
面试:finalize,final ,finally这三个关键字有何区别,分别用在什么地方?
我们在JAVA里是否可以自己去释放内存,怎么去释放?
1.Runtime.getRuntime().gc();
2.System.gc();
arraycopy()
System.out.println();
System.exit(0);
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
String s = sc.next();
一个类没有构造函数,怎么去调用该类中非静态方法???
该类中肯定有一个方法得到该类的对象 静态的方法,返回的是该类的对象(单例模式)
Runtime
Calendar
异常:Exception(硬件故障,资源耗尽等)
open file
read file
close file
Object------->Throwable--------->Exception/Error(系统级的错误eg:栈溢出,JVM内存耗尽)
编译时错误:语法错误
运行时错误:语法没错,有异常抛出
Exception的子类有:
ArithmeticException========>除数为0异常
NullPointerException=========>空指针的引用异常
ArrayIndexOutOfBoundsException========>数组越界异常
RuntimeException========>不需要捕捉和声明,JVM会捕捉并打印出栈轨迹(e.printStackTrace();)
ClassNotFoundException========>找不到.class 文件
NumberFormatException=======>int i=Integer.parseInt("12"); int i=12a;
IlleageArgumentException========>String f(String s) f("hello");
RuntimeException的子类:
ArithmeticException
NullPointerException
ClassCastException
IllegalArgumentException
IndexOutOfBoundsException
try:把可能出现异常的程序防在try块中. try{ xxxx }
throws:声明异常,可以不对其进行捕捉,让使用者去捕捉异常.
1、在try{}catch{}finally{}之间不能有其他任何代码块.
2、try{}不能单独使用。可以和catch{}匹配使用,也可以和finally{}匹配使用
3、try{}------没有异常---------fianlly{}
try{}------有异常-------catch{}--------finally{}
try{}-------有/没有------------finally{}
如何自定义异常?
垃圾:没有引用的对象,就是垃圾.
java程序的多个部分(方法、变量、对象)驻留在内存中以下两个位置:栈和堆。
*实例变量、数组和对象-------堆上。
*局部变量和方法-------------栈上。
java程序中,new 出来的东西都是驻留在堆(heap)内,栈(stack)里空间调用完都会自动释放,而堆里不是,
像C,C++都要人为的去主动释放,而JAVA会由JVM来处理,JVM何时去释放堆内存,只跟内存有关,
它在释放的时候会调用finalize()这个方法去释放,如果我们人为调用这个方法是无效的。
面试:finalize,final ,finally这三个关键字有何区别,分别用在什么地方?
我们在JAVA里是否可以自己去释放内存,怎么去释放?
1.Runtime.getRuntime().gc();
2.System.gc();
arraycopy()
System.out.println();
System.exit(0);
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
String s = sc.next();
一个类没有构造函数,怎么去调用该类中非静态方法???
该类中肯定有一个方法得到该类的对象 静态的方法,返回的是该类的对象(单例模式)
Runtime
Calendar
异常:Exception(硬件故障,资源耗尽等)
open file
read file
close file
Object------->Throwable--------->Exception/Error(系统级的错误eg:栈溢出,JVM内存耗尽)
编译时错误:语法错误
运行时错误:语法没错,有异常抛出
Exception的子类有:
ArithmeticException========>除数为0异常
NullPointerException=========>空指针的引用异常
ArrayIndexOutOfBoundsException========>数组越界异常
RuntimeException========>不需要捕捉和声明,JVM会捕捉并打印出栈轨迹(e.printStackTrace();)
ClassNotFoundException========>找不到.class 文件
NumberFormatException=======>int i=Integer.parseInt("12"); int i=12a;
IlleageArgumentException========>String f(String s) f("hello");
RuntimeException的子类:
ArithmeticException
NullPointerException
ClassCastException
IllegalArgumentException
IndexOutOfBoundsException
java中抛出一个异常.一个异常对象被抛出.程序的执行被终止,接着,由catch块来捕捉异常.
异常的5大关键字:try:把可能出现异常的程序防在try块中. try{ xxxx }
catch:捕捉异常,并进行合理的处理.
1多个catch时,注意使用顺序(先子类后父类)2 Exception是一个万能捕捉器3 try-catch的嵌套使用
throw:人为的抛出异常,如果不对其进行捕捉或者回避,编译不通过. RuntimeException除外throws:声明异常,可以不对其进行捕捉,让使用者去捕捉异常.
finally:绝对能被执行的代码放在finally块中.即使catch{}中有return语句,也会在return语句执行之前执行。
1、在try{}catch{}finally{}之间不能有其他任何代码块.
2、try{}不能单独使用。可以和catch{}匹配使用,也可以和finally{}匹配使用
3、try{}------没有异常---------fianlly{}
try{}------有异常-------catch{}--------finally{}
try{}-------有/没有------------finally{}
如何自定义异常?