工 投标做哪个网站好,最专业的网站建设哪家好,wordpress 评论跳转,泗阳网站建设公司final
被final修饰的类不可以被继承。被final修改的方法不可以被重写。被final修改的方法#xff0c;jvm会尝试内联#xff0c;以提高运行效率。被final修改的变量不可变#xff0c;如果修改的是引用#xff0c;那么引用不可变#xff0c;引用指向的对象内容可变。被fin…final
被final修饰的类不可以被继承。被final修改的方法不可以被重写。被final修改的方法jvm会尝试内联以提高运行效率。被final修改的变量不可变如果修改的是引用那么引用不可变引用指向的对象内容可变。被final修饰的常量在编译期间会存入常量池中。
static
静态修饰符。 可修饰变量、方法、代码块多用于初始化操作、内部类、导包。静态变量、静态方法、静态常量统称为类的静态成员。静态成员归整个类所有不属于某个单一的对象而是被类的所有实例对象共享。局部变量不能被声明为静态变量。静态方法不能访问非静态成员。静态方法中不能使用this和super关键字。静态方法不能被重写但可以被继承。抽象方法不能使用static进行修饰。
abstract
抽象修饰符只能用来修饰类和方法。不能修饰私有方法、静态方法、final方法和final类。抽象类中不一定包含抽象方法但有抽象方法的类必须是抽象类。抽象类中可以有0~n个抽象方法也可以有0~n个具体方法。抽象类不能被实例化一般是由子类进行实例化完成相关操作声明抽象类的目的主要是为了对该类进行扩展。抽象方法只有方法的声明但没有方法体。继承抽象类时必须重写父类中所有的抽象方法除非自己也是抽象类。面向抽象编程使得调用者只须关心抽象方法的定义而不必关心子类的具体实现。
异常
运行时异常RuntimeExceptionRuntimeException及其子类编译器不会检查属于不可预知的异常。如ClassCastExceptionNullPointerException。被检查的异常CheckedException:Exception本身以及Exception子类除运行时异常外都属于被检查的异常。可以理解为编译器会检查的异常那么通过throw进行申明抛出要么通过try-catch捕获处理。如IOException。错误ErrorError类及其子类当资源不足、约束失败、或是其他程序无法继续运行的条件发生时就会产生错误程序本省无法修复这些错误。如OutOfMemoryErroThreadDeat。
try-catch-finally
try 块负责监控可能出现异常的代码。catch 块负责捕获可能出现的异常并进行处理。finally 块负责清理各种资源不管是否出现异常都会执行。其中 try 块是必须的catch 和 finally 至少存在一个标准异常处理流程。
finally 不管有没有异常finally模块中的代码都会执行。当try和catch中有return时finally任然会执行。return的值是在finally执行前确定的。finally中最好不要包含return否则程序会提前退出返回值不是try或catch中保存的返回值。
序列化和反序列化
序列化将结构数据或对象转化成二进制字节流的过程便于网络传输或存储。反序列化将在序列化过程中所生成的二进制字节流转换成数据结构或者对象的过程。
serialVersionUID
用于标识序列化类版本的字段当一个类实现了Serializable接口说明这个类时可以被序列化的编译器会自动生成一个serialVersionUID字段表示该类的版本号。当反序列化时jvm会根据serialVersionUID进行版本检查如果被反序列化数据的版本号跟当前对象的serialVersionUID不一致则会抛出InvalidClassException防止反序列化操作成功。serialVersionUID 允许不同版本的类在一定程度上兼容。当反序列化旧版本的对象时如果新版本的类中删除了某些字段或方法Java 虚拟机会忽略这些字段或方法而不会引发异常。如果需要序列化对象建议手动显示的定义serialVersionUID。
transient 将不需要序列化的属性前添加关键字transient序列化对象的时候这个属性就不会被序列化。
反射机制
概念在运行时能够动态获取类信息和动态调用对象的机制。程序运行时可以获取任意一个对象所属的类Class可以创建任意一个类的对象Constructor可以获取任意一个类的属性和方法可以调用任意一个对象的属性和方法。 获取类方式Class.forName(类路径)、类名.class、对象名.getClass()、基本类型的包装类.type。优点提高程序的灵活性。确定反射需要解析字节码性能较低相对不安全破坏了封装性因为反射可以获取对象的私有属性和方法。
浅拷贝 新对象和旧对象的成员变量的值一致引用变量指向的也是同一个对象。
深拷贝 新对象和旧对象的成员变量的值一致新对象中的引用变量指向的对象也是被复制了新对象。
程序、进程、线程
程序是含有指令和数据的文件被存储在磁盘或其他的数据存储设备中也就是说程序是静态的代码。进程是程序的一次执行过程是系统运行程序的基本单位因此进程是动态的。线程与进程相似但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源所以系统在产生一个线程或是在各个线程之间作切换工作时负担要比进程小得多也正因为如此线程也被称为轻量级进程。
Object的常用方法
clone保护方法实现对象的浅复制只有实现了 Cloneable 接口才可以调用该方法否则抛出CloneNotSupportedException 异常深拷贝也需要实现 Cloneable同时其成员变量为引用类型的也需要实现 Cloneable然后重写 clone 方法。 finalize该方法和垃圾收集器有关系判断一个对象是否可以被回收的最后一步就是判断是否重写了此方法。equals一般 equals 和 是不一样的但是在 Object 中两者是一样的。子类一般都要重写这个方法。hashCode该方法用于哈希查找重写了 equals 方法一般都要重写 hashCode 方法这个方法在一些具有哈希功能的 Collection 中用到一般必须满足 obj1.equals(obj2)true 。可以推出 obj1.hashCode()obj2.hashCode() 但是hashCode 相等不一定就满足 equals。不过为了提高效率应该尽量使上面两个条件接近等价。wait配合 synchronized 使用wait 方法就是使当前线程等待该对象的锁当前线程必须是该对象的拥有者也就是具有该对象的锁。调用该方法后当前线程进入睡眠状态直到被唤醒、被中断、超时。notify配合 synchronized 使用该方法唤醒在该对象上等待队列中的某个线程同步队列中的线程是指抢占 CPU 的线程等待队列中的线程是指等待唤醒的线程。notifyAll配合 synchronized 使用该方法唤醒在该对象上等待队列中的所有线程。