java基础查漏补缺day06
1.打断点的形状
- 菱形断点, Java Method Breakpoints–方法
- 眼睛断点, Java Field Breakpoints–字段
- 闪电断点, Exception Breakpoints–异常
2.快捷键alt+鼠标左键跨行选择
3.同一包下不用导包。
不同模块下的包不支持直接调用,需要用到Maven引入依赖。
4.类体里只能写:定义语句和方法。
赋值语句不行。
5.java对象什么时候会被回收
- 在什么情况下回收对象(可达性分析算法):
JVM是通过可达性分析算法判断对象是否存活的,这个算法的基本思想是:通过一系列被称为”GC Roots”的对象作为起点,向下搜索,搜索所走过的所有路径称为对象的引用链,当一个对象通过引用链无法到达“GC Roots”时,说明该对象是不可用的,是可以回收的(不一定回收)。
GC Roots说明:在java中,可作为GC Roots的对象包括以下几种:
java虚拟机栈帧中的对象。
方法区中的静态属性引用的对象
方法区中常量引用的对象
本地方法栈JNI中引用的对象 - 如何回收对象(标记算法判定对象生成还是死亡):
在可达性分析之后,如果判断对象通过引用链无法到达“GC Roots”,则认为该对象是可回收的,但是不保证一定会回收这个对象。对象的回收至少需要经过两次标记过程:
判断对象通过引用链不可达之后,进行第一次标记并且进行一次筛选,筛选的条件是判断对象是否有必要执行finalized()方法。如果对象没有覆盖finalize()方法或者不是虚拟机第一次调用,则判断为没有必要执行finalize()方法。
如果对象有必要执行finalized()方法,则会将该对象放到一个F-Queue队列中,并且虚拟机会自动创建一个低优先级的Finalizer线程执行。“执行”的含义是虚拟机会去触发Finalizer线程的执行,但是不会等待结果的返回。因为如果finalized()方法执行时间较长或者产生死循环的话,将导致F-Queue中的其他对象永远处于等待状态。甚至导致整个回收系统的奔溃。finalized()方法是对象实现逃脱的唯一一次机会。如果对象没有逃脱,则在JVM进行第二次标记之后会回收该对象。 - 方法区的回收
方法去处于永久代中,永久代中的回收主要回收两部分的内容:废弃的常量和无用的类。 - 回收常量:回收常量和回收堆对象是相同的,如果一个常量在在常量池中已经存在,如果在系统中没有一个对象引用常量池中的常量的话,那么这个常量就需要被回收。
- 回收类:回收类的条件比回收常量的苛刻许多:以下三点为必要不充分条件:
该类所有的实例都已经被回收,也就是说java堆中不存在该类的任何实例
加载该类的ClassLoader已经被回收
该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。
原文链接:https://blog.csdn.net/u010805617/article/details/77939899
6.set/get–方法有啥好处
1、灵活性
灵活定义格式化输出和条件写入
2、安全性
只读和只写权限
7.alt+insert–>输入g关联getter and setter方法。
8.8字符大小的来源
首先一个byte是由8个bit组成,它是最小的可寻址单元 ,存储了ASCII所有字符
9.Java成员变量声明时可以不用赋值,而局部变量声明时一定需要赋值
任何变量在C语言中不赋值的话,会是乱码的形式,可能有安全问题。所以java修正了这点,成员变量初始化的是时候会附上默认值。
栈中不会被初始化,堆可以被初始化。
10.构造方法–不可以return 数据,可以只写return.
11.this.的作用
局部变量和成员变量重名就会产生一个问题。
根据java中的就近原则,speak()方法中打印出来的name和age就是上面的“哈哈”和“16”,即使此时外类通过set方法赋值,照样打印出来的是方法中局部变量赋的值。这就是java中的就近原则。
这就引入了this关键字。
this关键字的作用就是用来区分成员变量和局部变量的。