- 被abstract修饰的类是抽象类,抽象类不能被实例化,但可以继承,也可以被继承
- void 是修饰方法的,没有返回值;finnal是修饰常量的;protected是保护的;static是静止的
- try{} catch {} finnal{} try catch 直接处理异常 throw将异常抛给上一级
- Integer类型在-128->127范围内是被缓存了,范围内相同数字内存地址相同(不会创建新对象,直接从缓存中取)
- java关键字都是小写
- 内存泄漏的概念,内存泄漏就是对象引用消失了,对象内存却没有被回收。
- FullGC 是老年代内存空间不足的时候,才会触发的,老年代一般是生命周期较长的对象或者大对象,频繁的 FullGC 不会可能会影响程序性能(因为内存回收需要消耗CPU等资源),但是并不会直接导致内存泄漏。
- JVM奔溃的可能是内存溢出引起的,也可能是其他导致 JVM崩溃的操作,例如设置了错误的JVM参数等。
- 内存异常,最常见的 就是 StackOverFlow 了把,内存溢出,其实内存泄漏的最终结果就是内存溢出。
-
一个.java文件中,可以有多个类,包括内部类和外部类。考虑到内部类的原因,一个.java文件可以中可以有多个public类。
但是对于外部类而言,一个.java文件必须只能有一个public类,同时这个类的类名必须和.java的文件名一致(包括大小写)。
-
在java多线程中实现多线程的方式有两种①extends Thread ②implements Runnable。这两种情况是我们最常见的,还有一种是由第二种变形而来的直接new Runnable(){},我们都知道java的接口是不可以实例化的,但代码中的new Runnable(){xxx}确是实例化了,为什么? 接口和抽象类不可以实例化是对的,这个是java语法规范来的,**而new Runnable(){}其实不是实例化Runnable接口来的,实际上一种内部类的一种简写** 在这里:
①首先构造了一个”implements Runnable “的无名local内部类(方法内的内部类)
②然后构造了这个无名local内部类的一个实例
③然后用Runnable来表示这个无名local内部类的type(OO多态)。 例如上面这段代码编译后你会看到其实是编译了两个类来的,如下:
其中Text2$1就是无名local内部内类,这个也就很好地解释了为什么在main()方法中new Runnable(){xxx}里面的调用main()方法中的变量的时候要用final关键字来修饰
-
四种引用类型
JDK1.2 之前,一个对象只有“已被引用”和"未被引用"两种状态,这将无法描述某些特殊情况下的对象,比如,当内存充足时需要保留,而内存紧张时才需要被抛弃的一类对象。
所以在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱。
一,强引用
Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收 obj = null; //手动置null
只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了<
JAVA理论知识点总结
最新推荐文章于 2024-04-28 13:52:34 发布