JAVA学习小笔记2

来源:互联网 发布:淘宝店铺收藏自动回复 编辑:程序博客网 时间:2024/06/05 04:04

1.final关键字修饰类时,说明其类不能有子类,也就是说该类不能被继承,该类的成员变量在这里将不起作用。
2.final关键字修饰方法时,说明该方法不能被重写,因为类都不能被继承了,方法就更不能重写了。
3.类里可以含有final关键字修饰的方法。
4.在java里,抽象类最少要含有一个抽象方法,让它的子类去实现这个抽象方法,抽象类里也可以定义一些方法。
5.抽象类是不能实例化,只能去实现所有的抽象方法,否则就只能还是一个抽象类。
6.继承了抽象类就必须去实现该抽象类的抽象方法。
  如果抽象类的子类没有实现父类的抽象方法,就必须为抽象类。
  抽象类和普通继承类一样,都必须是单继承,或者是多层继承。
7.接口里的成员变量默认为public static final类型的。
8.接口不能声明为final的,因为final类型的必须要实现。接口好比一个规定,接口只定义了形式,没有具体定义操作。
9.接口遵循类的定义原则,接口也同样可以继承。但(类不能多继承,可以多层继承)接口既可以多层继承,也可以多继承。
10.在定义接口的时候,接口里的方法是没有方法体的。接口里定义的方法需要在其子类去实现。接口的变量默认被修饰为public static final类型
11.接口里的方法默认被修饰为public ,abstract类型。

异常处理
1.在try语句中放可能出现异常的代码;在catch语句中需要给出一个异常的类型和该类型的引用,并在catch语句中放当出现异常类型时需要执行的代码
2.try-catch语句中的catch语句可以不只是一个,可以存在多个catch语句来定义可能发生的多个异常。当处理任何一个异常时,将不再执行其他catch语句。当对程序使用多个catch语句进行异常处理的时候,要将范围相对小的异常放在前面,将范围相对大的异常放在后面.
3.finally语句中放肯定会被执行的语句.
4.当不存在catch语句时,finally语句必须存在并且紧跟在try语句后面。在try语句和catch语句间不能存在任何语句,同样在catch语句和finally语句之间也不能存在任何语句。
5.异常分为:捕获异常和未捕获异常。所有的异常类都是继承Throwable类。Throwable类继承于Object类。Throwable类有两个直接子类,Error类和Exception类。在Exception类中又有一个RuntimeException类。在Exception类中的直接和间接子类中除去RuntimeException类的直接和间接子类,都是捕获异常。捕获异常就是必须处理的异常,捕获异常通常是由外部因素造成的,不是由程序造成的。
6.如果语句中不可能出现捕获异常,但是程序中仍然对该语句进行捕获异常处理,这样该程序运行时是会发生错误的。
7.未捕获异常包括Error类以及它的直接子类和间接子类和RuntimeException类,以及它的直接子类和间接子类。
8.Error类以及它的子类通常是由硬件运行错误所导致的错误。RuntimeException类以及它的子类通常是程序运行时引起的异常。
9.抛出异常:当一个程序段发生异常时,如果自己不能够进行异常处理,就可以抛出异常给上一层。如果上一层也不能解决就可以一直向上抛出异常,直到抛出给main方法。如果仍然不能解决,就会中断程序,将异常显示出来。
10.throws 语句是在方法的声明中使用来抛出异常,而throw语句是在方法体内使用来抛出异常。
11.创建自定义异常类需要继承Exception类,在自定义的异常类中通常具有一个无参构造器和一个带有字符串参数的有参构造器。
12.在Exception类中定义了很多方法,其中使用printStackTrace方法可以显示异常调用栈的信息,使用toString方法可以得到异常对象的字符串表示,使用getMessage方法可以得到异常对象中携带的出错信息。在自定义的异常类中因为继承了Exception类,所以同时拥有这些方法。

内部类(非静态内部类,局部内部类,静态内部类,匿名内部类)

多线程
1.定义线程有两种方法:一种是继承Thread类,一种是实现Runnable接口。在Thread类中有一个run方法,在定义的线程中需要重写这个方法。在重写的run方法中,可以定义该线程所要执行的语句。当线程启动时,run方法中的程序就成为一条独立的执行线程。在Runnable接口中具有一个抽象的run方法,在实现Runnable接口时,需要实现该run方法。
2.线程只能被启动一次,也就是只能调用一次start方法。当多次启动线程,也就是多次调用start方法,就会发生异常。
3.在同时运行多个线程时,运行结果不是唯一的,因为有很多不确定的因素。首先先执行哪一个线程就是不确定的,线程间交替也是不确定的。但是确定的是每一个线程都将启动,每个线程都将结束。
4.线程有五种状态(新建状态,准备状态,运行状态,等待/阻塞状态,死亡状态),处于死亡状态的线程并不是不能再被使用,只是将被作为普通的类来使用。
5.线程调度的方法包括 睡眠方法,设置优先级,让步方法等。
6.当线程处于运行状态时,调用sleep睡眠方法将使线程从运行状态进入等待/阻塞状态,从而使程序停止运行。sleep睡眠方法是具有一个时间参数的,当经过这么长的时间后,线程将进入准备状态,等待系统的调度。要想让某一个线程进入睡眠状态,并不是让该线程调用sleep方法,而只是让该线程执行sleep方法。sleep方法是可能发生捕获异常的,所以在使用sleep方法时必须进行异常处理。sleep方法只是给线程一个调度的建议,是否调度成功是不能确定的。
7.Java中的优先级是采用从1到10来表示的,数字越大表示优先级越高。如果没有为线程设置优先级,则线程的优先级为5,这也是线程的默认值。但是对于子线程来说,它的优先级和其父线程优先级是相同的。优先级是调用setPriority方法来设置。
8.Java中具有两种线程让步方法。yield让步方法是让线程让出当前CPU,而将CPU让给哪一个线程是不确定的,由系统来选择。使用yield让步方法的线程将从运行状态进入到准备状态。yield让步操作是可能不成功的。因为在线程中使用yield方法,使该线程进入准备状态。但是系统是有可能再次选择该线程,使该线程进入运行状态。
9.使用join让步方法,可以将当前线程的CPU资源让步给指定的线程。join让步方法的语法格式有:
   public final void join()throws InterruptedException;
   public final void join(long mills)throws InterruptedException;
   public final void join(long mills,int nanos)throws InterruptedException;
   没有参数表示指定的线程执行完成后再执行其他线程,参数表示在参数的时间内执行让步给的指定线程。join让步方法也是可能发生捕获异常的,所以在使用时要进行异常处理。
  

原创粉丝点击