重写,多态在运行期的表现形式。出现在子父类,实现类与接口中。判定重载有一个规律:“两同两小一大” 两同:方法名和形参列表一致; 两小:抛出的异常和返回值相容于被重写的方法。(一旦返回值是基本数据类型,那重写的方法返回值必须一致或者是Object) 一大:访问修饰符大于等于被重写方法。
1. throw、throws 2. try-catch 3. try-finally 4. try-catch-finally 5. try-with-resource 异常处理结构中只有【try块】是必须的,jdk1.7中增加try-with-resource语法糖 扩充try块的功能允许在try(//添加资源代码){}在代码执行完毕后自动关闭代码,相当于隐藏finally块同时能够起到屏蔽异常的作用。 finally块用于回收无法被JVM处理的物理资源。 eg: 数据库连接、网络连接
* static: 用来创建类方法和类变量。 * final: 用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继 承类重新定义,修饰的变量为常量,是不可修改的。 * abstract: 用来创建抽象类和抽象方法。 * synchronized: 用于多线程的同步。用来给对象和方法或者代码块加锁,各线程互斥访问。 * volatile: 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。 而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 * transient:序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量。
synchronized关键字: 用来给对象、方法或代码块加锁,当它对这些内容进行加锁时,一次只有一个线程可以执行这段代码。
volatile关键字 :修饰变量,会将变量和变量上的新操作通知到其他线程,volatile变量在编译器和运行时中会视为共享变量,变量上的操作不会和其他内存操作一起进入内存指令重排序。
volatile不会对修饰的内容加锁,是相比于synchronized关键字更轻量级的同步机制。
main()函数即主函数,是一个前台线程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后结束,不管有没有完成,后台线程主要用与内存分配等方面。 前台线程和后台线程的区别和联系: 1、后台线程不会阻止进程的终止。属于某个进程的所有前台线程都终止后,该进程就会被终止。所有剩余的后台线程都会停止且不会完成。 2、可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。 3、不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。 4、托管线程池中的线程都是后台线程,使用new Thread方式创建的线程默认都是前台线程。 说明: 应用程序的主线程以及使用Thread构造的线程都默认为前台线程 使用Thread建立的线程默认情况下是前台线程,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。 一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序, 或是定时对某些系统资源进行扫描的程序
1. 使用关键字new实例化一个新对象的时候默认调用的方法。 2. 构造方法完成的主要工作是新创建对象的数据成员赋予初始值。 使用构造方法注意以下几点: 1. 构造方法不能被static、final修饰 2. 构造方法没有返回值也不能使用void 3. 构造方法名称和所属类名必须保持一致 4. 构造方法可以像其他普通方法一样可以被重载 5. 构造方法不能被继承,子类使用父类构造方法需要使用super关键字
static修饰的类成员和this水火不容。
this指当前对象只能在实际方法和构造函数中调用
子类调用父类有参构造方法必须显式初始化
class Base{ public Base(String s){ System.out.print("B"); } } public class Derived extends Base{ public Derived (String s) { System.out.print("D"); } public static void main(String[] args){ new Derived("C"); } }
★★★在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
内部类可以访问外部类的属性,而外部类不能访问内部类的属性