1.finally块会被执行无论是否抛出异常; 2.Java一个源程序只能有一个public类存在,且类名与文件名相同。Java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道该从哪里执行。 注意,内部类可以是public的,因为内部类是作为外部类的成员存在的。 3.静态成员和静态方法,可以直接通过类名进行调用;其他的成员和方法则需要进行实例化成对象之后,通过对象来调用。 4.
abstract不能与final并列修饰同一个类 对的;abstract类中不应该有private的成员 对的 :abstract类中可以有private 但是不应该有;abstract方法必须在abstract类或接口中 对的 : 若类中方法有abstract修饰的,该类必须abstract修改。接口方法默认public abstract;static方法中能处理非static的属性 错误 :在JVM中static方法在静态区,静态区无法调用非静态区属性。5.灌灌灌灌
java的内存模型 java 内存模型规定了所有的变量都存储在主内存中,但是每个线程会有自己的工作内存,线程的工作内存保存了该线程中使用了的变量(从主内存中拷贝的),线程对变量的操作都必须在工作内存中进行,不同线程之间无法直接访问对方工作内存中的变量,线程间变量值从传递都要经过主内存完成 什么是原子性 一个操作是不可中断的,要么全部执行成功要么全部执行失败,比如银行转账什么是可见性 当多个线程访问同一变量时,一个线程修改了这个变量的值,其他线程就能够立即看到修改的值什么是有序性 程序执行的顺序按照代码的先后顺序执行 int a = 0; //1 int b = 2; //2 像这2句代码1会比2先执行,但是jvm在正真执行时不一定是1在2之前,这里涉及一个概念叫做指令重排,处理器为了提高程序运行效率,可能会对输入代码进行优化,它不保证程序中各个语句的执行先后顺序同代码中的顺序一致,但是它会保证程序最终执行结果和代码顺序执行的结果是一致的。比如上面的代码语句1和语句2谁先执行对最终的程序结果并没有影响,那么就有可能在执行过程中,语句2先执行而语句1后执行。 在指令重排时会考虑指令之间的数据依赖性,比如2依赖了1的数值,那么处理器会保证1在2之前执行。 但是在多线程的情况下,指令重排就会有影响了。volatile到底做了什么 禁止了指令重排保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的不保证原子性(线程不安全)6.java中整型默认的是int,浮点默认的是double.B: double类型的11.1 转成float,是需要强制转换的;C: double类型的0.0 转成int,也是需要强制转换的;D: int转为 封装类型Double,是无法编译的,Double oD = 3.0, 会把double类型的3.0自动装箱为Double,没有问题 7.主要考核了这几个知识点:
静态内部类才可以声明静态方法静态方法不可以使用非静态变量抽象方法不可以有函数体补充:关于内部类的整理,传送门:https://blog.csdn.net/Ureliable/article/details/108945418 8.关于抽象类和接口
一个子类只能继承一个抽象类(虚类),但能实现多个接口;一个抽象类可以有构造方法,接口没有构造方法;一个抽象类中的方法不一定是抽象方法,即其中的方法可以有实现(有方法体),接口中的方法都是抽象方法,不能有方法体,只有声明;一个抽象类可以是public、private、protected、default, 接口只有public;一个抽象类中的方法可以是public、private、protected、default, 接口中的方法只能是public和default。