java基础查漏补缺day06

java基础查漏补缺day06

  • 1.打断点的形状
  • 2.快捷键alt+鼠标左键跨行选择
  • 3.同一包下不用导包。
  • 4.类体里只能写:定义语句和方法。
  • 5.java对象什么时候会被回收
  • 6.set/get--方法有啥好处
  • 7.alt+insert-->输入g关联getter and setter方法。
  • 8.8字符大小的来源
  • 9.Java成员变量声明时可以不用赋值,而局部变量声明时一定需要赋值
  • 10.构造方法--不可以return 数据,可以只写return.
  • 11.this.的作用

1.打断点的形状

  • 菱形断点, Java Method Breakpoints–方法
  • 眼睛断点, Java Field Breakpoints–字段
  • 闪电断点, Exception Breakpoints–异常

2.快捷键alt+鼠标左键跨行选择

3.同一包下不用导包。

不同模块下的包不支持直接调用,需要用到Maven引入依赖。

4.类体里只能写:定义语句和方法。

赋值语句不行。
java基础查漏补缺day06_第1张图片

5.java对象什么时候会被回收

  1. 在什么情况下回收对象(可达性分析算法):
    JVM是通过可达性分析算法判断对象是否存活的,这个算法的基本思想是:通过一系列被称为”GC Roots”的对象作为起点,向下搜索,搜索所走过的所有路径称为对象的引用链,当一个对象通过引用链无法到达“GC Roots”时,说明该对象是不可用的,是可以回收的(不一定回收)。
    GC Roots说明:在java中,可作为GC Roots的对象包括以下几种:
    java虚拟机栈帧中的对象。
    方法区中的静态属性引用的对象
    方法区中常量引用的对象
    本地方法栈JNI中引用的对象
  2. 如何回收对象(标记算法判定对象生成还是死亡):
    在可达性分析之后,如果判断对象通过引用链无法到达“GC Roots”,则认为该对象是可回收的,但是不保证一定会回收这个对象。对象的回收至少需要经过两次标记过程:
    判断对象通过引用链不可达之后,进行第一次标记并且进行一次筛选,筛选的条件是判断对象是否有必要执行finalized()方法。如果对象没有覆盖finalize()方法或者不是虚拟机第一次调用,则判断为没有必要执行finalize()方法。
    如果对象有必要执行finalized()方法,则会将该对象放到一个F-Queue队列中,并且虚拟机会自动创建一个低优先级的Finalizer线程执行。“执行”的含义是虚拟机会去触发Finalizer线程的执行,但是不会等待结果的返回。因为如果finalized()方法执行时间较长或者产生死循环的话,将导致F-Queue中的其他对象永远处于等待状态。甚至导致整个回收系统的奔溃。finalized()方法是对象实现逃脱的唯一一次机会。如果对象没有逃脱,则在JVM进行第二次标记之后会回收该对象。
  3. 方法区的回收
    方法去处于永久代中,永久代中的回收主要回收两部分的内容:废弃的常量和无用的类。
  4. 回收常量:回收常量和回收堆对象是相同的,如果一个常量在在常量池中已经存在,如果在系统中没有一个对象引用常量池中的常量的话,那么这个常量就需要被回收。
  5. 回收类:回收类的条件比回收常量的苛刻许多:以下三点为必要不充分条件:

该类所有的实例都已经被回收,也就是说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中的就近原则。

img

img

这就引入了this关键字。

this关键字的作用就是用来区分成员变量和局部变量的。

你可能感兴趣的:(java基础,java,开发语言,后端)